Hadoop环境搭建--Docker完全分布式部署Hadoop环境(菜鸟采
坑吐⾎整理)
系统:Centos 7,内核版本3.10
本⽂介绍如何从0利⽤Docker搭建Hadoop环境,制作的镜像⽂件已经分享,也可以直接使⽤制作好的镜像⽂件。
⼀、宿主机准备⼯作
0、宿主机(Centos7)安装Java(⾮必须,这⾥是为了⽅便搭建⽤于调试的伪分布式环境)
1、宿主机安装Docker并启动Docker服务
安装:
yum install -y docker
启动:
service docker start
⼆、制作Hadoop镜像
(本⽂制作的镜像⽂件已经上传,如果直接使⽤制作好的镜像,可以忽略本步,直接跳转⾄步骤三)
1、从官⽅下载Centos镜像
docker pull centos
下载后查看镜像 docker images 可以看到刚刚拉取的Centos镜像
2、为镜像安装Hadoop
1)启动centos容器
docker run -it centos
2)容器内安装java
下载java,根据需要选择合适版本,如果下载历史版本拉到页⾯底端,这⾥我安装了java8
/usr下创建java⽂件夹,并将java安装包在java⽂件下解压
tar -zxvf
解压后⽂件夹改名(⾮必需)
mv jdk1.8.0_192 jdk1.8
配置java环境变量vi ~/.bashrc ,添加内容,保存后退出
export JAVA_HOME=/usr/java/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib
export PATH=$PATH:${JAVA_HOME}/bin
使环境变量⽣效 source ~/.bashrc
docker打包镜像验证安装结果 java -version
这⾥注意,因为是在容器中安装,修改的是~/.bashrc⽽⾮我们使⽤更多的/etc/profile,否则再次启动容器的时候会环境变量会失效。
3)容器内安装hadoop
选择需要的Hadoop版本,下载
在容器的/usr/local⽬录下解压,并修改⽂件夹名为hadoop
tar -zxvf hadoop-2.7.
mv hadoop-2.7. hadoop
设置Hadoop的java-home
进⼊hadoop安装⽬录(以下操作均为hadoop的安装⽬录的相对路径)
cd /usr/local/hadoop/
执⾏vi etc/hadoop/hadoop-env.sh
在⽂件末尾添加jdk⽬录(这⾥=后⾯添加的是你的jdk⽬录)
export JAVA_HOME=/usr/java/jdk1.8
检查安装的hadoop是否可⽤ ./bin/hadoop version (注意要在hadoop的安装⽬录下执⾏)
配置hadoop环境变量
前⾯在验证hadoop命令的时候需要在hadoop的安装⽬录下执⾏./bin/hadoop,为了⽅便在任意地⽅执⾏hadoop命令,配置hadoop的全局环境变量,与java⼀样,修改~/.bashrc⽂件
执⾏vi ~/.bashrc
添加内容
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
(P.S. “HADOOP_HOME=”后⾯配置hadoop安装⽬录;
这⾥的PATH变量是java和hadoop结合的;
这样配置之后,可以在任意位置执⾏hadoop命令)
source ~/.bashrc 使环境变量⽣效
hadoop version 验证变量⽣效
4)为容器安装辅助程序
下⾯安装的程序都是在制作镜像过程中需要⽤的⼯具或踩到的坑,提前装好避免⼀些奇怪问题
配置时间同步服务器
安装ntpdate yum install -y ntpdate
配置时间同步服务器
ntpdate ntp1.aliyun
ntp1.aliyun为时间同步服务器地址,百度可以查到可⽤服务器
安装ssh
检查是否已经默认安装SSHClient和SSH Server
rpm -qa | grep ssh
出现如下结果表⽰已经安装
如未安装,使⽤如下命令安装
yum install openssh-clients
yum install openssh-server
测试ssh是否可⽤
ssh localhost
测试之后就是通过ssh登陆了本机,输⼊ exit 退回到普通终端登陆。
安装rsync
yum -y install rsync
安装dbus
yum -y install dbus
5)将容器制作成镜像
宿主机打开新终端,注意打包镜像操作都是在宿主机内做的,(即你安装Docker的那台机器)。
查看容器id
在宿主机内查看刚刚使⽤的容器ID
docker ps
打包
docker commit -m "centos7 with hadoop" c0905da23733 centos7/hadoop
命令说明:
docker commit [OPTIONS] 容器ID [镜像[:版本标签]]
-m 提交说明
centos7/hadoop 镜像名称,如果不叫版本标签,默认为latest
查看打包结果 docker images
提交镜像
完成上述后已经交将容器打包为本地镜像,下⾯将本地镜像提交到远程仓库,这⾥上传到阿⾥云的镜像仓库,需要事先注册阿⾥云账号。
仓库创建成功后打开仓库可以看到操作指南,在宿主机终端按照指南进⾏后续操作
终端登陆
docker login --username=魔⼥⼩豚 registry-beijing.aliyuncs
推送
$ sudo docker login --username=魔⼥⼩豚 registry-beijing.aliyuncs
$ sudo docker tag [ImageId] registry-beijing.aliyuncs/jing-studio/centos7-hadoop:[镜像版本号]
$ sudo docker push registry-beijing.aliyuncs/jing-studio/centos7-hadoop:[镜像版本号]
根据实际镜像信息替换⽰例中的[ImageId]和[镜像版本号]参数。
三、Hadoop集配置
1、从registry中拉取镜像
$ sudo docker pull registry-beijing.aliyuncs/jing-studio/centos7-hadoop
2、启动镜像
按照下述⽅式,根据需要的节点数启动相应数量的容器(注意为每个容器指定不同的容器名和主机名),这⾥启动3个容器作为⽰例
$ docker run -d --name hadoop0 -h hadoop0 -p 50070:50070 --privileged=true registry-beijing.aliyuncs/jing-studio/centos7-hadoop /usr/sbin/init
其中,-d指定容器启动的终端在后台执⾏(在需要使⽤的容器终端的时候再显⽰进⼊容器,如3-3所述),--name hadoop0 指定容器名称,-h hadoop0 指定容器的主机名(这⾥千万注意,主机名不要包含下划线,对,就是它"_",不要包含下划线、不要包含下划线否则不能启动集。当初因为这问题采坑好久,都是泪),--privileged=true 指定容器获得全部权限, registry-……指定镜像, /usr/sbin/init指定运⾏终端
需要开放的端⼝:namenode开放50070,9000,sourcemanager开放8088
检查容器是否启动 $ docker ps
3、进⼊容器,查看容器ip
$ docker exec -it hadoop0 /bin/bash
其中,-it表明显式打开容器终端,
查看全部容器ip
$ ip addr
建议使⽤3-2启动镜像以及3-3进⼊容器的⽅式运⾏,在开始搭建的时候各种采坑,才到这种合适的⽅式,在容器使⽤过程中不会出现系统服务⽆法启动的情况。
4、配置主机映射
$ vi /etc/hosts
将每个容器的Ip地址和主机名添加到hosts⽂件中
注意集中每个节点都需要配置上述主机映射。
5、为各个集节点配置彼此间的ssh免密登陆
⽣成本机公钥私钥
cd ~/.ssh/ #若没有~/.ssh/⽬录,先执⾏⼀次ssh localhost
ssh-keygen -t rsa # 会有提⽰,都按回车就可以,产⽣公钥私钥
在~/.ssh⽬录下⽣成密钥⽂件,id_dsa: 为私钥;id_dsa.pub: 为公钥
彼此发送密钥
ssh-copy-id ha_slave1
注意要在每个集节点上⽣成密钥、并为其他全部集节点发送密钥,即在master上执⾏⼀次⽣成密钥,然后执⾏两次发送密钥,分别发送给slave1、slave2;然后再在slave1上⽣成密钥发送密钥给其他节点,再在slave2上再次执⾏。
5.1 关闭防⽕墙
service iptables stop
完成上述准备⼯作后对hadoop集进⾏配置,在配置之前,考虑集中节点规划,即,哪些节点作为HDFS的namenode、datanode、secnamenode,哪些节点作为yarn的sourcemanager、nodemanager。本⽂⽰例集规划如下:
hdfs yarn
master namenoder + datanode nodemanager
slave1 datanode sourcemanager + nodemanger
slave2secnamenode + datanode nodemanger
6、选择⼀个节点,进⼊节点,进⾏HDFS配置(注意进⼊到hadoop安装⽬录,在我的镜像⾥是/usr/local/hadoop)
配置l⽂件,指定HDFS主节点
vi etc/l
添加配置内容
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://had0:9000</value>
</property>
<property>
<name&p.dir</name>
<value>/home/data/hadoopdata</value>
</property>
</configuration>
指定hdfs主节点,并指定临时⽂件⽬录,存储hadoop运⾏过程中产⽣的⽂件的⽬录(注意⼀定配置在有权限的⽬录下)配置l
vi etc/l
添加内容
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/data/hadoopdata/name</value>
</property>
<!--配置存储namenode数据的⽬录-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/data/hadoopdata/data</value>
</property>
<!--配置存储datanode数据的⽬录-->
<property>
<name&plication</name>
<value>2</value>
</property>
<!--配置部分数量-->
<property>
<name>dfs.secondary.http.address</name>
<value>had2:50090</value>
</property>
<!--配置第⼆名称节点 -->
</configuration>
7、YARN配置(依然在上述选择的节点进⾏配置)
配置l
vi etc/l
添加内容
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name&sourcemanager.hostname</name>
<value>slave1</value>
</property>
<!--配置yarn主节点-->
<property>
<name&demanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--配置执⾏的计算框架-->
</configuration>
配置l
复制⾃带的临时⽂件,并对⽂件进⾏编辑
cp etc/l.template etc/l
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论