在了解Hadoo基础之后,借助于docker快速实现虚拟化,搭建Hadoop集群,进一步了解Hadoop,实地测试,实地操作,更进一步的了解Hadoop。

首先需要了解Hadoop的各个模块概念已经功能,确定搭建怎么样集群。本文选择搭建一个如下的集群。

容器

NameNode

DataNode

ResourceManager

NodeManager

master2/172.16.0.2

yes

no

yes

no

slave3/172.16.0.3

no

yes

no

yes

slave4/172.16.0.4

no

yes

no

yes

一,准备

以Centos:7.5.1804为基础镜像,构建虚拟容器环境,用与搭建Hadoop集群。

安装Docker环境,Docker基础知识,Docker安装请参考《Docker实践(一)基础知识》

1.1,拉取centos:7.5.1804基础镜像

[root@ecs-7bc6-0001 centos]# docker pull centos:7.5.1804
7.5.1804: Pulling from library/centos
5ad559c5ae16: Pull complete
Digest: sha256:7a45e4a1efbaafc1d9aa89925b6fdb33288a96d35ea0581412316e2f0ad3720a
Status: Downloaded newer image for centos:7.5.1804

1.2,运行centos环境,并进入容器

[root@ecs-7bc6-0001 centos]# docker run -itd --name=centos centos:7.5.1804[root@ecs-7bc6-0001 centos]# docker exec -it {containerId} /bin/bash

1.3,安装必要软件

更新yum源

[root@2bf5e492f205 /]# yum clean[root@2bf5e492f205 /]# yum update

安装ssh-server,ssh-client

[root@2bf5e492f205 /]# yum install -y openssl openssh-server openssh-clients.x86_64

安装Java

[root@2bf5e492f205 /]# yum -y install java-1.8.0-openjdk.x86_64
[root@2bf5e492f205 /]# java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)
[root@2bf5e492f205 /]# whereis java
java: /usr/bin/java /usr/lib/java /etc/java /usr/share/java /usr/share/man/man1/java.1.gz

退出容器,并提交修改到新的centos镜像版本

[root@ecs-7bc6-0001 centos]# docker commit -m"增加ssh java8" -a"weihao" 2bf5e492f205 centos:my

使用新镜像重新启动容器,并登入容器。

docker run -itd --name=centos --privileged centos:my /usr/sbin/init

注意增加--privileged,且entrypoint执行/usr/sbin/init,否则不能使用systemctl,ssh不能设置开机启动。

进入容器并设置ssh开机启动。

[root@ecs-7bc6-0001 centos]# docker exec -it {containerId} bash
[root@2bf5e492f205 /]#
[root@2bf5e492f205 /]# systemctl start sshd.service
[root@2bf5e492f205 /]# systemctl enable sshd.service

1.4,配置

1.4.1,下载hadoop安装包并解压

在容器/usr目录下下载hadoop,并解压安装包。

[root@2bf5e492f205 usr]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
[root@2bf5e492f205 usr]#
[root@2bf5e492f205 usr]# tar -zxvf hadoop-2.7.7.tar.gz

1.4.2,配置环境变量

配置Java以及Hadoop的环境变量,在/etc/profile中增加环境变量

export JAVA_HOME=/usr
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/usr/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

使环境变量生效,并测试

[root@master2 /]# source /etc/profile
[root@master2 /]# echo $HADOOP_HOME
/usr/hadoop-2.7.7
[root@master2 /]# echo $PATH
/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/hadoop-2.7.7/bin:/usr/hadoop-2.7.7/sbin

1.5,创建docker网络

需要以指定host和ip启动容器,docker默认的网络不支持指定Ip指定host,所以需要创建docker网络。使用docker network命令。

[root@ecs-7bc6-0001 centos]# docker network create --subnet 172.16.0.0/24 --gateway 172.16.0.1 hadoop
ecb59f50deebd3a63bdb06be42b6eb40bfabf9c0cc87c0768f6c0288a30c0dc2
[root@ecs-7bc6-0001 centos]#
[root@ecs-7bc6-0001 centos]#
[root@ecs-7bc6-0001 centos]#
[root@ecs-7bc6-0001 centos]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
342bed4d76fe        bridge              bridge              local
ecb59f50deeb        hadoop              bridge              local
5d65376d94d3        host                host                local
72d49606a862        none                null                local

--subnet 172.16.0.0/24,指定子网

--gateway 172.16.0.1,指定网关

hadoop,指定网络名称

1.6,配置无密码登录的ssh

配置无密码登录的ssh,请参考《无密码登录SSH》,三个容器公用一个密钥对,密钥在root的.ssh目录下,在.ssh/authorized_keys中添加三个容器的访问公钥,注意最后一列用户名和主机。

[root@master2 /]# cat root/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0zLk33Xn371ydrPyttHWTHTG0p0BTvTZv8t/PqmBS3MoXWV6cP/aBDKRTGkgi9yAZhnNUE8bFfMMMkK7W+Yy0pti8TPyItj7HgFpDUr7gylq3VwYggAyOZjHwgW+19H4iousfu5YcKrbzdOVUN7Y29OumnIfOg06wGVsyXtFOsml2cyWLsfTO5gr6p2PrMWo2rTnorXHRbA5ZVPPnDgfKnbyD20WroJ7Yf70Yk1G2S4ZEZcWAjteuQCKtDVBYsi3KaG3WHxZ0jDQryqhlPT1KstYlA8trkyK7sJWHBGwNMOBdshiPud81mfYXuU+Rv8BYr3ChdBvmq29/gOD14KEH root@master2
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0zLk33Xn371ydrPyttHWTHTG0p0BTvTZv8t/PqmBS3MoXWV6cP/aBDKRTGkgi9yAZhnNUE8bFfMMMkK7W+Yy0pti8TPyItj7HgFpDUr7gylq3VwYggAyOZjHwgW+19H4iousfu5YcKrbzdOVUN7Y29OumnIfOg06wGVsyXtFOsml2cyWLsfTO5gr6p2PrMWo2rTnorXHRbA5ZVPPnDgfKnbyD20WroJ7Yf70Yk1G2S4ZEZcWAjteuQCKtDVBYsi3KaG3WHxZ0jDQryqhlPT1KstYlA8trkyK7sJWHBGwNMOBdshiPud81mfYXuU+Rv8BYr3ChdBvmq29/gOD14KEH root@slave3
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0zLk33Xn371ydrPyttHWTHTG0p0BTvTZv8t/PqmBS3MoXWV6cP/aBDKRTGkgi9yAZhnNUE8bFfMMMkK7W+Yy0pti8TPyItj7HgFpDUr7gylq3VwYggAyOZjHwgW+19H4iousfu5YcKrbzdOVUN7Y29OumnIfOg06wGVsyXtFOsml2cyWLsfTO5gr6p2PrMWo2rTnorXHRbA5ZVPPnDgfKnbyD20WroJ7Yf70Yk1G2S4ZEZcWAjteuQCKtDVBYsi3KaG3WHxZ0jDQryqhlPT1KstYlA8trkyK7sJWHBGwNMOBdshiPud81mfYXuU+Rv8BYr3ChdBvmq29/gOD14KEH root@slave4

1.7,配置hosts

在/etc/hosts中添加三个容器的ip和hostname对应关系。添加以下三行。

172.16.0.2   master2
172.16.0.3  slave3
172.16.0.4  slave4

退出容器,提交修改到新的centos镜像,准备工作完成

二,开始搭建

2.1,分别启动三个容器,指定IP,HOST等选项。

启动master2

docker run -itd --name=hadoop_master2 --net=hadoop --hostname=master2 --ip=172.16.0.2 --privileged -p 9000:9000 -p 8088:8088 -p 9001:9001 -v /home/work/docker/hadoop:/data centos:my2 /usr/sbin/init

-i,-t,-d,打开容器的标准输入,分配伪终端,且后台运行

--name,指定容器名称

--net,指定容器网络

--hostname,指定容器主机名称

--ip,指定容器ip

--privileged,容器中继承当前权限

-p 9000:9000 -p 8088:8088 -p 9001:9001,开放9000端口并映射到宿主即的9000端口,开放8088端口并映射到宿主即的8088端口,开放9001端口并映射到宿主即的9001端口

-v /home/work/docker/hadoop:/data,宿主机的/home/work/docker/hadoop映射到容器的/data目录

centos:my2,镜像名称和标签

/usr/sbin/init,entrypoint,支持systemctl

启动slave3,slave4

docker run -itd --name=hadoop_slave3 --net=hadoop --hostname=slave3 --ip=172.16.0.3 --privileged -v /home/work/docker/hadoop:/data centos:my2 /usr/sbin/init
docker run -itd --name=hadoop_slave4 --net=hadoop --hostname=slave4 --ip=172.16.0.4 --privileged -v /home/work/docker/hadoop:/data centos:my2 /usr/sbin/init

2.2,修改hadoop配置

2.2.1,修改core-site.xml,创建hadoop.tmp.dir对应目录,修改配置

<configuration><property><name>fs.defaultFS</name><value>hdfs://master2:9000</value></property><property><name>io.file.buffer.size</name><value>131072</value></property><property><name>hadoop.tmp.dir</name><value>file:/data/temp</value></property><property><name>hadoop.proxyuser.root.hosts</name><value>*</value></property><property><name>hadoop.proxyuser.root.groups</name><value>*</value></property>
</configuration>

2.2.2,修改hdfs-site.xml,在<configuration>标签下添加,其中配置中的目录/data/dfs/data和/data/dfs/name需要事先创建。也可以使用其他自定义目录,需要保证配置中的目录存在。

<configuration><property><name>dfs.namenode.secondary.http-address</name><value>master2:9001</value></property><property><name>dfs.namenode.name.dir</name><value>file:/data/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>file:/data/dfs/data</value></property><property><name>dfs.replication</name><value>2</value></property><property><name>dfs.webhdfs.enabled</name><value>true</value></property><property><name>dfs.permissions</name><value>false</value></property><property><name>dfs.web.ugi</name><value>supergroup</value></property>
</configuration>

2.2.3,将mapred-site.xml.template复制一份为mapred-site.xml并修改

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapreduce.jobhistory.address</name><value>master2:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>master2:19888</value></property>
</configuration>

2.2.4,修改yarn-site.xml

<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name><value>org.apache.hadoop.mapred.ShuffleHandler</value></property><property><name>yarn.resourcemanager.address</name><value>master2:8032</value></property><property><name>yarn.resourcemanager.scheduler.address</name><value>master2:8030</value></property><property><name>yarn.resourcemanager.resource-tracker.address</name><value>master2:8031</value></property><property><name>yarn.resourcemanager.admin.address</name><value>master2:8033</value></property><property><name>yarn.resourcemanager.webapp.address</name><value>master2:8088</value></property>
</configuration>

2.3,启动hadoop

2.3.1,启动hdfs

在master2上启动namenode

$ hadoop-daemons.sh --script "$HADOOP_HOME/bin/hdfs" start namenode

在slave3,slave4上启动datanode

$ hadoop-daemons.sh --script "$HADOOP_HOME/bin/hdfs" start namenode

2.3.2,启动yarn

在master2上启动ResourceManager

 hadoop-daemons.sh --script "$HADOOP_HOME/bin/yarn" start resourcemanager

在slave3,slave4上启动NodeManager

hadoop-daemons.sh --script "$HADOOP_HOME/bin/yarn" start nodemanager

三,测试

3.1,查看进程

通常使用jps查看JVM进程,但是简装的openjdk没有jps命令,使用ps -aux查看可以看到resourceManager和namenode进程

[root@master2 hadoop]# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       311  0.1  5.6 2778488 454748 ?      Sl   Jul24   3:03 /usr/bin/java -Dproc_namenode -Xmx1000m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/usr/hadoop-2.7.7/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/usr/hadoop-2.7.
root       455  0.3  5.8 2935432 468584 ?      Sl   Jul24  10:33 /usr/bin/java -Dproc_resourcemanager -Xmx1000m -Dhadoop.log.dir=/usr/hadoop-2.7.7/logs -Dyarn.log.dir=/usr/hadoop-2.7.7/logs -Dhadoop.log.file=yarn.log -Dyarn.log.file=yarn.lo
root       967  0.0  0.0  11820  1684 pts/1    Ss+  Jul24   0:00 bash

3.2,打开namenode网页端,端口9001

3.3,打开resourcemanager网页端,端口8088

hadoop简单集群搭建完成,下一步开始测试hdfs和mapreduce。

(完)(^_^)

Hadoop(二)搭建Hadoop集群相关推荐

  1. Hadoop环境搭建 Zookeeper集群部署

    前提:关闭防火墙 (1)查看防火墙是否关闭 systemctl status firewalld (2)关闭防火墙 systemctl stop firewalld (3)设置防火墙开机不启动 sys ...

  2. spring cloud多模块项目框架搭建-Redis-Cluster集群搭建及系统集成

    第九章 Redis-Cluster集群搭建及系统集成 本系列博客旨在搭建一套能用于实际开发使用的spring cloud多模块微服务项目框架,并不是一个spring cloud的demo而已,提供系统 ...

  3. 手把手教你搭建Hadoop生态系统伪分布式集群

    Hello,我是 Alex 007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫 Alex 的人太多了,再加上每天007的生活,Alex 007就诞生了. 手把手教你搭建Hadoop生态 ...

  4. Hadoop HA 高可用集群搭建

    Hadoop HA 高可用集群搭建 一.首先配置集群信息 1 vi /etc/hosts 二.安装zookeeper 1.解压至/usr/hadoop/下 1 tar -zxvf zookeeper- ...

  5. Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)

    一.服务器环境 主机名 IP 用户名 密码 安装目录 master 192.168.142.124 root xxx /usr/hadoop-2.6.5/ slave1 192.168.142.125 ...

  6. Spark-----Spark 与 Hadoop 对比,Spark 集群搭建与示例运行,RDD算子简单入门

    目录 一.Spark 概述 1.1. Spark是什么 1.2. Spark的特点(优点) 1.3. Spark组件 1.4. Spark和Hadoop的异同 二.Spark 集群搭建 2.1. Sp ...

  7. 【Hadoop生态圈】1.Hadoop入门教程及集群环境搭建

    文章目录 1.简介 2.环境准备 3.安装hadoop 3.修改Hadoop配置文件 3.1.hadoop-env.sh配置 3.2.core-site.xml配置 3.3.hdfs-site.xml ...

  8. hadoop 2.4.1 集群安装一

    配置主机名参考 Hadoop 1.2.1 集群安装一 配置JDK环境参考Hadoop1.2.1集群安装二 配置hadoop A:下载解压hadoop http://mirrors.cnnic.cn/a ...

  9. Hadoop与Spark的集群复制

    Hadoop与Spark的集群复制 前面完成了Master主机上Hadoop与Spark的搭建, 现在我们将该环境及部分配置文件从Master分发到各个Worker节点上(以笔者环境为例). 在集群环 ...

最新文章

  1. mysql插入数据die_吴裕雄 10-MySQL插入数据
  2. mysql union order_MySQL中union和order by同时使用的实现方法
  3. 大学阶段总结——大一
  4. python ttf svg path_SVG的path的使用
  5. VC2010“添加资源-引入JPG图片”会改变图片大小
  6. 震惊!!!这才是代码!!
  7. 使用base64编码把背景添加到CSS文件中
  8. 在不动用sp_configure的情况下,如何 =》去掉列的自增长,并保留原数据
  9. C#中的深度学习:使用OpenCV进行硬币检测
  10. linux cat read line,cat file | while read line的问题
  11. python安卓自动化原理_appium---appium自动化原理
  12. 如何使用 DNSMAQ 搭建 DNS 服务器?
  13. 我的开源项目:FLV封装格式分析器
  14. 红米3s进不了recovery_红米手机3S/3X刷recovery教程及第三方recovery下载
  15. ROS Bridge 笔记(02)— carla_ros_bridge 功能包(准备 ROS环境、运行 ROS Bridge、配置 CARLA 参数、同步模式下使用 ROS Bridge、主车辆控制)
  16. 用计算机刻录光盘,图文详解怎么用电脑刻录光盘
  17. 匀速运动,太空版愤怒的小鸟
  18. Nokia n97详解
  19. 周星馳 電影經典對白
  20. 【云享·人物】华为云AI高级专家白小龙:AI如何释放应用生产力,向AI工程化前行?

热门文章

  1. django集成原有数据库
  2. [iBoard 电子学堂][第二卷 C程序设计语言 ]第二篇 数据类型与运算符
  3. 今天的练习是敏捷结果30天的最后一天
  4. ASP.NET中XML数据的处理
  5. java有道翻译_Java 调用 有道翻译API
  6. java 工程文件改名后显示绿色加号_Gradle学习记录018 构建java JVM工程 part1
  7. 设计师交流社区|积累开拓眼界必备网站
  8. 俯视排版类型海报|没思路?试试可临摹PSD分层模板设计吧!
  9. 美妆海报不会做? PSD分层模板轻松掌握大咖思路!
  10. input自适应_一种Dynamic ReLU:自适应参数化ReLU激活函数(调参记录13)