
本文主要介绍使用docker部署hadoop集群的详细教程,对大家来说非常详细。对你的学习或工作有一定参考价值的朋友可以参考一下。
最近公司搭建了一个hadoop测试集群,所以用docker快速部署hadoop集群。
0。写在前面
网上已经有很多教程了,但是漏洞很多。在这里,记录你的安装过程。
目标:使用docker构建一个一主两从的hadoop2.7.7集群。
准备:
首先我需要一台8G以上内存的centos7机器。我用的是阿里云主机。
其次,上传jdk和hadoop包到服务器。
我装了hadoop2.7.7.包包给大家准备好了,链接:https://pan.baidu.com/s/15n_W-1rqOd2cUzhfvbkH4g抽取代码:vmzw。
1。步骤
大致分为以下几个步骤:
1.1安装docker
按照以下步骤安装docker。如果你有docker环境,可以跳过。
yumupdate yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2 yum-config-manager--add-repohttp://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yuminstall-ydocker-ce systemctlstartdocker docker-v1.2基础环境准备
1.2.1创建基本的centos7映像,并拉出正式的centos7映像。
dockerpullcentos通过构建Dockfile用ssh函数生成centos图像
创建Dockerfile文件
viDockerfile将以下内容写入Dockerfile
FROMcentos MAINTAINERmwf RUNyuminstall-yopenssh-serversudo RUNsed-i's/UsePAMyes/UsePAMno/g'/etc/ssh/sshd_config RUNyuminstall-yopenssh-clients RUNecho"root:qwe123"|chpasswd RUNecho"rootALL=(ALL)ALL">>/etc/sudoers RUNssh-keygen-tdsa-f/etc/ssh/ssh_host_dsa_key RUNssh-keygen-trsa-f/etc/ssh/ssh_host_rsa_key RUNmkdir/var/run/sshd EXPOSE22 CMD["/usr/sbin/sshd","-D"]以上内容大致意思是:基于centos镜像,设置密码为wqe123,安装ssh服务并启动。
构建Dockerfile文件
dockerbuild-t="centos7-ssh".将生成一个名为centos7-ssh的图像,可以通过dockerimages查看。
1.2.2生成hadoop和jdk环境的映像。
刚刚创建了一个docker文件,所以先移动它。mvDockerfileDockerfile.bak
创建Dockerfile文件
viDockerfile将以下内容写入:
FROMcentos7-ssh ADDjdk-8u202-linux-x64.tar.gz/usr/local/ RUNmv/usr/local/jdk1.8.0_202/usr/local/jdk1.8 ENVJAVA_HOME/usr/local/jdk1.8 ENVPATH$JAVA_HOME/bin:$PATH ADDhadoop-2.7.7.tar.gz/usr/local RUNmv/usr/local/hadoop-2.7.7/usr/local/hadoop ENVHADOOP_HOME/usr/local/hadoop ENVPATH$HADOOP_HOME/bin:$PATH RUNyuminstall-ywhichsudo上面的内容大概意思是:基于上面生成的centos7-ssh,把hadoop和jdk包放进去,然后匹配环境变量。
构建Dockerfile文件
dockerbuild-t="hadoop".将生成一个名为hadoop的镜像。
1.3配置网络,启动docker容器。
因为集群必须连接到网络,所以必须首先配置网络。
创建一个网络
dockernetworkcreate--driverbridgehadoop-br上面的命令创建了一个名为hadoop-br的桥接类型网络。
启动docker时指定网络
dockerrun-itd--networkhadoop-br--namehadoop1-p50070:50070-p8088:8088hadoop dockerrun-itd--networkhadoop-br--namehadoop2hadoop dockerrun-itd--networkhadoop-br--namehadoop3hadoop上面的命令启动了三台机器,网络都指定为hadoop-br,hadoop1也开启了端口映射。
检查网络情况。
dockernetworkinspecthadoop-br执行以上命令查看相应的网络信息:
[ { "Name":"hadoop-br", "Id":"88b7839f412a140462b87a353769e8091e92b5451c47b5c6e7b44a1879bc7c9a", "Containers":{ "86e52eb15351114d45fdad4462cc2050c05202554849bedb8702822945268631":{ "Name":"hadoop1", "IPv4Address":"172.18.0.2/16", "IPv6Address":"" }, "9baa1ff183f557f180da2b7af8366759a0d70834f43d6b60fba2e64f340e0558":{ "Name":"hadoop2", "IPv4Address":"172.18.0.3/16", "IPv6Address":"" },"e18a3166e965a81d28b4fe5168d1f0c3df1cb9f7e0cbe0673864779b224c8a7f":{ "Name":"hadoop3", "IPv4Address":"172.18.0.4/16", "IPv6Address":"" } }, } ]我们可以知道3台机器的ip:
172.18.0.2hadoop1 172.18.0.3hadoop2 172.18.0.4hadoop3登录docker容器,就可以ping通对方了。
dockerexec-ithadoop1bash dockerexec-ithadoop2bash dockerexec-ithadoop3bash1.4配置主机和ssh免密登录
配置主机
修改每台机器中每台机器的主机。
vi/etc/hosts将以下内容写入(注:docker划分的ip可能每个人都不一样,自己填写):
172.18.0.2hadoop1 172.18.0.3hadoop2 172.18.0.4hadoop31.4.2ssh免密登录
因为ssh服务已经安装在上图中,所以直接在每台机器上执行以下命令:
ssh-keygen 一路回车 ssh-copy-id-i/root/.ssh/id_rsa-p22root@hadoop1 输入密码,如果按我的来得话就是qwe123 ssh-copy-id-i/root/.ssh/id_rsa-p22root@hadoop2 输入密码,如果按我的来得话就是qwe123 ssh-copy-id-i/root/.ssh/id_rsa-p22root@hadoop3 输入密码,如果按我的来得话就是qwe1231.4.3测试配置是否成功。
pinghadoop1 pinghadoop2 pinghadoop3 sshhadoop1 sshhadoop2 sshhadoop31.5安装和配置hadoop
1.5.1在hadoop1上运行
进入hadoop1
dockerexec-ithadoop1bash创建一些文件夹,稍后将在配置中使用。
mkdir/home/hadoop mkdir/home/hadoop/tmp/home/hadoop/hdfs_name/home/hadoop/hdfs_data切换到hadoop配置的目录。
cd$HADOOP_HOME/etc/hadoop/编辑核心网站.xml
<property> <name>fs.defaultFS</name> <value>hdfs://hadoop1:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/hadoop/tmp</value> </property> <property> <name>io.file.buffer.size</name> <value>131702</value> </property>编辑hdfs-site.xml
<property> <name>dfs.namenode.name.dir</name> <value>file:/home/hadoop/hdfs_name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/hadoop/hdfs_data</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop1:9001</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property>编辑mapred-site.xml
默认情况下,Mapred-site.xml不存在。执行cpmapred-site.XML.templatemapred-site.XML。
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop1:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop1:19888</value> </property>编辑yarn-site.xml
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>hadoop1:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>hadoop1:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>hadoop1:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>hadoop1:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>hadoop1:8088</value> </property>编辑从属
在这里,我将hadoop1视为主节点,将hadoop2和Hadoop3视为从节点。
hadoop2 hadoop3将文件复制到hadoop2和hadoop3
依次执行以下命令:
scp-r$HADOOP_HOME/hadoop2:/usr/local/ scp-r$HADOOP_HOME/hadoop3:/usr/local/ scp-r/home/hadoophadoop2:/ scp-r/home/hadoophadoop3:/1.5.2每台机器的 *** 作
分别连接每台机器。
dockerexec-ithadoop1bash dockerexec-ithadoop2bash dockerexec-ithadoop3bash配置hadoopsbin目录的环境变量
hadoopbin目录是之前创建镜像时配置的,而sbin目录不是,所以要单独配置。为每台机器分配配置:
vi~/.bashrc增加以下内容:
exportPATH=$PATH:$HADOOP_HOME/sbin执行:
source~/.bashrc1.5.3启动hadoop
在hadoop1上执行以下命令:
格式化hdfs
hdfsnamenode-format一键启动
start-all.sh如果你没有犯错,你可以庆祝。如果出了问题,加油。
1.6使用hadoopjps进行测试
#hadoop1 1748Jps 490NameNode 846ResourceManager 686SecondaryNameNode #hadoop2 400DataNode 721Jps 509NodeManager #hadoop3 425NodeManager 316DataNode 591Jps上传文件
hdfsdfs-mkdir/mwf echohello>a.txt hdfsdfs-puta.txt/mwf hdfsdfs-ls/mwf Found1items drwxr-xr-x-rootsupergroup02020-09-0411:14/mwf因为是云服务器,不想匹配端口,所以不看ui界面。
2。最后
以上是我安装成功后总结的流程。不应该有问题或遗漏。
3。参考
https://cloud.tencent.com/developer/article/1084166
来自=10680的https://cloud.tencent.com/developer/article/1084157?
https://blog.csdn.net/ifenggege/article/details/108396249
关于用docker部署hadoop集群的详细教程,本文到此结束。有关使用docker部署hadoop集群的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)