配置要求

  • 主机内存 4GB 。
  • 磁盘 100 GB 以上。
  • HOST 机安装常用 Linux 发行版。

Linux Container ( LXD )

以主机 ubuntu 16.04 为例。

  • 安装 LXD 。

    $ sudo apt-get install lxd
    $ newgrp lxd
    $ sudo lxd init
  • 查看可用的镜像源,如果使用默认的 image ,可以跳过下面两步,直接进入后面的 launch 。
    $ lxc remote list
  • 选取上一步喜欢的 image ,复制链接,并在下面添加该镜像源。
    $ lxc remote add images <URL>
  • 现在可以获取并加载镜像了。
    $ lxc launch <images_name>:<version> <host_name>
    # images_name 是镜像源名称,就是上一步取名的 images ,是什么可以自己取。
    # version 是镜像的版本。
    # host_name 是欲创建的实例的主机名。 # 以用默认镜像源,搭建 Hadoop 为例,这里应该是:
    $ lxc launch ubuntu-daily:16.04 master
  • OK ,实例已经开始在运行了。
    $ lxc list
    +--------+---------+--------------------+-----------------------------------------------+------------+-----------+
    | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
    +--------+---------+--------------------+-----------------------------------------------+------------+-----------+
    | master | RUNNING | 10.71.16.37 (eth0) | fd16:e204:21d5:::3eff:fec9:dd16 (eth0) | PERSISTENT | |
    +--------+---------+--------------------+-----------------------------------------------+------------+-----------+

    此时可以看到只有 master 节点在运行。

  • 让我们进入容器中的 ubuntu 。
    $ lxc exec master -- /bin/bash

    如果成功进入,恭喜!第一步迈开了。

Hadoop 集群

  • 更新系统。

    $ lxc exec master -- /bin/bash
    root@master# apt-get update
    root@master# apt-get upgrade -y
  • 配置环境,由于 LXD 在创建实例时,就设置好了主机名,禁用了防火墙,同时 LXD 的网络模块为每台虚拟主机做了动态主机映射。因此下面这样是 OK 的。
    $ hostname
    Arch
    $ lxc exec master -- /bin/bash
    root@Master:~# ping Arch
    PING Arch (127.0.1.1) () bytes of data.
    bytes from rain-mark (127.0.1.1): icmp_seq= ttl= time=0.020 ms
    bytes from rain-mark (127.0.1.1): icmp_seq= ttl= time=0.031 ms
    ^C

    我们在 master 节点配置好环境,利用 LXD 容器克隆,复制出多个节点。每个节点间可以直接做基于 hostname 的网络访问。

  • 配置 Java 环境。
    $ lxc file push ~/Downloads/jdk-8u111-linux-x64.tar.gz master/root/jdk-8u111-linux-x64.tar.gz # 将 HOST 机上的文件 push 进虚拟机。
    $ lxc exec master -- /bin/bash
    root@master# tar xf jdk-8u111-linux-x64.tar.gz -C /usr/local
    root@master# echo "export JAVA_HOME=/usr/local/jdk1.8.0_111" >> ~/.bashrc
    root@master# exit
  • 配置 Hadoop 。
    $ lxc file push ~/Downloads/hadoop-2.7..tar.gz master/root/hadoop-2.7..tar.gz
    $ lxc exec master -- /bin/bash
    root@master# mkdir -p /home/root/HD_data
    root@master# tar xf hadoop-2.7..tar.gz -C /usr/local
    root@master# cd /usr/local/hadoop-2.7. root@master:/usr/local/hadoop-2.7.# cat << EOF > etc/core-site.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/root/HD_data</value>
    </property>
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://master:8020</value>
    </property>
    </configuration>
    EOF root@master:/usr/local/hadoop-2.7.# cat << EOF > etc/yarn-site.xml
    <?xml version="1.0"?> <configuration>
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>master</value>
    </property>
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    </configuration>
    EOF root@master:/usr/local/hadoop-2.7.# cat << EOF > etc/mapred-site.xml
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    </configuration>
    EOF root@master:/usr/local/hadoop-2.7.# ./bin/hdfs namenode -format
    root@master:/usr/local/hadoop-2.7.# exit
  • 至此, Hadoop 基本配置文件已经配好,接下来我们 clone 出两个 slave 节点。
    $ lxc copy master slave0
    $ lxc start slave0
    $ lxc copy master slave1
    $ lxc start slave1

    OK ,现在,两个 slave 节点和 master 一样,我们免去了重复配置的麻烦。

  • 启动 Hadoop 集群。
    $ lxc exec master -- /bin/bash
    root@master# cd /usr/local/hadoop-2.7.
    root@master:/usr/local/hadoop-2.7.# ./sbin/hadoop-daemon.sh start namenode
    starting namenode, logging to /usr/local/hadoop-2.7./logs/hadoop-root-namenode-master.out
    root@master:/usr/local/hadoop-2.7.# ./sbin/yarn-daemon.sh start resourcemanager
    starting resourcemanager, logging to /usr/local/hadoop-2.7./logs/yarn-root-resourcemanager-master.out
    root@master:/usr/local/hadoop-2.7.# /usr/local/jdk1..0_111/bin/jps
    NameNode
    ResourceManager
    Jps
    root@master:/usr/local/hadoop-2.7.# exit $ lxc exec slave0 -- /bin/bash
    root@slave0:~# cd /usr/local/hadoop-2.7./
    root@slave0:/usr/local/hadoop-2.7.# ./sbin/hadoop-daemon.sh start datanode
    starting datanode, logging to /usr/local/hadoop-2.7./logs/hadoop-root-datanode-slave0.out
    root@slave0:/usr/local/hadoop-2.7.# ./sbin/yarn-daemon.sh start nodemanager
    starting nodemanager, logging to /usr/local/hadoop-2.7./logs/yarn-root-nodemanager-slave0.out
    root@slave0:/usr/local/hadoop-2.7.# /usr/local/jdk1..0_111/bin/jps
    DataNode
    NodeManager
    Jps
    root@slave0:/usr/local/hadoop-2.7.# exit # 需要对 slave1 同样启动 datanode 以及 nodemanager 。

    至此,集群已经搭建完毕!我们可以通过 HOST 的浏览器看到集群的状态。

  • 查看各个节点状态。
    $ lxc list
    +--------+---------+--------------------+-----------------------------------------------+------------+-----------+
    | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
    +--------+---------+--------------------+-----------------------------------------------+------------+-----------+
    | master | RUNNING | 10.71.16.37 (eth0) | fd16:e204:21d5:::3eff:fec9:dd16 (eth0) | PERSISTENT | |
    +--------+---------+--------------------+-----------------------------------------------+------------+-----------+
    | slave0 | RUNNING | 10.71.16.22 (eth0) | fd16:e204:21d5:::3eff:fe8e:8e57 (eth0) | PERSISTENT | |
    +--------+---------+--------------------+-----------------------------------------------+------------+-----------+
    | slave1 | RUNNING | 10.71.16.31 (eth0) | fd16:e204:21d5:::3eff:fe5a:ef1 (eth0) | PERSISTENT | |
    +--------+---------+--------------------+-----------------------------------------------+------------+-----------+

    OK , 主机浏览器输入 master 节点 IP:50070 可以看到 HDFS 状态,以及 IP:8088 可以看到 Yarn 信息。在 Web 页面我们也能看到多少个节点在运行。

总 结

基于 LXD 的虚拟化容器,我们可以很方便的、很节约资源的在 Linux 主机下进行 3 节点甚至更多节点的 Hadoop 集群搭建练习。非常利于硬件资源不足的学生、老师进行演示。更多关于 LXD 的资源,以及 Hadoop 的资源,请参考各自官方文档。


原创文章,转载请注明出处,否则必究相关责任!

Linux 下 LXD 容器搭建 Hadoop 集群的更多相关文章

  1. linux下利用httpd搭建tomcat集群,实现负载均衡

    公司使用运营管理平台是单点tomcat,使用量大,或者导出较大的运营数据时,会造成平台不可用,现在需要搭建tomcat集群,调研后,决定使用apache的httpd来搭建tomcat集群.以下是搭建步 ...

  2. Linux下搭建Hadoop集群

    本文地址: 1.前言 本文描述的是如何使用3台Hadoop节点搭建一个集群.本文中,使用的是三个Ubuntu虚拟机,并没有使用三台物理机.在使用物理机搭建Hadoop集群的时候,也可以参考本文.首先这 ...

  3. Linux 搭建Hadoop集群 成功

    内容基于(自己的真是操作步骤编写) Linux 搭建Hadoop集群---Jdk配置 Linux 搭建Hadoop集群 ---SSH免密登陆 一:下载安装 Hadoop 1.1:下载指定的Hadoop ...

  4. 使用Windows Azure的VM安装和配置CDH搭建Hadoop集群

    本文主要内容是使用Windows Azure的VIRTUAL MACHINES和NETWORKS服务安装CDH (Cloudera Distribution Including Apache Hado ...

  5. 搭建Hadoop集群 (三)

    通过 搭建Hadoop集群 (二), 我们已经可以顺利运行自带的wordcount程序. 下面学习如何创建自己的Java应用, 放到Hadoop集群上运行, 并且可以通过debug来调试. 有多少种D ...

  6. 在搭建Hadoop集群环境时遇到的一些问题

    最近在学习搭建hadoop集群环境,在搭建的过程中遇到很多问题,在这里做一些记录.1. SSH相关的问题 问题一: ssh: connect to host localhost port 22: Co ...

  7. 使用Docker搭建Hadoop集群(伪分布式与完全分布式)

    之前用虚拟机搭建Hadoop集群(包括伪分布式和完全分布式:Hadoop之伪分布式安装),但是这样太消耗资源了,自学了Docker也来操练一把,用Docker来构建Hadoop集群,这里搭建的Hado ...

  8. virtualbox 虚拟3台虚拟机搭建hadoop集群

    用了这么久的hadoop,只会使用streaming接口跑任务,各种调优还不熟练,自定义inputformat , outputformat, partitioner 还不会写,于是干脆从头开始,自己 ...

  9. 搭建Hadoop集群 (一)

    上面讲了如何搭建Hadoop的Standalone和Pseudo-Distributed Mode(搭建单节点Hadoop应用环境), 现在我们来搭建一个Fully-Distributed Mode的 ...

随机推荐

  1. VUE-008-通过路由 router.push 传递 query 参数(路由 path 识别,请求链接显示参数传递)

    在前端页面表单列表修改时,经常需要在页面切换的时候,传递需要修改的表单内容,通常可通过路由进行表单参数的传递. 首先,配置页面跳转路由.在 router/index.js 中配置相应的页面跳转路由,如 ...

  2. 前端混淆--JavaScript Obfuscator

    引言: 前端代码是直接暴漏在浏览器中的,很多web攻击都是通过直接debug业务逻辑找到漏洞进行攻击,另外还有些喜欢“不劳而获”的分子暴力盗取他人网页简单修改后用来获利,总体上来说就是前端的逻辑太容易 ...

  3. 20175201课下作业 MyCP

    要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为十进 ...

  4. Oracle 11g R2性能优化 10046 event

    作为SQL Trace的扩展功能,Oracle 10046 event(10046事件)是一个重要的调试事件,也可以说是系统性能分析时最重要的一个事件,它包含比SQL Trace更多的信息.但可惜的是 ...

  5. Sql题面试题

    哪位大神会此题,请给出答案,十分感谢! 哪位大神会此题,请给出答案,十分感谢!

  6. Cocos Creator (webgl模式下怎么让canvas背景透明)

    项目中构建出web-mobile包后,打开main.js 在main.js中加入如下两行即可让canvas变透明 cc.director.setClearColor(new cc.Color(0,0, ...

  7. Emmet:HTML/CSS代码快速编写神器教程

    Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码,大大提高了HTML/CSS代码编写的速度,比如下面的演示: ...

  8. windows 中的类似于sudo的命令(在cmd中以另一个用户的身份运行命令)

    linux中我们习惯用sudo命令来临时用另一个用户的身份执行命令. windows中,通常我们需要用管理员权限执行命令的时候通常是 右键->run as administrator. 用着键盘 ...

  9. CentOS 搭建git服务

    git服务器的搭建是非常简单的. 1. 安装git yum install git 2. 创建用户git groupadd git adduser git -g git passwd git 3. 创 ...

  10. 网络库压力测试:mongols VS evpp

    evpp是360出品的一个网络库,基于libevent,进行了许多改造,对c++11友好.据称比libevent性能要好. 到底有多好呢?360开发人员有自己的测试,信不信由你. evpp源码下有个h ...