赞
踩
本文章主要介绍在macos的docker搭建hadoop集群的简单记录,没有对安装docker,下载hadoop安装包等做过多的介绍。如果感性兴趣可自行查阅相关文章(比较基础)。创建docker网桥本文也没有介绍,最好先了解一下网桥相关知识。
不想从头制作镜像的朋友可以使用我做好的镜像(hadoop3.2.1):docker pull registry.cn-hangzhou.aliyuncs.com/san-namespaces/san-registry:hadoop-3.2.1
有一个注意点mac下docker容器互通问题直接翻到最下面(正常mac下宿主机无法ping通容器)
docker run -h hadoop-master --name hadoop-master -p 8088:8088 -p 9870:9870 -p 9868:9868 -itd --privileged=true --net mynetwork --ip 192.168.0.4 4eba2c1559c7 /usr/sbin/init
docker run -h hadoop-slave1 --name hadoop-slave1 -itd --privileged=true --net mynetwork --ip 192.168.0.5 4eba2c1559c7 /usr/sbin/init
docker run -h hadoop-slave2 --name hadoop-slave2 -itd --privileged=true --net mynetwork --ip 192.168.0.6 4eba2c1559c7 /usr/sbin/init
同步每台机器的 hosts 文件(/etc/hosts)(根据机器自行修改配置)
192.168.0.4 hadoop-master
192.168.0.5 hadoop-slave1
192.168.0.6 hadoop-slave2
由于/etc/hosts文件在容器启动时被重写,直接修改内容在容器重启后不能保留,为了让容器在重启之后获取集群hosts,使用了一种启动容器后重写hosts的方法。
需要在~/.bashrc中追加以下指令
:>/etc/hosts
cat >>/etc/hosts<<EOF
127.0.0.1 localhost
192.168.0.4 hadoop-master
192.168.0.5 hadoop-slave1
192.168.0.6 hadoop-slave2
EOF
/etc/ssh/sshd_config文件中开启:
PubkeyAuthentication yes
2.重启ssh服务
systemctl restart sshd.service
ssh-keygen -t rsa
连续回车,最终会在/root/.ssh目录下生成id_rsa和 id_rsa.pub文件。上述操作每台机器执行一次(1 and 2)
登陆hadoop-master,在/root/.ssh目录下执行以下命令,将a0的公钥追加到authorized_keys文件中(如果authorized_keys不存在会新建):
cat id_rsa.pub>> authorized_keys
将hadoop-slave1的公钥加到hadoop-master中。
ssh root@192.168.0.5 cat ~/.ssh/id_rsa.pub>> authorized_keys
输入hadoop-slave1的密码即可拷贝公钥到hadoop-master的authorized_keys中。同上拷贝hadoop-slave2的公钥到hadoop-master中。
此时vim /root/.ssh/authorized_keys 如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UulfWjrN-1615012289765)(/Users/sanhongbo/Library/Application Support/typora-user-images/image-20210127152549905.png)]
将hadoop-master中的公钥发送至两台从节点。完成免密登陆配置。
在$HADOOP_HOME/etc/hadoop下包括hdfs-site.xml、core-site.xml、yarn-site.xml、mapred-site.xml、master、workers、hadoop-evn.xml。配置文件修改可参照官方文档按需要配置,也可以参照网上基本配置(注意:hadoop版本不同,服务端口有变化,2.X与3.X相同页面服务,端口不同。master、workers文件名称亦有变化。自行查找配置)
hadoop namenode -format
$HADOOP_HOME/sbin下有几个启动和停止的脚本如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7xPPnKjH-1615012289769)(/Users/sanhongbo/Library/Application Support/typora-user-images/image-20210306134456325.png)]
执行(执行报错参照faq):
./start-dfs.sh
启动完成后可访问页面 ip:9870
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DPH1CPzl-1615012289771)(/Users/sanhongbo/Library/Application Support/typora-user-images/image-20210306135839176.png)]
结束hadoop配置后,对namenode初始化完成后。执行start-dfs.sh时报错:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2by9jP9q-1615012289773)(/Users/sanhongbo/Library/Application Support/typora-user-images/image-20210130213427205.png)]
[root@hadoop-master sbin]# ./start-dfs.sh
WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.
Starting namenodes on [hadoop-master]
Last login: Wed Jan 27 07:01:13 UTC 2021 from 192.168.0.6 on pts/7
hadoop-master: Warning: Permanently added 'hadoop-master,192.168.0.4' (ECDSA) to the list of known hosts.
由于本次启动使用root用户启动,需要在start-dfs.sh、stop-dfs.sh中增加
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
启动成功。
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
mac下的宿主无法ping通docker容器原因在于docker在OSX的实现方式,是首先创建一个linux的虚拟机,在将docker放入到虚拟机中实现,而对于linux虚拟机,与OSX之间的通信,目前版本采用/var/run/docker.sock这种socket文件来通信,在OSX宿机中自然ping不通docker容器。
需安装Tunnelblick配置vpn,参照下面的帖子。
https://www.songma.com/news/txtlist_i62019v.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。