专栏首页RainMark 的文章Linux 下 LXD 容器搭建 Hadoop 集群

Linux 下 LXD 容器搭建 Hadoop 集群

配置要求

  • 主机内存 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 ,实例已经开始在运行了。 此时可以看到只有 master 节点在运行。
$ lxc list
+--------+---------+--------------------+-----------------------------------------------+------------+-----------+
|  NAME  |  STATE  |        IPV4        |                     IPV6                      |    TYPE    | SNAPSHOTS |
+--------+---------+--------------------+-----------------------------------------------+------------+-----------+
| master | RUNNING | 10.71.16.37 (eth0) | fd16:e204:21d5:5295:216:3eff:fec9:dd16 (eth0) | PERSISTENT | 0         |
+--------+---------+--------------------+-----------------------------------------------+------------+-----------+
  • 让我们进入容器中的 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 的。 我们在 master 节点配置好环境,利用 LXD 容器克隆,复制出多个节点。每个节点间可以直接做基于 hostname 的网络访问。
$ hostname
Arch
$ lxc exec master -- /bin/bash
root@Master:~# ping Arch
PING Arch (127.0.1.1) 56(84) bytes of data.
64 bytes from rain-mark (127.0.1.1): icmp_seq=1 ttl=64 time=0.020 ms
64 bytes from rain-mark (127.0.1.1): icmp_seq=2 ttl=64 time=0.031 ms
^C
  • 配置 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.3.tar.gz master/root/hadoop-2.7.3.tar.gz
$ lxc exec master -- /bin/bash
root@master# mkdir -p /home/root/HD_data
root@master# tar xf hadoop-2.7.3.tar.gz -C /usr/local
root@master# cd /usr/local/hadoop-2.7.3

root@master:/usr/local/hadoop-2.7.3# 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.3# 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.3# 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.3# ./bin/hdfs namenode -format
root@master:/usr/local/hadoop-2.7.3# exit
  • 至此, Hadoop 基本配置文件已经配好,接下来我们 clone 出两个 slave 节点。 OK ,现在,两个 slave 节点和 master 一样,我们免去了重复配置的麻烦。
$ lxc copy master slave0
$ lxc start slave0
$ lxc copy master slave1
$ lxc start slave1
  • 启动 Hadoop 集群。 至此,集群已经搭建完毕!我们可以通过 HOST 的浏览器看到集群的状态。
$ lxc exec master -- /bin/bash
root@master# cd /usr/local/hadoop-2.7.3
root@master:/usr/local/hadoop-2.7.3# ./sbin/hadoop-daemon.sh start namenode
starting namenode, logging to /usr/local/hadoop-2.7.3/logs/hadoop-root-namenode-master.out
root@master:/usr/local/hadoop-2.7.3# ./sbin/yarn-daemon.sh start resourcemanager 
starting resourcemanager, logging to /usr/local/hadoop-2.7.3/logs/yarn-root-resourcemanager-master.out
root@master:/usr/local/hadoop-2.7.3# /usr/local/jdk1.8.0_111/bin/jps
506 NameNode
604 ResourceManager
829 Jps
root@master:/usr/local/hadoop-2.7.3# exit

$ lxc exec slave0 -- /bin/bash
root@slave0:~# cd /usr/local/hadoop-2.7.3/
root@slave0:/usr/local/hadoop-2.7.3# ./sbin/hadoop-daemon.sh start datanode
starting datanode, logging to /usr/local/hadoop-2.7.3/logs/hadoop-root-datanode-slave0.out
root@slave0:/usr/local/hadoop-2.7.3# ./sbin/yarn-daemon.sh start nodemanager
starting nodemanager, logging to /usr/local/hadoop-2.7.3/logs/yarn-root-nodemanager-slave0.out
root@slave0:/usr/local/hadoop-2.7.3# /usr/local/jdk1.8.0_111/bin/jps 
433 DataNode
538 NodeManager
670 Jps
root@slave0:/usr/local/hadoop-2.7.3# exit

# 需要对 slave1 同样启动 datanode 以及 nodemanager 。
  • 查看各个节点状态。 OK , 主机浏览器输入 master 节点 IP:50070 可以看到 HDFS 状态,以及 IP:8088 可以看到 Yarn 信息。在 Web 页面我们也能看到多少个节点在运行。
$ lxc list
+--------+---------+--------------------+-----------------------------------------------+------------+-----------+
|  NAME  |  STATE  |        IPV4        |                     IPV6                      |    TYPE    | SNAPSHOTS |
+--------+---------+--------------------+-----------------------------------------------+------------+-----------+
| master | RUNNING | 10.71.16.37 (eth0) | fd16:e204:21d5:5295:216:3eff:fec9:dd16 (eth0) | PERSISTENT | 0         |
+--------+---------+--------------------+-----------------------------------------------+------------+-----------+
| slave0 | RUNNING | 10.71.16.22 (eth0) | fd16:e204:21d5:5295:216:3eff:fe8e:8e57 (eth0) | PERSISTENT | 0         |
+--------+---------+--------------------+-----------------------------------------------+------------+-----------+
| slave1 | RUNNING | 10.71.16.31 (eth0) | fd16:e204:21d5:5295:216:3eff:fe5a:ef1 (eth0)  | PERSISTENT | 0         |
+--------+---------+--------------------+-----------------------------------------------+------------+-----------+

总 结

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


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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • VirtuablBox 出错: VERR_SUPLIB_OWNER_NOT_ROOT 解决方法

    刚刚把 VirtualBox 升级, 从 3.2 到 4.0.4 后,虚拟机上的系统无法运行, 提示:

    RainMark
  • Assembly - Registers

    Processor operations mostly involve processing data. This data can be stored in ...

    RainMark
  • C++ RTTI

    RainMark
  • 【 VMCloud 】 云平台进阶篇 Monitor 监控

    终于到了这一篇,从数据层到应用层都是完全基于QCloud平台优化,完全将微软系应用架构搬到了国内云平台上,也算是国内第一例了。

    李斯达
  • 为何一个@LoadBalanced注解就能让RestTemplate拥有负载均衡的能力?【享学Spring Cloud】

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    YourBatman
  • 数据算法之反转排序 | 寻找相邻单词的数量

    想处理的问题是:统计一个单词相邻前后两位的数量,如有w1,w2,w3,w4,w5,w6,则:

    大数据技术与架构
  • 人生充满选择,编程也是

    人生在世,我们每天都需要进行三项重大选择:早餐吃什么,午餐吃什么,晚餐吃什么。这一度让我感到非常为难,于是我养成了一个习惯,只要在附近的餐馆发现了几种还不错的食...

    Sheepy
  • 投融资汇总 | 本周(12.03-12.09)基因筛查及检测类公司较受欢迎

    镁客网
  • Jenkins+Maven+Svn实现代码自动打包与发布

    可能很多小伙伴们都知道,在一般互联企业初期大多数都是采用手工打包上传与发布的方式进行代码发布,常见就是利用打包工具手工打包,上传到WEB服务器,备份原代码文件...

    民工哥
  • Django-手撸简易web框架-实现动态网页-wsgiref初识-jinja2初识-python主流web框架对比-00

    原来请求首行的 GET 后面跟的就是请求我们想要信息(/index 首页、/home 家)

    suwanbin

扫码关注云+社区

领取腾讯云代金券