问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在docker中部署hadoop2.4集群

发布网友 发布时间:2022-04-20 11:52

我来回答

2个回答

热心网友 时间:2022-04-11 01:26

Docker提供了一种完美隔离和打包Hadoop相关的应用程序的方法。该公司也在观察Slider框架和Docker如何能够一起合作来简化此类的部署工作。目前,Hortonworks的一个客户已经在考虑他们自己的数据平台利用HDP支持Docker的方法。他们利用Cloudbreak在云中的Docker容器中部署Hadoop,并计划把他们自己的数据应用程序制作成Docker镜像以便在YARN上运行。此外,很多用户也因为这种方式的敏捷性和兼容性,利用其进行未知环境的部署。

热心网友 时间:2022-04-11 02:44

使用Docker搭建部署Hadoop分布式集群
在网上找了很长时间都没有找到使用docker搭建hadoop分布式集群的文档,没办法,只能自己写一个了。
一:环境准备:
1:首先要有一个Centos7操作系统,可以在虚拟机中安装。
2:在centos7中安装docker,docker的版本为1.8.2
安装步骤如下:
<1>安装制定版本的dockeryum install -y docker-1.8.2-10.el7.centos
<2>安装的时候可能会报错,需要删除这个依赖

rpm -e lvm2-7:2.02.105-14.el7.x86_6411

启动docker
service docker start11

验证安装结果:

<3>启动之后执行docker info会看到下面有两行警告信息

需要关闭防火墙并重启系统
systemctl stop firewalld
systemctl disable firewalld
注意:执行完上面的命令之后需要重启系统
reboot -h(重启系统)12341234

<4>运行容器可能会报错

需要关闭selinux
解决方法:
1:setenforce 0(立刻生效,不需要重启操作系统)
2:修改/etc/selinux/config文件中的SELINUX=disabled ,然后重启系统生效
建议两个步骤都执行,这样可以确保系统重启之后selinux也是关闭状态123123

3:需要先构建一个hadoop的基础镜像,使用dockerfile文件方式进行构建。
先构建一个具备ssh功能的镜像,方便后期使用。(但是这样对于容器的安全性会有影响)
注意:这个镜像中的root用户的密码是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,密码root,并且将此用户添加到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服务并且暴露22端口
RUN mkdir /var/run/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]12345678910111213141516171819202122231234567891011121314151617181920212223

构建命令:
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:$PATH1234512345

构建命令:
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:$PATH1234512345

构建命令:
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中对外开放端口50070 和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-hadoop1234512345

使用docker ps 查看刚才启动的是三个容器

3:给这三台容器设置固定IP
1:下载pipework

2:把下载的zip包上传到宿主机服务器上,解压,改名字
unzip pipework-master.zip
mv pipework-master pipework
cp -rp pipework/pipework /usr/local/bin/ 123123

3:安装bridge-utils
yum -y install bridge-utils11

4:创建网络
brctl addbr br0
ip link set dev br0 up
ip addr add 192.168.2.1/24 dev br0123123

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/24123123

验证一下,分别ping三个ip,能ping通就说明没问题

4:配置hadoop集群
先连接到hadoop0上,
使用命令
docker exec -it hadoop0 /bin/bash11

下面的步骤就是hadoop集群的配置过程
1:设置主机名与ip的映射,修改三台容器:vi /etc/hosts
添加下面配置
192.168.2.10 hadoop0
192.168.2.11 hadoop1
192.168.2.12 hadoop2123123

2:设置ssh免密码登录
在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 hadoop212345678910111213141516171819201234567891011121314151617181920

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.711

(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>12345678910111213141234567891011121314

(3)hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>1234567891012345678910

(4)yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>maprece_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
</configuration>1234567891012345678910

(5)修改文件名:mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<configuration>
<property>
<name>maprece.framework.name</name>
<value>yarn</value>
</property>
</configuration>123456123456

(6)格式化
进入到/usr/local/hadoop目录下
1、执行格式化命令
bin/hdfs namenode -format
注意:在执行的时候会报错,是因为缺少which命令,安装即可

执行下面命令安装
yum install -y which1234512345

看到下面命令说明格式化成功。

格式化操作不能重复执行。如果一定要重复格式化,带参数-force即可。
(7)启动伪分布hadoop
命令:sbin/start-all.sh11

第一次启动的过程中需要输入yes确认一下。

使用jps,检查进程是否正常启动?能看到下面几个进程表示伪分布启动成功
[root@hadoop0 hadoop]# jps
3267 SecondaryNameNode
3003 NameNode
3664 Jps
3397 ResourceManager
3090 DataNode
3487 NodeManager12345671234567

(8)停止伪分布hadoop
命令:sbin/stop-all.sh11

(9)指定nodemanager的地址,修改文件yarn-site.xml
<property>
<description>The hostname of the RM.</description>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop0</value>
</property>1234512345

(10)修改hadoop0中hadoop的一个配置文件etc/hadoop/slaves
删除原来的所有内容,修改为如下
hadoop1
hadoop21212

(11)在hadoop0中执行命令
scp -rq /usr/local/hadoop hadoop1:/usr/local
scp -rq /usr/local/hadoop hadoop2:/usr/local1212

(12)启动hadoop分布式集群服务
执行sbin/start-all.sh11

注意:在执行的时候会报错,是因为两个从节点缺少which命令,安装即可
分别在两个从节点执行下面命令安装
yum install -y which11

再启动集群(如果集群已启动,需要先停止)
sbin/start-all.sh11

(13)验证集群是否正常
首先查看进程:
Hadoop0上需要有这几个进程
[root@hadoop0 hadoop]# jps
4643 Jps
4073 NameNode
4216 SecondaryNameNode
4381 ResourceManager1234512345

Hadoop1上需要有这几个进程
[root@hadoop1 hadoop]# jps
715 NodeManager
849 Jps
645 DataNode12341234

Hadoop2上需要有这几个进程
[root@hadoop2 hadoop]# jps
456 NodeManager
589 Jps
388 DataNode12341234

使用程序验证集群服务
创建一个本地文件
vi a.txt
hello you
hello me123123

上传a.txt到hdfs上
hdfs dfs -put a.txt /11

执行wordcount程序
cd /usr/local/hadoop/share/hadoop/maprece
hadoop jar hadoop-maprece-examples-2.4.1.jar wordcount /a.txt /out1212

查看程序执行结果

这样就说明集群正常了。
通过浏览器访问集群的服务
由于在启动hadoop0这个容器的时候把50070和8088映射到宿主机的对应端口上了
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 hadoop011

所以在这可以直接通过宿主机访问容器中hadoop集群的服务
宿主机的ip为:192.168.1.144
192.168.1.144:50070/
192.168.1.144:8088/1212

三:集群节点重启
停止三个容器,在宿主机上执行下面命令
docker stop hadoop0
docker stop hadoop1
docker stop hadoop2123123

容器停止之后,之前设置的固定ip也会消失,重新再使用这几个容器的时候还需要重新设置固定ip
先把之前停止的三个容器起来
docker start hadoop0
docker start hadoop1
docker start hadoop2123123

在宿主机上执行下面命令重新给容器设置固定ip
pipework br0 hadoop0 192.168.2.10/24
pipework br0 hadoop1 192.168.2.11/24
pipework br0 hadoop2 192.168.2.12/24123123

还需要重新在容器中配置主机名和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/hosts12341234

添加执行权限,chmod +x runhosts.sh
把这个脚本拷贝到所有节点,并且分别执行这个脚本
scp runhosts.sh hadoop1:~
scp runhosts.sh hadoop2:~1212

执行脚本的命令 ./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.bridge123456123456

启动hadoop集群
sbin/start-all.sh
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2011年河南农业大学华豫学院是否会降20分 我是河南艺术生,专业考了198文化课考了276,能上河南农业大学华豫学院么... 河南的商丘学院是河南农业大学的分校吗?是否属于农林院校?有第一志愿报... 08年报考河南农业大学华豫学院是否加分 河南农业大学华豫学院 独立院校07年转录取分数线 河南农业大学华豫学院是否加分投档 河南农业大学华豫学院是否也属于农林类加分的学校? 求解第4题,详细过程 河南农业大学三本河南农业大学华豫学院的最低补录取分数是多少_百度知 ... 求解第四题和第五题 主机怎么访问虚拟机的 hadoop 端口 win7环境下hadoop远程主机强迫关闭了一个现有的连... 我在Hadoop集群中起集群起不来,看日志说50070端口... hadoop2.4.1怎样删除搭建 Hadoop集群可以运行的3个模式分别是什么,有哪些注... hadoop文件系统的设置 用hadoop fs -ls命令出现错误 谁知道这个是什么原因, hadoop java api在写入文... hadoop集群,如果不设置关闭防火墙的话,那么应该... hadoop集群部署出错,求帮助 hadoop集群为什么要关闭防火墙 hadoop伪分布搭建为什么要关闭防火墙 如何煮饭 怎样煮饭才好吃。。。 煮饭是什么意思 怎样煮饭?? 煮饭怎么才能煮好? 怎么煮饭步骤 煮饭怎么煮啊 怎么煮饭、煮饭的详细步骤 做饭,和煮饭的意思是一样吗? 哪位大神知道从安装hadoop2.7.1到配置文件的所有正... 求教搭建hadoop集群,在配置ssh时遇到的一个问题,... hadoop怎么获取connection Hadoop虚拟机crt老是连接不上 dfszkfailovercontroller 是什么进程 hadoop name node 无法离开安全模式 电脑里的数据丢失要怎么恢复? 如何将电脑丢失的文件找回 电脑里的文件没有删除但不见了要怎么找回 如何恢复文件夹的文件 怎么找回电脑丢失的文件 怎么找回计算机删除的文件 电脑中丢失文件怎么找回?把电脑丢失的文件找回 怎么注册成为拼多多卖家?现在环境不太好,想学着开店,搞搞副业 韩剧《故乡》有哪些细思极恐的细节? 如何评价韩剧《故乡》? 韩剧《传说的故乡》的最后一集“还乡女”请告诉我结局。 《故乡》的情节的开端、发展、高潮、结局是各什么? 故乡韩剧剧情介绍 请问大佬有故乡1972年上映的由 井川比佐志主演的百...