设为首页 收藏本站
查看: 1558|回复: 0

[经验分享] 基于虚拟linux+docker搭建hadoop完全分布式集群

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-10-13 12:20:38 | 显示全部楼层 |阅读模式
  本文假设用户基本了解docker,掌握linux的基本使用命令,了解hadoop的常规安装及简单配置
  实验环境:windows10+Vmware
WorkStation 11+Linux.14.04 server+docker 1.7
  windows 10作为实体机操作系统,网段为:10.41.0.0/24,虚拟机使用NAT网络,子网为192.168.92.0/24,网关为192.168.92.2,linux
14.04为虚拟系统,充当容器的宿主机,IP为192.168.92.129。本文将基于以上环境在linux系统中搭建一个hadoop完全分布式集群,节点组成为master+slave1+slave2
  一、虚拟系统安装
  windows10上安装vmware
workstation,并创建一个linux虚拟机,根据机器的性能分配磁盘空间、CPU和内存,网络类型为NAT(根据实际网络环境选择,此处网络上教程丰富,不再赘述),安装linux时选择安装类型为SSH服务器。

  安装完Linux虚拟系统后,在vmware workstation的网络编辑器中可看到虚拟机分配的子网为192.168.92.0/24@192.168.92.2,在虚拟机终端执行ifconfig可看到linux自动获取到的IP为192.168.92.129编辑/etc/network/interfaces文件,配置静态IP地址:


   DSC0000.jpg
  执行命令使网络配置生效:
  

sudo /etc/init.d/networking restart #有时候该命令没什么效果,重启一下吧
  

使用linux远程管理工具(如xshell、putty)登录linux系统  
  


  二、安装docker
  参考该链接安装docker: http://dockerpool.com/static/books/docker_practice/install/ubuntu.html
  

三、获取镜像

  从docker仓库下载ubuntu14.04的镜像(文件不大,不到200MB)
  

sudo docker pull ubuntu:14.04 #下载镜像
sudo docker images #查看本地仓库中的镜像
  

DSC0001.jpg

最下面的14.04是下载的镜像,其他均为在此镜像基础上commit得到的新镜像
  
  


  四、定制容器
  执行如下命令创建并启动一个容器:
  

sudo docker run -ti ubuntu:14.04
  

此时会切换到容器的临时终端,默认直接进入root用户环境,接着做如下工作:  
  1、修改安装源,因为docker pull得到的镜像使用的是国外的安装源,在使用该安装源下执行apt-get install 操作时下载阶段会特别慢甚至下载不成功,建议替换成国内的源,如cn99、网易等,也可参考宿主机的源配置(它访问的是ubuntu部署在国内的服务器),找到新源后替换 /etc/apt/sources.list 文件即可。
  2、安装ssh
  

sudo apt-get update
sudo apt-get install openssh-server
  

3、配置ssh免密登录  
  在用户目录下创建.ssh文件夹,执行命令:
  

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
  
  接着修改ssh的配置文件(/etc/ssh/sshd_config),将PermitRootLogin without-password 改成PermitRootLogin yes,之后修改root密码。
  如果不想允许root直接登录,则需要自己创建一个用户,所有操作都在该用户环境下进行。

4、下载安装JDK
  

sudo apt-get install oracle-java8-installer #也可使用wget直接从oracle官网下载
  

下载后配置JDK环境变量,执行java、javac命令进行测试。  
  5、配置hosts
  按照上文实验环境的描述,hadoop集群由一个master节点和两个slave节点组成,需要在hosts文件中添加IP到主机名的映射,执行ifconfig命令可以看到docker给容器分配的eth0网卡的IP为172.17.0.x网段(不同的环境该私有IP段可能不同),且重启容器后该IP会变动,而hadoop集群最好配置静态的地址,在后续步骤中,将会用到一个工具给容器虚拟一个新的网卡,同时分配一个固定的地址,该地址和docker服务在宿主机中创建的网桥docker0的地址为同一网段。


  重新开启一个远程管理终端程序登录linux宿主机,执行ifconfig命令可以到docker0网桥的IP(本文的实验环境为172.17.42.1),且每次重启系统,该IP均不变化,因而可以在该网段给容器分配IP,这里做如下分配:
  

172.17.42.2 master
172.17.42.3 slave1
172.17.42.4 slave2
  

需要注意的是,容器在启动后会初始化hosts文件,且会自行添加一条eth0网卡地址到主机名的映射,这会导致hadoop集群启动后监听的网卡为eth0,所以需要重新生成该文件,这里提供一个简单的脚本做这项工作:  

#!/bin/bash
echo "#ip and hostname information" > /etc/hosts
echo "127.0.0.1 localhost" >> /etc/hosts
echo "172.17.42.2 master" >> /etc/hosts
echo "172.17.42.3 slave1" >> /etc/hosts
echo "172.17.42.4 slave2" >> /etc/hosts
  

将脚本添加到开机启动即可。

  
  6、下载配置hadoop
  使用wget下载hadoop2.6(可根据实际情况选择想要安装的版本):
  

wget http://mirrors.sonic.net/apache/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz
  

将压缩包解压到某个目录,然后编辑hadoop-2.6.0/etc/hadoop目录下的配置文件,修改相应配置。  
  


  五、保存镜像
  执行exit命令退出容器终端,然后执行命令保存对容器的更改到一个新的镜像:
  

sudo docker commit -m &quot;description information about the images&quot; <容器ID> ubuntu:hadoop
  

六、创建并启动新容器  
  执行命令创建并启动新的hadoop集群容器:
  

sudo docker run -d -h master --name=hadoop_master ubuntu:hadoop /usr/sbin/sshd -D #启动hadoop主节点
sudo docker run -d -h slave1 --name=hadoop_slave1 ubuntu:hadoop /usr/sbin/sshd -D #启动hadoop从节点
sudo docker run -d -h slave2 --name=hadoop_slave2 ubuntu:hadoop /usr/sbin/sshd -D #启动hadoop从节点
sudo docker ps -a #查看所有创建的容器
  
   DSC0002.jpg


  


  七、安装pipework工具并创建虚拟网卡

1、从gitub上下载一个名叫pipework的工具,地址为:https://github.com/jpetazzo/pipework  该工具主要是给容器虚拟一张新的网卡,给网卡配置静态地址,同时把新网卡和docker在宿主机中创建的网桥桥接起来,使得容器和宿主机能通过该网卡互通。
  下载并解压该工具,然后拷贝解压目录下的pipework文件至/usr/local/bin目录,至此,工具安装完毕。
  2、创建虚拟网卡
  执行如下命令给三个容器创建指定地址的虚拟网卡:
  

sudo pipework docker0 hadoop_master 172.17.42.2/24@172.17.42.1
sudo pipework docker0 hadoop_slave1 172.17.42.3/24@172.17.42.1
sudo pipework docker0 hadoop_slave2 172.17.42.4/24@172.17.42.1
  

该命令参数为:<网桥名称> <容器名称> <新网卡地址/网络号@网关地址>,网关就是网桥的地址,默认创建的网卡名称为eth1,可通过<-i name>参数指定网卡名称。执行该命令时可能会有警告信息,目前没发现有什么影响。  


  八、访问测试
  在宿主机中ping容器的新网卡地址,发现三个节点均测试通过,在宿主机中使用ssh命令也可正确登录容器。
   DSC0003.jpg


  


  九、启动hadoop集群
  登录容器的master节点后,执行命令&#26684;式化namenode节点,然后启动集群:
  

bin/hadoop namenode -format
sbin/start-dfs.sh && sbin/start-yarn.sh
  

结果如下:  
   DSC0004.jpg




  至此,已经可以从宿主机访问容器了,但是宿主机是没有桌面环境,只能通过实体机在浏览器中访问集群提供的web UI,但现在实体机无法ping通容器地址,也无法访问容器,原因在于,宿主机是实体机的子网,容器是宿主机的子网,而实体机不知道容器所在子网的存在,所以需要在实体机中添加一条从实体机到容器子网的路由。
  用管理员模式运行cmd,执行如下命令:
  

route add -p 172.17.42.0 mask 255.255.255.0 192.168.92.129
  

三个地址分别为:<目的子网地址> <掩码地址> <网关/宿主机地址>,之后,在实体机中可以正常ping通容器,web控制台也能正常打开了。

  
   DSC0005.jpg


  说明:docker容器每次重启后,pipework工具创建的虚拟网卡会消失,需要重新分配,可写个脚本管理之。

版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-126269-1-1.html 上篇帖子: 在Centos 7中使用 Docker搭建MySQL异地双向复制环境 下篇帖子: 用shipyard来管理docker
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表