Hadoop(二)搭建Hadoop集群

在了解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。

(完)(^_^)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值