基于Ubuntu Server16.04的Docker多节点Hadoop集群搭建实践

基于Ubuntu Server 16.04的Docker多节点Hadoop集群搭建

一、项目介绍

       想要学习Hadoop,然而只拥有一台腾讯云服务器,所以可以将Hadoop打包到Docker镜像中,快速在单个机器上搭建Hadoop集群。

        如图所示,Hadoop的Master节点和Slave节点分布运行在不同的Docker容器中,其中hadoop-master容器中允许NameNode和ResourceManager,hadoop-slave容器中运行DataNode和NodeManager。NameNode和DataNode是Hadoop分布式文件系统HDFS的组件,复杂存储输入以及输出数据,而ResourceManager和NodeManager是Hadoop集群资源管理系统YARN的组件,复杂CPU和内存资源的调度。

  基于Ubuntu Server16.04的Docker多节点Hadoop集群搭建实践

   为Hadoop集群创建单独的网络:

基于Ubuntu Server16.04的Docker多节点Hadoop集群搭建实践

        然后在运行Hadoop容器时,使用“-net=hadoop”选项,这时所有容器将运行在hadoop网络中,它们可以通过容器名称进行通信。

二、三个节点Hadoop集群搭建步骤

    1.下载Docker镜像

    基于Ubuntu Server16.04的Docker多节点Hadoop集群搭建实践

    2.下载GitHub仓库

    基于Ubuntu Server16.04的Docker多节点Hadoop集群搭建实践

    3.创建Hadoop网络

    [email protected]:~$ sudo docker network create --driver=bridge hadoop

    4.运行Docker容器

    基于Ubuntu Server16.04的Docker多节点Hadoop集群搭建实践

    5.启动hadoop

基于Ubuntu Server16.04的Docker多节点Hadoop集群搭建实践

   6.测试Word count

    [email protected]:~# ./run-wordcount.sh

    正常情况下,执行结果为:

    基于Ubuntu Server16.04的Docker多节点Hadoop集群搭建实践

    7.Hadoop的网页管理地址:

        NameNode:http://your ip address:50070/

基于Ubuntu Server16.04的Docker多节点Hadoop集群搭建实践

        ResourceManager:http://your ip address:8088/

基于Ubuntu Server16.04的Docker多节点Hadoop集群搭建实践

三、N个节点Hadoop集群搭建步骤

1.参考第二部分1~3:下载Docker镜像,下载GitHub仓库,创建Hadoop网络

2.重新构建Docker镜像

./resize-cluster.sh 5

这里选择N=5

3.启动Docker容器

基于Ubuntu Server16.04的Docker多节点Hadoop集群搭建实践

4.启动Hadoop,并运行wordcount。

基于Ubuntu Server16.04的Docker多节点Hadoop集群搭建实践

5.关闭Hadoop集群

[email protected]:~# which hadoop

基于Ubuntu Server16.04的Docker多节点Hadoop集群搭建实践

遇到的问题:

1.运行容器容器未启动:

基于Ubuntu Server16.04的Docker多节点Hadoop集群搭建实践

经过分析,为nginx端口占用,关闭nginx服务,重新执行该命令。另一种方法是修改端口号,但未经过实际验证。

2.

It looks like you are making an HTTP request to a Hadoop IPC port. This is not the correct port for the web interface on this daemon.

参考解决方案:https://*.com/questions/20216614/hadoop-2-2-0-it-looks-like-you-are-making-an-http-request-to-a-hadoop-ipc-port

其中提到:不能通过浏览器访问hdfs地址,该地址是hadoop内部使用的。