pond2539 发表于 2018-5-27 12:14:40

通过docker部署hadoop集群

  初学者,利用docker部署hadoop集群。
  

  根据他人的思路自己操作了一遍。
  原作者文章地址:
  http://blog.csdn.net/xu470438000/article/details/50512442
  作者将镜像分了好几个层次,这里可以只做成一个镜像系统。
  

  系统是centos7。hadoop版本2.6.0。
  *********************************************************

  先创建一个基础镜像。
  一、安装docker,通过yum直接装默认版
  yum -y install docker
  

  二、启动docker服务
  service docker start
  

  三、关闭防火墙,重启系统,启动镜像
  systemctl stop firewalld.service
  systemctl disable firewalld.service
  重启虚拟机reboot -h
  开启镜像:
  docker run -it centos /bin/bash
  可以正常进入,就说明镜像没有问题。
  ********************************************************
  四、再创建一个具有ssh的镜像,使用dockerfile的方式。
  在宿主机上(不是容器里)
  mkdir centos-ssh
  cd centos-ssh
  vi dockerfile    将如下内容编辑进去。
      #选择一个已有的镜像
      from docker.io/centos
      #安装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
      #安装poenssh-clients
      run yum install -y openssh-clients
      #添加用户root,密码是123456,将用户添加到sudoers中
      run echo "root:123456" | chpasswd
      run echo "rootALL=(ALL)ALL" >> /etc/sudoers
      # 下面这两句比较特殊,在centos6上必须要有,否则创建出来的容器sshd不能登录
      # 我的是centos7,但是也添加了这句。
      run ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
      run ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
      #启动ssh,并且设置端口为22
      run mkdir /var/run/sshd
      expose 22
      CMD ["/usr/sbin/sshd", "-D"]
  保存退出。创建镜像。
  docker build -t="centos-ssh" .
  名字自己起。要注意后面的那个点,由此才能执行到dockerfile。
  docker images一下,可以看到镜像构建成功。
  *****************************************************
  五、再构建带有jdk的镜像
  在宿主机上,同样通过dockerfile的方式,步骤也一样,很容易记住。
  mkdir centos-ssh-jdk
  cd centos-ssh-jdk
  vi dockerfile
      from crxy/centos-ssh-root
      add jdk-8u11-linux-x64.tar.gz /usr/local/
      run mv /usr/local/jdk1.8.0_11 /usr/local/jdk1.8
      env JAVA_HOME /usr/local/jdk1.8
      env PATH $JAVA_HOME/bin:$PATH
  保存退出。创建镜像。
  docker build -t"centos-ssh-jdk" .
  查看下镜像中是否创建成功。
  ******************************************************
  六、再构建一个带hadoop的镜像。
  mkdir centos-ssh-jdk-hadoop
  cd centos-ssh-jdk-hadoop
      vi dockerfile
      vim dockerfile
      from crxy/centos-ssh-root-jdk
      add hadoop-2.6.0-cdh5.5.2.tar.gz /usr/local/
      run mv /usr/local/hadoop-2.6.0-cdh5.5.2 /usr/local/hadoop
      env HADOOP_HOME /usr/local/hadoo
      env PATH $HADOOP_HOME/bin:$PATH
保存退出。创建镜像。
docker build -t"centos-ssh-jdk-hadoop" .
查看下镜像中是否创建成功。
  **************************************************************
  七、最后,构建hadoop集群(容器没做持久化,并重启了的话,需要重新在此步开始)
  基于hadoop镜像,开启三个容器,也就是三个节点了,这里一主二从。
  hadoop0,hadoop1,hadoop2
  # docker run --name hadoop0 --hostname hadoop0 -d -P -p 50070:50070 centos-ssh-jdk-hadoop
  # docker run --name hadoop1 --hostname hadoop1 -d -P centos-ssh-jdk-hadoop
  # docker run --name hadoop2 --hostname hadoop2 -d -P centos-ssh-jdk-hadoop
  

  八、利用pipework给容器设置固定的IP地址。
  自己百度一个pipework工具。当时的下载链接忘了,把这个传到51CTO了。
  http://down.51cto.com/data/2328511
  将工具传到宿主机上,
  # unzip pipework-master.zip
  # mv pipework-master pipework
  将pipework命令复制一份到/usr/local/bin/这个目录下
  # cp pipework /usr/local/bin/
  

  九、安装bridge-utils
  yum -y install bridge-utils
  十、创建网络
  这里需要建立一个逻辑网段(网桥),用来连接网络。
  brctl addbr br0
  修改br0的属性状态为开启
  ip link set dev br0 up
  设置宿主机:192.168.44.1\24 这表示一个网段。网络地址 192.168.1.0 、广播地址192.168.1.255可用地址 192.168.1.1--254
  ip addr add 192.168.44.130/24 dev br0
  至此,宿主机的IP地址就是192.168.44.130
  十一、给三个容器(节点)分配IP地址
  # pipework br0 hadoop0 192.168.44.10/24
  # pipework br0 hadoop1 192.168.44.11/24
  # pipework br0 hadoop2 192.168.44.12/24
  相互ping通的话,说明集群没问题。
  但是,无法连接外网。这个配置了好久,都没能连上外网。。。哎。前期还是可以连上的呢。配置完就不能了。
  十二、给三个节点(容器)做ssh
  先进入主节点:在hadoop1和hadoop2中,做同样的操作。
  先做IP与主机名的映射
  docker ecec -it hadoop0 /bin/bash
  vi /etc/hosts
  192.168.44.130    qpf00
  192.168.44.10   hadoop0
  192.168.44.11   hadoop1
  192.168.44.12   hadoop2
  创建秘钥
  # mkdir .ssh
  # cd .ssh
  # ssh-keygen -t rsa(一直按回车即可)
  # ssh-copy-id -i qpf00(这个是宿主机主机名,记住输入yes)
  # ssh-copy-id -i hadoop0(配置三个从节点的秘钥)
  # ssh-copy-id -i hadoop1
  # ssh-copy-id -i hadoop2
  在hadoop1和hadoop2中,做同样的操作。
  十三、配置hadoop集群
  进入hadoop0,即主节点上.
  配置core-site.xml/yarn-site.xml/mapred.xml/hdfs-site.xml/hadoop-env.sh
  1,vi core-site.xml
  <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>
  2,vi yarn-site.xml
  <property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
  </property>
  <property>
  <name>yarn.log-aggregation-enable</name>
  <value>true</value>
  </property>
  <property>
  <description>The hostname of the RM.</description>
  <name>yarn.resourcemanager.hostname</name>
  <value>hadoop0</value>
  </property>
  3,先mv mapred-site.xml.template mapred-site.xml,再vi mapred-site.xml
  <property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
  </property>
  4,vi dhfs-site.xml
  <property>
  <name>dfs.replication</name>
  <value>1</value>
  </property>
  <property>
  <name>dfs.permissions</name>
  <value>false</value>
  </property>
  5,vi hadoop-env.sh
  export JAVA_HOME=/usr/local/jdk1.8
  6,vi slaves
  hadoop1
  hadoop2
  7,在hadoop0中执行命令:将hadoop拷贝给从节点
  scp-rq /usr/local/hadoop   hadoop1:/usr/local
  scp-rq /usr/local/hadoop   hadoop2:/usr/local
  8,还要在三个容器中安装which工具
  安装的是rpm包,包下载地址:
  https://centos.pkgs.org/7/centos-x86_64/which-2.20-7.el7.x86_64.rpm.html
  先传到宿主机上,再传到三个容器中
  # docker cp which-2.20-7.el7.x86_64.rpm hadoop0:/usr/local/
  # docker cp which-2.20-7.el7.x86_64.rpm hadoop1:/usr/local/
  # docker cp which-2.20-7.el7.x86_64.rpm hadoop2:/usr/local/
  之后,rpm -ivh which-2.20-7.el7.x86_64.rpm就好了。
  十四、全部配置完,就可以格式化hadoop集群,然后启动了。

  在主节点上,执行
  cd /usr/local/hadoop
  bin/hdfs namenode -format
  出现successfully formatted。集群搭建成功。
  接着启动集群
  sbin/start-all.sh
  10,检测集群是否好用。
  jps一下看看
  主节点:
  
  762 NameNode
  926 SecondaryNameNode
  1055 ResourceManager
  1455 Jps
  从节点:
  354 NodeManager
  259 DataNode
  471 Jps
  到/usr/local/hadoop中,
  创建个HDFS目录/bin/hadoop fs -mkdir /user目录
查看是否有刚才建的目录/bin/hadoop fs -ls /
  然后上传一个字频文档,利用hadoop自身带的wordcount跑一下mapreduce,成功,就说明好用。
页: [1]
查看完整版本: 通过docker部署hadoop集群