Docker-compose部署Hadoop

温镜
2023-12-01

Docker部署Hadoop

1. 简介

Hadoop简介

  • Hadoop简介:

Apache Hadoop是一个开源的分布式计算平台,可以处理大规模数据集的分布式存储和处理。它是由Apache基金会下的Hadoop项目开发的,采用Java语言编写。Hadoop的核心组件包括Hadoop分布式文件系统(HDFS)和Hadoop MapReduce,它们共同提供了一个可靠、可扩展的分布式计算环境。Hadoop已经成为了大数据处理的标准工具之一。

Docker简介- Docker是一种容器化技术,能够将应用程序及其依赖项打包在一个可移植的容器中,以便在不同的环境中运行。相比于传统的虚拟化技术,Docker更加轻量级、快速、易于管理和部署。

  • Docker容器具有以下特点:
    • 快速启动和停止
    • 隔离性强,避免了应用程序之间的冲突
    • 轻量级,占用资源少
    • 易于管理和部署
  • Docker生态系统包括Docker Engine、Docker Hub、Docker Compose、Docker Swarm等组件,可以满足不同场景下的需求。

2. 准备工作

安装Docker

  • 安装Docker

    1. 在Ubuntu上安装Docker:
      sudo apt-get update
      sudo apt-get install docker.io
      
    2. 在CentOS上安装Docker:
      sudo yum update
      sudo yum install docker
      
    3. 验证Docker是否安装成功:
      docker --version
      

下载Hadoop镜像

  • 下载Hadoop镜像

    docker pull sequenceiq/hadoop-docker:latest
    

    这个命令将会从docker hub上下载最新的Hadoop镜像到本地。

创建Docker网络- 创建Docker网络

docker network create hadoop-net

这个命令会在Docker中创建一个名为"hadoop-net"的网络,用于连接Hadoop集群中的各个容器。

3. 部署Hadoop

启动Hadoop容器集群

  • 使用docker-compose启动Hadoop容器集群

    version: '2.2'
    services:
      namenode:
        image: sequenceiq/hadoop-docker:2.7.1
        container_name: namenode
        hostname: namenode
        ports:
          - "50070:50070"
          - "9000:9000"
        volumes:
          - hadoop_namenode:/hadoop/dfs/name
        environment:
          - CLUSTER_NAME=hadoop
          - REPLICATION=1
          - NODE_TYPE=NAMENODE
        command: /etc/bootstrap.sh -d && tail -f /dev/null
    
      datanode1:
        image: sequenceiq/hadoop-docker:2.7.1
        container_name: datanode1
        hostname: datanode1
        volumes:
          - hadoop_datanode1:/hadoop/dfs/data
        environment:
          - CLUSTER_NAME=hadoop
          - REPLICATION=1
          - NODE_TYPE=DATANODE
          - NAMENODE_HOST=namenode
        command: /etc/bootstrap.sh -d && tail -f /dev/null
    
      datanode2:
        image: sequenceiq/hadoop-docker:2.7.1
        container_name: datanode2
        hostname: datanode2
        volumes:
          - hadoop_datanode2:/hadoop/dfs/data
        environment:
          - CLUSTER_NAME=hadoop
          - REPLICATION=1
          - NODE_TYPE=DATANODE
          - NAMENODE_HOST=namenode
        command: /etc/bootstrap.sh -d && tail -f /dev/null
    
    volumes:
      hadoop_namenode:
      hadoop_datanode1:
      hadoop_datanode2:
    

    以上是一个简单的docker-compose文件,包含一个namenode和两个datanode,可以使用docker-compose up -d命令启动容器集群。启动后,可以通过http://localhost:50070访问Hadoop web界面。

配置Hadoop集群

  • 配置hdfs-site.xml文件
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/hadoop_data/hdfs/namenode</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/hadoop_data/hdfs/datanode</value>
  </property>
</configuration>
  • 配置core-site.xml文件
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/hadoop_data/tmp</value>
  </property>
</configuration>
  • 配置mapred-site.xml文件
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>
  • 配置yarn-site.xml文件
<configuration>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>localhost</value>
  </property>
  <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>2048</value>
  </property>
  <property>
    <name>yarn.nodemanager.resource.cpu-vcores</name>
    <value>2</value>
  </property>
</configuration>

启动Hadoop服务- 启动Hadoop服务:

  1. 启动HDFS服务:
    $HADOOP_HOME/sbin/start-dfs.sh
    
  2. 启动YARN服务:
    $HADOOP_HOME/sbin/start-yarn.sh
    
  3. 验证服务是否启动成功:
    jps
    
    输出结果中应该包含NameNode、DataNode、ResourceManager、NodeManager等进程。

4. 测试Hadoop

启动Hadoop样例程序

  • 启动Hadoop样例程序的命令为:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi 2 5
  • 这个命令会启动一个MapReduce作业来计算Pi的值,其中2表示使用2个Map任务,5表示使用5个Reduce任务。执行成功后,会在终端输出Pi的近似值。

查看Hadoop运行状态- 使用命令jps查看Hadoop运行状态:

$ jps
1234 NameNode
5678 DataNode
9012 ResourceManager
3456 NodeManager
7890 SecondaryNameNode

这里展示了一个包含NameNode、DataNode、ResourceManager、NodeManager、SecondaryNameNode的Hadoop集群的运行状态。

5. 总结

Docker部署Hadoop的优势

  • Docker部署Hadoop的优势:
    • 简化部署流程:使用Docker可以快速部署Hadoop集群,无需手动安装和配置各个组件;
    • 提高可移植性:Docker容器可以在不同的环境中运行,保证了Hadoop集群的可移植性;
    • 方便管理和维护:Docker提供了一套完整的容器管理和维护工具,可以方便地管理和维护Hadoop集群;
    • 节省资源:使用Docker可以避免虚拟化技术带来的性能损失,同时也可以节省硬件资源。

Hadoop在Docker中的限制

Hadoop在Docker中的限制

  • 容器内存限制:由于Docker容器内存限制的原因,可能会导致Hadoop无法正常运行,需要在Docker启动命令中设置--ulimit memlock=-1:-1参数来解决。

  • 网络限制:Docker容器默认使用的是bridge网络模式,可能会导致Hadoop集群无法正常通信,需要使用Docker的host网络模式或自定义网络模式。

  • 存储限制:Docker容器的存储默认是临时性的,容器停止后会被删除,需要使用Docker的数据卷或绑定宿主机目录的方式来持久化Hadoop数据。

  • 性能限制:由于Docker容器的虚拟化技术,可能会导致Hadoop性能下降,需要根据实际情况进行优化。

后续工作建议- 后续工作建议:

  • 可以尝试使用更高级的容器编排工具,如Kubernetes,来管理Hadoop集群;
  • 可以对Hadoop集群的安全性进行加强,如使用Kerberos进行认证授权;
  • 可以将Hadoop集群与其他大数据组件进行集成,如Spark、Hive等,来实现更多的数据处理和分析功能;
  • 可以将Hadoop集群部署到云平台上,如AWS、Azure等,来实现更高的可扩展性和可靠性。
 类似资料: