搭建Hadoop环境

更新时间:

Hadoop是由Apache基金会使用Java语言开发的分布式开源软件框架,用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的能力进行高速运算和存储。本文介绍如何在Linux操作系统的ECS实例上快速搭建Hadoop分布式环境。

前提条件

搭建Hadoop环境时,已有的ECS实例必须满足以下条件:

  • 公网IP:实例已分配公网IP地址或绑定弹性公网IP(EIP)。

  • 操作系统:Linux操作系统。

  • 实例安全组的入方向规则已放行22、443、8088(Hadoop YARN默认的Web UI端口)、9870(Hadoop NameNode默认的Web UI端口)端口。具体操作,请参见添加安全组规则

背景信息

Apache Hadoop软件库是一个框架,它允许通过简单的编程模型在由多台计算机组成的集群上对大规模数据集进行分布式处理。该框架设计能够从单个服务器扩展到数千台机器,每台机器都提供本地计算和存储能力。Hadoop并不依赖硬件来实现高可用性,而是将其自身设计为能够在应用层检测并处理故障,因此能在可能各自存在故障风险的计算机集群之上,提供高度可用的服务。

Hadoop的核心部件是HDFS(Hadoop Distributed File System)和MapReduce:

  • HDFS:是一个分布式文件系统,可用于应用程序数据的分布式存储和读取。

  • MapReduce:是一个分布式计算框架,MapReduce的核心思想是把计算任务分配给集群内的服务器执行。通过对计算任务的拆分(Map计算和Reduce计算),再根据任务调度器(JobTracker)对任务进行分布式计算。

更多信息,请参见Hadoop官网

Hadoop与Java开发工具包(JDK)紧密集成,不同版本的Hadoop对JDK的要求也有所不同。

  • Hadoop 3.3:Java 8和Java 11

  • Hadoop 3.0.x~3.2.x:Java 8

  • Hadoop 2.7.x~2.10.x:Java 7和Java 8

本文使用的版本为Hadoop 3.2.4和Java 8,如您使用其他版本,请参考Hadoop官网指南。更多信息,请参见Hadoop Java Versions

步骤一:安装JDK

  1. 远程连接已创建的ECS实例。

  2. 执行以下命令,下载JDK 1.8安装包。

    wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
  3. 执行以下命令,解压下载的JDK 1.8安装包。

    tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
  4. 执行以下命令,移动并重命名JDK安装包。

    本示例中将JDK安装包重命名为java8,您可以根据需要使用其他名称。

    sudo mv java-se-8u41-ri/ /usr/java8
  5. 执行以下命令,配置Java环境变量。

    如果您将JDK安装包重命名为其他名称,需将以下命令中的java8替换为实际的名称。

    sudo sh -c "echo 'export JAVA_HOME=/usr/java8' >> /etc/profile"
    sudo sh -c 'echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile'
    source /etc/profile
  6. 执行以下命令,查看JDK是否成功安装。

    java -version

    返回类似如下信息,表示JDK已安装成功。

    image

步骤二:安装Hadoop

  1. 执行以下命令,下载Hadoop安装包。

    wget https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz
  2. 执行以下命令,将Hadoop安装包解压至/opt/hadoop

    sudo tar -zxvf hadoop-3.2.4.tar.gz -C /opt/
    sudo mv /opt/hadoop-3.2.4 /opt/hadoop
  3. 执行以下命令,配置Hadoop环境变量。

    sudo sh -c "echo 'export HADOOP_HOME=/opt/hadoop' >> /etc/profile"
    sudo sh -c "echo 'export PATH=\$PATH:/opt/hadoop/bin' >> /etc/profile"
    sudo sh -c "echo 'export PATH=\$PATH:/opt/hadoop/sbin' >> /etc/profile"
    source /etc/profile
  4. 执行以下命令,修改配置文件yarn-env.shhadoop-env.sh

    sudo sh -c 'echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/yarn-env.sh'
    sudo sh -c 'echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/hadoop-env.sh'
  5. 执行以下命令,测试Hadoop是否安装成功。

    hadoop version

    返回类似如下信息,表示Hadoop已安装成功。

    image

步骤三:配置Hadoop

  1. 修改Hadoop配置文件core-site.xml

    1. 执行以下命令,进入编辑页面。

      sudo vim /opt/hadoop/etc/hadoop/core-site.xml
    2. 输入i,进入编辑模式。

    3. <configuration></configuration>节点内,插入如下内容。

          <property>
              <name>hadoop.tmp.dir</name>
              <value>file:/opt/hadoop/tmp</value>
              <description>location to store temporary files</description>
          </property>
          <property>
              <name>fs.defaultFS</name>
              <value>hdfs://localhost:9000</value>
          </property>

      image

    4. Esc,退出编辑模式,并输入:wq保存并退出。

  2. 修改Hadoop配置文件hdfs-site.xml

    1. 执行以下命令,进入编辑页面。

      sudo vim /opt/hadoop/etc/hadoop/hdfs-site.xml
    2. 输入i,进入编辑模式。

    3. <configuration></configuration>节点内,插入如下内容。

          <property>
              <name>dfs.replication</name>
              <value>1</value>
          </property>
          <property>
              <name>dfs.namenode.name.dir</name>
              <value>file:/opt/hadoop/tmp/dfs/name</value>
          </property>
          <property>
              <name>dfs.datanode.data.dir</name>
              <value>file:/opt/hadoop/tmp/dfs/data</value>
          </property>

      image

    4. Esc,退出编辑模式,并输入:wq后保存并退出。

步骤四:配置SSH免密登录

  1. 执行以下命令,创建公钥和私钥。

    ssh-keygen -t rsa

    回显信息如下所示,表示创建公钥和私钥成功。

    image

  2. 执行以下命令,将公钥添加到authorized_keys文件中。

    cd .ssh
    cat id_rsa.pub >> authorized_keys

步骤五:启动Hadoop

  1. 执行以下命令,初始化namenode

    hadoop namenode -format
  2. 启动Hadoop。

    重要
    • 出于系统安全和稳定性考虑,Hadoop官方不推荐使用root用户来启动Hadoop服务,直接使用root用户会因为权限问题无法启动Hadoop。您可以通过非root用户身份启动Hadoop服务,例如ecs-user用户等。

    • 如果您一定要使用root用户启动Hadoop服务,请在了解Hadoop权限控制及相应风险之后,修改以下配置文件。

      请注意:使用root用户启动Hadoop服务会带来严重的安全风险,包括但不限于数据泄露、恶意软件更容易获得系统最高权限、意料之外的权限问题或行为。更多权限说明,请参见Hadoop官方文档

    修改配置文件,以便root用户可以启动Hadoop服务。

    一般情况下,以下配置文件位于/opt/hadoop/sbin目录下。

    1. 在start-dfs.sh和stop-dfs.sh两个文件中添加以下参数。

      HDFS_DATANODE_USER=root
      HADOOP_SECURE_DN_USER=hdfs
      HDFS_NAMENODE_USER=root
      HDFS_SECONDARYNAMENODE_USER=root

      image

    2. 在start-yarn.sh,stop-yarn.sh两个文件中添加以下参数。

      YARN_RESOURCEMANAGER_USER=root
      HADOOP_SECURE_DN_USER=yarn
      YARN_NODEMANAGER_USER=root

      image

    1. 执行以下命令,启动HDFS服务。

      这个脚本会启动NameNode、SecondaryNameNode和DataNode等组件,从而启动HDFS服务。

      start-dfs.sh

      回显信息如下所示时,表示HDFS服务已启动。

      image

    2. 执行以下命令,启动YARN服务。

      这个脚本会启动ResourceManager、NodeManager和ApplicationHistoryServer等组件,从而启动YARN服务。

      start-yarn.sh

      回显信息如下所示时,表示YARN服务已启动。

      image

  3. 执行以下命令,可以查看成功启动的进程。

    jps

    成功启动的进程如下所示。

    image

  4. 在本地浏览器地址栏输入http://<ECS公网IP>:8088,访问YARN的Web UI界面。

    通过该界面可以查看整个集群的资源使用情况、应用程序状态(比如MapReduce作业)、队列信息等。

    重要

    需确保在ECS实例所在安全组的入方向中放行Hadoop YARN所需的8088端口,否则无法访问。具体操作,请参见添加安全组规则

    image

  5. 在本地浏览器地址栏输入http://<ECS公网IP>:9870,访问NameNode的Web UI界面。

    该界面提供了有关HDFS文件系统状态、集群健康状况、活动节点列表、NameNode日志等信息。

    显示如下界面,则表示Hadoop分布式环境已搭建完成。

    重要

    需确保在ECS实例所在安全组的入方向中放行Hadoop NameNode所需9870端口,否则无法访问。具体操作,请参见添加安全组规则

    image.png