最近在docker上部署hadoop clusters,按照hadoop官网的配置遇到很多问题。有的问题是我个人原因造成,也有些许问题让我感觉到hadoop官网的文档在部分细节上还不够友好。我决定把配置的过程记录下来,一方面做个记录,另一方面给后来者提供一些方便。


  • 我是使用docker部署的,首先就是拉取镜像

docker search hadoop
...
...这里会返回关于hadoop的所有镜像,我选择的是star数量最多的sequenceiq/hadoop-docker
...
docker pull sequenceiq/hadoop-docker
  • 建议首先对镜像做一些修改,否则加载到容器之后再修改,可能就比较麻烦了。当时我不知道这些,所以直接就创建了Namenode和Datanode的容器,结果改起来比较麻烦。

  • 创建Namenode和Datanode容器,在这里我创建了一个Namenode和一个Datanode,Namenode还兼着SecondaryNamenode。

docker network ls    #确认有bridge driver
docker run itd --net=bridge -p 50070:50070 -p 8008:8008 -p 9000:9000 --name hadoop-master --host hadoop-master-host
docker run itd --net=bridge --name hadoop-slave1 --host hadoop-slave1
  • 进入容器的命令行,修改配置,需要特别注意的是,所有节点的配置都要如此。

使用docker ps命令获取到正在运行的docker容器的ID,以下分别使用{MASTER_ID}和{SLAVE1_ID}来替代

docker exec -ti {MASTER_ID} /bin/bash
cd /usr/local/hadoop

修改${HADOOP_HOME}/etc/core-site.xml,在里面添加Namenode的地址。使用主机名方式添加时要特别注意主机名需要添加到/etc/hosts。

      <property>
          <name>fs.defaultFS</name>
          <value>hdfs://host-hadoop-master:9000</value>
      </property>

添加slave列表,修改{HADOOP_HOME}/etc/slaves文件,添加slave节点的IP地址或主机名。当然了,如果以主机名方式添加,需要修改/etc/hosts文件。哦,记住,里面默认的内容是localhost,删掉。
添加SecondaryNamenode,修改{HADOOP_HOME}/etc/masters,添加IP地址或主机名。(这一步非常重要,我使用的hadoop版本是2.7,里面没有这个文件,需要手动创建。我在网上别人的博客里看到这一步了,但是官方文档并没有说明,而且也没有这个文件。由于本人太迷信官方文档了,所以省略了这一步,所以造成了严重错误的开始)

  • 所有配置文件修改完成之后,就可以启动hadoop服务了。这里在master节点运行即可。

${HADOOP_HOME}/bin/hdfs namenode -format # The first time you bring up HDFS, it must be formatted. Format a new distributed filesystem as hdfs
${HADOOP_HOME}/sbin/start-dfs.sh #执行完成这一步之后,在Namenode节点会有Namenode和SecondaryNamenode两个服务运行,Datanode节点会有Datanode服务运行
${HADOOP_HOME}/sbin/start-yarn.sh #执行完成这一步之后,在master节点会有ResourceManager服务运行,Datanode节点会有NodeManager服务运行

至此,hadoop cluster环境搭建就完成了。


莫谈国是
16 声望5 粉丝