hadoop之docker伪分布式部署

来源:互联网 发布:win7办公软件下载 编辑:程序博客网 时间:2024/05/22 04:39

配置环境: macbook、两台ubuntu 16.04 server虚拟机,用VMware Fusion创建的,虚拟机网络适配器模式是NAT模式(注意此处一定要是NAT模式)

第一步:搭建虚拟网桥br0,br1

这步可以按照网上的一些通用做法来做,没什么特别的,如这篇文章 http://blog.csdn.net/canot/article/details/52895897

不过我要说下为什么要用虚拟网桥,在知道这个东西前,我也尝试了很多方法让不同虚拟机之间的docker互相访问,刚开始想用端口映射,把虚拟机的22端口映射到docker,这样虽然解决了ssh的问题,但是一旦有实际程序跑起来,需要其他端口,就不行了,遂放弃;后面又想用--net host模式,但是这样搞得虚拟机和docker分不清哪个用哪个,于是也放弃了。后面看到虚拟网桥的方法,感觉可行,它的原理就是把一台虚拟机的eth0网卡作为虚拟网桥br0的一个端口,这台虚拟机的docker里也把eth0作为虚拟网桥br0的端口,这样单台虚拟机和它的docker就能互相访问;同样在另一台虚拟机配置虚拟网桥br1,由于NAT模式的存在(不是很确信),br0和br1也可以互相访问,于是全部打通了。

第二步:下载镜像

docker pull daocloud.io/shenaishiren/hadoop-run

这个镜像是我基于 kiwenlau/hadoop:1.0这个镜像,加了bridge-utils和vim之后构建的镜像,pull下来之后在一台虚拟机(作为master)上运行如下命令

docker run -itd --name hadoop-master --hostname hadoop-master -p 50070:50070 -p 8088:8088 daocloud.io/shenaishiren/hadoop-run &> /dev/null

(如果docker ps发现没运行起来,你可能要运行docker rm -f hadoop-master删掉以前的容器了)

另一台运行

docker run -itd --name hadoop-slave1 --hostname hadoop-slave1 daocloud.io/shenaishiren/hadoop-run &> /dev/null
然后运行下面的命令进入hadoop-master

docker exec -it hadoop-master bash
接着运行(192.168.1.64是hadoop-slave1的ip地址)

echo "192.168.1.64 hadoop-slave1" >> /etc/hosts
在容器hadoop-slave1上同样(192.168.1.128是hadoop-master的ip地址)

echo "192.168.1.128 hadoop-master" >> /etc/hosts
然后在hadoop-master容器里先运行./start-hadoop.sh,再运行./run-wordcount.sh就行了

最后再说一下遇到的坑和解决办法

遇到问题第一件事就是关掉hadoop

/usr/local/hadoop/sbin/stop-dfs.sh && /usr/local/hadoop/sbin/stop-yarn.sh

然后第一个问题就是“there is no datanode(0)啥的”,遇到这个问题,首先要去从节点用jps看看DataNode有没有在运行,像我遇到这个问题是因为我多次格式化namenode,造成namenode的clusterID和datanode的clusterID不一样,导致DataNode开启失败,具体解决办法看链接http://jingyan.baidu.com/article/3c343ff7e75e9e0d36796347.html

第二个问题就是9000端口访问拒绝,解决办法是记得开启前格式化namenode,而且你的dfs.datanode.data.dir对应的文件夹下的current文件夹必须存在

hadoop namenode -format

然后正常运行上面提到了的start-hadoop.sh和run-wordcount.sh

解决了所有问题,终于迎来了胜利的曙光,成功运行字符统计!

(N台分布式的配置同上)










0 0
原创粉丝点击