配置要求

  • 主机内存 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. 最长连续子序列(dp,分而治之递归)

    5227: 最大子列和问题 时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte 总提交: 76            测试通过:46 描述 给定KK个整数组 ...

  2. ES6的Proxy和Reflect

    Proxy 有一个原始的数据对象,通过代理出来一个新的对象,用户操作的是这个新的对象 { let obj ={ time:'2018-01-01', name:'lx' , _r:123 } let ...

  3. FPGA小例子

    AND ---与门:OR --- 或门:INV --- 非门:NAND --- 与非门:NOR --- 或非门:XOR --- 异或门:XNOR ---同或门:MUX --- 数据选择器: 1.使用一 ...

  4. Spring+Mybatis 复杂的分组查询

    1.需要的结果数据格式为 { "responseCode": "0000", "responseMsg": null, "data ...

  5. 2018(5)软件架构设计,架构风格,REST

    2018上半年系统分析师试题五 阅读以下关于Web应用设计开发的描述,在答题纸上回答问题1至问题3. [说明] 某公司拟开发一个自由,可定制性强.用户界面友好的在线调查系统,以获取员工在课程学习.对公 ...

  6. 解决webpack打包报错: Cannot find module '@webassemblyjs/wasm-parser'

    出现这个错误时,百度和谷歌中都搜索不出个所以然出来,后来看了一下webpack官网,说建议安装node最新版本: 前提条件 在开始之前,请确保安装了 Node.js 的最新版本.使用 Node.js ...

  7. python多进程并发和多线程并发和协程

    为什么需要并发编程? 如果程序中包含I/O操作,程序会有很高的延迟,CPU会处于等待状态,这样会浪费系统资源,浪费时间 1.Python的并发编程分为多进程并发和多线程并发 多进程并发:运行多个独立的 ...

  8. JDK丨WIN10配置JDK1.8 (解决javac不是内部或外部命令,也不是可运行的程序或批处理文件)

    1.下载JDK,安装. 2.配置JDK. (右键我的电脑 - 属性 - 高级系统设置 - 环境变量.) 2.1 添加系统变量JAVA_HOME 变量名:JAVA_HOME 变量值:C:\Program ...

  9. eclipse中tomcat的add and Remove找不到项目

    在我们运行项目前,都需要将项目部署到tomcat上,但是有时我们会遇到这种情况:项目明明存在,但是eclipse中tomcat的add and remove找不到项目,无法部署,那么这个问题该如何解决 ...

  10. Pocket Gem OA: Log Parser

    time a given player spends actually connected to the network. We keep console logs of various game s ...