使用docker搭建hadoop分布式集群
2017-06-23 12:18
816 查看
使用docker搭建部署hadoop分布式集群
在网上找了非常长时间都没有找到使用docker搭建hadoop分布式集群的文档,没办法,仅仅能自己写一个了。
一:环境准备:
1:首先要有一个Centos7操作系统。能够在虚拟机中安装。
2:在centos7中安装docker,docker的版本号为1.8.2
安装过程例如以下:
<1>安装制定版本号的docker
<2>安装的时候可能会报错,须要删除这个依赖
启动docker
验证安装结果:
<3>启动之后运行docker info会看到以下有两行警告信息
须要关闭防火墙并重新启动系统
<4>运行容器可能会报错
须要关闭selinux
解决方法:
3:须要先构建一个hadoop的基础镜像,使用dockerfile文件方式进行构建。
先构建一个具备ssh功能的镜像。方便后期使用。(可是这样对于容器的安全性会有影响)
注意:这个镜像中的root用户的password是root
Mkdir centos-ssh-root
Cd centos-ssh-root
Vi Dockerfile
构建命令:
docker build -t=”crxy/centos-ssh-root” .
查询刚才构建成功的镜像
4:基于这个镜像再构建一个带有jdk的镜像
注意:jdk使用的是1.7版本号的
Mkdir centos-ssh-root-jdk
Cd centos-ssh-root-jdk
Cp ../jdk-7u75-linux-x64.tar.gz .
Vi Dockerfile
构建命令:
docker build -t=”crxy/centos-ssh-root-jdk” .
查询构建成功的镜像
5:基于这个jdk镜像再构建一个带有hadoop的镜像
注意:hadoop使用的是2.4.1版本号的。
Mkdir centos-ssh-root-jdk-hadoop
Cd centos-ssh-root-jdk-hadoop
Cp ../hadoop-2.4.1.tar.gz .
Vi Dockerfile
构建命令:
docker build -t=”crxy/centos-ssh-root-jdk-hadoop” .
查询构建成功的镜像
二:搭建hadoop分布式集群
1:集群规划
准备搭建一个具有三个节点的集群,一主两从
主节点:hadoop0 ip:192.168.2.10
从节点1:hadoop1 ip:192.168.2.11
从节点2:hadoop2 ip:192.168.2.12
可是由于docker容器又一次启动之后ip会发生变化,所以须要我们给docker设置固定ip。使用pipework给docker容器设置固定ip
2:启动三个容器,分别作为hadoop0 hadoop1 hadoop2
在宿主机上运行以下命令。给容器设置主机名和容器的名称。而且在hadoop0中对外开放port50070 和8088
使用docker ps 查看刚才启动的是三个容器
3:给这三台容器设置固定IP
1:下载pipework
下载地址:https://github.com/jpetazzo/pipework.git
2:把下载的zip包上传到宿主机服务器上,解压,改名字
3:安装bridge-utils
4:创建网络
5:给容器设置固定ip
验证一下。分别ping三个ip,能ping通就说明没问题
4:配置hadoop集群
先连接到hadoop0上,
使用命令
以下的步骤就是hadoop集群的配置过程
1:设置主机名与ip的映射。改动三台容器:vi /etc/hosts
加入以下配置
2:设置ssh免password登录
在hadoop0上运行以下操作
3:在hadoop0上改动hadoop的配置文件
进入到/usr/local/hadoop/etc/hadoop文件夹
改动文件夹下的配置文件core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml
(1)hadoop-env.sh
(2)core-site.xml
(3)hdfs-site.xml
(4)yarn-site.xml
(5)改动文件名称:mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
(6)格式化
进入到/usr/local/hadoop文件夹下
1、运行格式化命令
看到以下命令说明格式化成功。
格式化操作不能反复运行。假设一定要反复格式化。带參数-force就可以。
(7)启动伪分布hadoop
第一次启动的过程中须要输入yes确认一下。
使用jps。检查进程是否正常启动?能看到以下几个进程表示伪分布启动成功
(8)停止伪分布hadoop
(9)指定nodemanager的地址。改动文件yarn-site.xml
(10)改动hadoop0中hadoop的一个配置文件etc/hadoop/slaves
删除原来的全部内容,改动为例如以下
(11)在hadoop0中运行命令
(12)启动hadoop分布式集群服务
注意:在运行的时候会报错。是由于两个从节点缺少which命令,安装就可以
分别在两个从节点运行以下命令安装
再启动集群(假设集群已启动,须要先停止)
(13)验证集群是否正常
首先查看进程:
Hadoop0上须要有这几个进程
Hadoop1上须要有这几个进程
Hadoop2上须要有这几个进程
使用程序验证集群服务
创建一个本地文件
上传a.txt到hdfs上
运行wordcount程序
查看程序运行结果
这样就说明集群正常了。
通过浏览器訪问集群的服务
由于在启动hadoop0这个容器的时候把50070和8088映射到宿主机的相应port上了
所以在这能够直接通过宿主机訪问容器中hadoop集群的服务
宿主机的ip为:192.168.1.144
在网上找了非常长时间都没有找到使用docker搭建hadoop分布式集群的文档,没办法,仅仅能自己写一个了。
一:环境准备:
1:首先要有一个Centos7操作系统。能够在虚拟机中安装。
2:在centos7中安装docker,docker的版本号为1.8.2
安装过程例如以下:
<1>安装制定版本号的docker
yum install -y docker-1.8.2-10.el7.centos
<2>安装的时候可能会报错,须要删除这个依赖
rpm -e lvm2-7:2.02.105-14.el7.x86_64
启动docker
service docker start
验证安装结果:
<3>启动之后运行docker info会看到以下有两行警告信息
须要关闭防火墙并重新启动系统
systemctl stop firewalld systemctl disable firewalld 注意:运行完上面的命令之后须要重新启动系统 reboot -h(重新启动系统)
<4>运行容器可能会报错
须要关闭selinux
解决方法:
1:setenforce 0(立马生效,不须要重新启动操作系统) 2:改动/etc/selinux/config文件里的SELINUX=disabled 。然后重新启动系统生效 建议两个步骤都运行,这样能够确保系统重新启动之后selinux也是关闭状态
3:须要先构建一个hadoop的基础镜像,使用dockerfile文件方式进行构建。
先构建一个具备ssh功能的镜像。方便后期使用。(可是这样对于容器的安全性会有影响)
注意:这个镜像中的root用户的password是root
Mkdir centos-ssh-root
Cd centos-ssh-root
Vi Dockerfile
# 选择一个已有的os镜像作为基础 FROM centos # 镜像的作者 MAINTAINER crxy # 安装openssh-server和sudo软件包,而且将sshd的UsePAM參数设置成no RUN yum install -y openssh-server sudo RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config #安装openssh-clients RUN yum install -y openssh-clients # 加入測试用户root。passwordroot,而且将此用户加入到sudoers里 RUN echo "root:root" | chpasswd RUN echo "root ALL=(ALL) ALL" >> /etc/sudoers # 以下这两句比較特殊,在centos6上必须要有,否则创建出来的容器sshd不能登录 RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key # 启动sshd服务而且暴露22port RUN mkdir /var/run/sshd EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]
构建命令:
docker build -t=”crxy/centos-ssh-root” .
查询刚才构建成功的镜像
4:基于这个镜像再构建一个带有jdk的镜像
注意:jdk使用的是1.7版本号的
Mkdir centos-ssh-root-jdk
Cd centos-ssh-root-jdk
Cp ../jdk-7u75-linux-x64.tar.gz .
Vi Dockerfile
FROM crxy/centos-ssh-root ADD jdk-7u75-linux-x64.tar.gz /usr/local/ RUN mv /usr/local/jdk1.7.0_75 /usr/local/jdk1.7 ENV JAVA_HOME /usr/local/jdk1.7 ENV PATH $JAVA_HOME/bin:$PATH
构建命令:
docker build -t=”crxy/centos-ssh-root-jdk” .
查询构建成功的镜像
5:基于这个jdk镜像再构建一个带有hadoop的镜像
注意:hadoop使用的是2.4.1版本号的。
Mkdir centos-ssh-root-jdk-hadoop
Cd centos-ssh-root-jdk-hadoop
Cp ../hadoop-2.4.1.tar.gz .
Vi Dockerfile
FROM crxy/centos-ssh-root-jdk ADD hadoop-2.4.1.tar.gz /usr/local RUN mv /usr/local/hadoop-2.4.1 /usr/local/hadoop ENV HADOOP_HOME /usr/local/hadoop ENV PATH $HADOOP_HOME/bin:$PATH
构建命令:
docker build -t=”crxy/centos-ssh-root-jdk-hadoop” .
查询构建成功的镜像
二:搭建hadoop分布式集群
1:集群规划
准备搭建一个具有三个节点的集群,一主两从
主节点:hadoop0 ip:192.168.2.10
从节点1:hadoop1 ip:192.168.2.11
从节点2:hadoop2 ip:192.168.2.12
可是由于docker容器又一次启动之后ip会发生变化,所以须要我们给docker设置固定ip。使用pipework给docker容器设置固定ip
2:启动三个容器,分别作为hadoop0 hadoop1 hadoop2
在宿主机上运行以下命令。给容器设置主机名和容器的名称。而且在hadoop0中对外开放port50070 和8088
docker run --name hadoop0 --hostname hadoop0 -d -P -p 50070:50070 -p 8088:8088 crxy/centos-ssh-root-jdk-hadoop docker run --name hadoop1 --hostname hadoop1 -d -P crxy/centos-ssh-root-jdk-hadoop docker run --name hadoop2 --hostname hadoop2 -d -P crxy/centos-ssh-root-jdk-hadoop
使用docker ps 查看刚才启动的是三个容器
3:给这三台容器设置固定IP
1:下载pipework
下载地址:https://github.com/jpetazzo/pipework.git
2:把下载的zip包上传到宿主机服务器上,解压,改名字
unzip pipework-master.zip mv pipework-master pipework cp -rp pipework/pipework /usr/local/bin/
3:安装bridge-utils
yum -y install bridge-utils
4:创建网络
brctl addbr br0 ip link set dev br0 up ip addr add 192.168.2.1/24 dev br0
5:给容器设置固定ip
pipework br0 hadoop0 192.168.2.10/24 pipework br0 hadoop1 192.168.2.11/24 pipework br0 hadoop2 192.168.2.12/24
验证一下。分别ping三个ip,能ping通就说明没问题
4:配置hadoop集群
先连接到hadoop0上,
使用命令
docker exec -it hadoop0 /bin/bash
以下的步骤就是hadoop集群的配置过程
1:设置主机名与ip的映射。改动三台容器:vi /etc/hosts
加入以下配置
192.168.2.10 hadoop0 192.168.2.11 hadoop1 192.168.2.12 hadoop2
2:设置ssh免password登录
在hadoop0上运行以下操作
cd ~ mkdir .ssh cd .ssh ssh-keygen -t rsa(一直按回车就可以) ssh-copy-id -i localhost ssh-copy-id -i hadoop0 ssh-copy-id -i hadoop1 ssh-copy-id -i hadoop2 在hadoop1上运行以下操作 cd ~ cd .ssh ssh-keygen -t rsa(一直按回车就可以) ssh-copy-id -i localhost ssh-copy-id -i hadoop1 在hadoop2上运行以下操作 cd ~ cd .ssh ssh-keygen -t rsa(一直按回车就可以) ssh-copy-id -i localhost ssh-copy-id -i hadoop2
3:在hadoop0上改动hadoop的配置文件
进入到/usr/local/hadoop/etc/hadoop文件夹
改动文件夹下的配置文件core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml
(1)hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.7
(2)core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop0:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> </property> <property> <name>fs.trash.interval</name> <value>1440</value> </property> </configuration>
(3)hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
(4)yarn-site.xml
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> </configuration>
(5)改动文件名称:mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
(6)格式化
进入到/usr/local/hadoop文件夹下
1、运行格式化命令
bin/hdfs namenode -format 注意:在运行的时候会报错,是由于缺少which命令。安装就可以 运行以下命令安装 yum install -y which
看到以下命令说明格式化成功。
格式化操作不能反复运行。假设一定要反复格式化。带參数-force就可以。
(7)启动伪分布hadoop
命令:sbin/start-all.sh
第一次启动的过程中须要输入yes确认一下。
使用jps。检查进程是否正常启动?能看到以下几个进程表示伪分布启动成功
[root@hadoop0 hadoop]# jps 3267 SecondaryNameNode 3003 NameNode 3664 Jps 3397 ResourceManager 3090 DataNode 3487 NodeManager
(8)停止伪分布hadoop
命令:sbin/stop-all.sh
(9)指定nodemanager的地址。改动文件yarn-site.xml
<property> <description>The hostname of the RM.</description> <name>yarn.resourcemanager.hostname</name> <value>hadoop0</value> </property>
(10)改动hadoop0中hadoop的一个配置文件etc/hadoop/slaves
删除原来的全部内容,改动为例如以下
hadoop1 hadoop2
(11)在hadoop0中运行命令
scp -rq /usr/local/hadoop hadoop1:/usr/local scp -rq /usr/local/hadoop hadoop2:/usr/local
(12)启动hadoop分布式集群服务
运行sbin/start-all.sh
注意:在运行的时候会报错。是由于两个从节点缺少which命令,安装就可以
分别在两个从节点运行以下命令安装
yum install -y which
再启动集群(假设集群已启动,须要先停止)
sbin/start-all.sh
(13)验证集群是否正常
首先查看进程:
Hadoop0上须要有这几个进程
[root@hadoop0 hadoop]# jps 4643 Jps 4073 NameNode 4216 SecondaryNameNode 4381 ResourceManager
Hadoop1上须要有这几个进程
[root@hadoop1 hadoop]# jps 715 NodeManager 849 Jps 645 DataNode
Hadoop2上须要有这几个进程
[root@hadoop2 hadoop]# jps 456 NodeManager 589 Jps 388 DataNode
使用程序验证集群服务
创建一个本地文件
vi a.txt hello you hello me
上传a.txt到hdfs上
hdfs dfs -put a.txt /
运行wordcount程序
cd /usr/local/hadoop/share/hadoop/mapreduce hadoop jar hadoop-mapreduce-examples-2.4.1.jar wordcount /a.txt /out
查看程序运行结果
这样就说明集群正常了。
通过浏览器訪问集群的服务
由于在启动hadoop0这个容器的时候把50070和8088映射到宿主机的相应port上了
adb9eba7142b crxy/centos-ssh-root-jdk-hadoop "/usr/sbin/sshd -D" About an hour ago Up About an hour 0.0.0.0:8088->8088/tcp, 0.0.0.0:50070->50070/tcp, 0.0.0.0:32770->22/tcp hadoop0
所以在这能够直接通过宿主机訪问容器中hadoop集群的服务
宿主机的ip为:192.168.1.144
http://192.168.1.144:50070/ http://192.168.1.144:8088/[/code]
三:集群节点重新启动
停止三个容器,在宿主机上运行以下命令docker stop hadoop0 docker stop hadoop1 docker stop hadoop2
容器停止之后,之前设置的固定ip也会消失,又一次再使用这几个容器的时候还须要又一次设置固定ip
先把之前停止的三个容器起来docker start hadoop0 docker start hadoop1 docker start hadoop2
在宿主机上运行以下命令又一次给容器设置固定ippipework br0 hadoop0 192.168.2.10/24 pipework br0 hadoop1 192.168.2.11/24 pipework br0 hadoop2 192.168.2.12/24
还须要又一次在容器中配置主机名和ip的映射关系,每次都手工写比較麻烦
写一个脚本。runhosts.sh#!/bin/bash echo 192.168.2.10 hadoop0 >> /etc/hosts echo 192.168.2.11 hadoop1 >> /etc/hosts echo 192.168.2.12 hadoop2 >> /etc/hosts
加入运行权限,chmod +x runhosts.sh
把这个脚本复制到全部节点。而且分别运行这个脚本scp runhosts.sh hadoop1:~ scp runhosts.sh hadoop2:~
运行脚本的命令./runhosts.sh
查看/etc/hosts文件里是否加入成功
注意:有一些docker版本号中不会在hosts文件里自己主动生成以下这些映射,所以我们才在这里手工给容器设置固定ip,并设置主机名和ip的映射关系。172.17.0.25 hadoop0 172.17.0.25 hadoop0.bridge 172.17.0.26 hadoop1 172.17.0.26 hadoop1.bridge 172.17.0.27 hadoop2 172.17.0.27 hadoop2.bridge
启动hadoop集群sbin/start-all.sh
**假设有什么问题,能够进群一起交流!群号:295505811
**
大数据技术博客
www.bigdata1024.com
相关文章推荐
- 使用docker搭建hadoop分布式集群
- 使用docker搭建hadoop分布式集群
- 使用docker搭建部署hadoop分布式集群
- 使用docker搭建hadoop分布式集群
- 使用Docker在本地搭建Hadoop分布式集群
- 使用docker搭建hadoop分布式集群
- 使用Docker在本地搭建Hadoop分布式集群
- 使用Docker在本地搭建Hadoop分布式集群
- 16 :使用docker搭建hadoop分布式集群
- 详解使用docker搭建hadoop分布式集群
- 使用Docker在本地搭建Hadoop分布式集群
- 使用Docker在本地搭建Hadoop分布式集群
- 使用Docker在本地搭建Hadoop分布式集群 的错误总结(持续更新)
- 基于虚拟linux+docker搭建hadoop完全分布式集群
- 基于docker的spark-hadoop分布式集群之一: 环境搭建
- 详解从 0 开始使用 Docker 快速搭建 Hadoop 集群环境
- hadoop学习第二天-了解HDFS的基本概念&&分布式集群的搭建&&HDFS基本命令的使用
- 使用Docker Swarm搭建分布式爬虫集群
- 使用Docker搭建hadoop集群