配置要求

  • 主机内存 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. .net中使用 道格拉斯-普特 抽希轨迹点

    Douglas一Peukcer算法由D.Douglas和T.Peueker于1973年提出,简称D一P算法,是目前公认的线状要素化简经典算法.现有的线化简算法中,有相当一部分都是在该算法基础上进行改进 ...

  2. docker命令汇总

    docker命令汇总 序号 类别 简述 命令 功能 说明 1 整体管理 安装 yum install docker-engine centos上安装docker Ubuntu上安装dockerapt- ...

  3. 代码块: 以冒号作为开始,用缩进来划分作用域,这个整体叫做代码块,python的代码块可以提升整体的整齐度,提高开发效率

    # ### 代码块: 以冒号作为开始,用缩进来划分作用域,这个整体叫做代码块 if 5 == 5: print(1) print(2) if True: print(3) print(4) if Fa ...

  4. js写一个chrome 插件

    访问网站的时候,最烦的就是一些弹窗和广告.于是,就想着能不能在访问特定网站的时候,执行一段js脚本,去除页面的广告.于是乎,好像 chrome 插件可以实现. 这里,以 百度 的网站为例 新建 sim ...

  5. pytorch加载预训练模型参数的方式

    1.直接使用默认程序里的下载方式,往往比较慢: 2.通过修改源代码,使得模型加载已经下载好的参数,修改地方如下: 通过查找自己代码里所调用网络的类,使用pycharm自带的函数查找功能(ctrl+鼠标 ...

  6. cmd中查看MySQL数据库表数据及结构

    0. 1 .cmd进入mysql安装的bin目录(C:\Program Files\XXXXXX\MySQL Server 5.6\bin) mysql -hlocalhost -uroot -p 回 ...

  7. Go 初体验 - 并发与锁.1 - sync.Mutex 与 sync.RWMutex

    ==== Mutex为互斥锁,顾名思义,被Mutex锁住的代码同时只允许一个协程访问,其它协程进来就要排队 如何使用?看代码: 输出: 释义: 并发1000个协程同时更改m的元素,这样会有一部分更改成 ...

  8. it入门之:学会使用Git 分布式版本控制工具

    环境:window 工具:git & TortoiseGit 下载安装以及配置环境变量 :略略略 创建Github账户:登录https://github.com/用自己的常用邮箱创建账户,用来 ...

  9. 求方差分析与两样本T检验 区别

    方差分析与两样本T检验. 1.首先可以看到方差分析(ANOVA)包含两样本T检验,把两样本T检验作为自己的特例.因为ANOVA可以比较多个总体的均值,当然包含两个总体作为特例.实际上,T的平方就是F统 ...

  10. JavaScript字符串字节长度

    var txt2="He中!!";var t = txt2.replace(/[^\u0000-\u00ff]/g,"aa").length;//值是7