# 手工搭建Hadoop环境（Linux）
#### 简介
本文介绍了如何在华为云上使用弹性云服务器的Linux实例手工搭建Hadoop环境。Hadoop是一款由Apache基金会用Java语言开发的分布式开源软件框架，用户可以在不了解分布式底层细节的情况下，开发分布式程序，充分利用集群的能力进行高速运算和存储。Hadoop的核心部件是HDFS（Hadoop Distributed File System）和MapReduce：
- HDFS：是一个分布式文件系统，可对应用程序数据进行分布式储存和读取。
- MapReduce：是一个分布式计算框架，MapReduce的核心思想是把计算任务分配给集群内的服务器执行。通过对计算任务的拆分（Map计算和Reduce计算），再根据任务调度器（JobTracker）对任务进行分布式计算。
更多信息，请参见[Hadoop官网](https://hadoop.apache.org/)。
#### 前提条件
- 已购买一台弹性云服务器，且已为其绑定弹性公网IP。
- 弹性云服务器所在安全组添加了如下表所示的安全组规则，具体步骤参见[为安全组添加安全组规则](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0030969470.html)。
  表1安全组规则 
  | 方向 | 优先级 | 策略 | 类型  | 协议端口      | 源地址        |
  |:---|:---|:---|:---|:---|:---|
  | 入方向 | 1       | 允许   | IPv4 | TCP: 8088 | 0.0.0.0/0 |
  | 入方向   | 1       | 允许    | IPv4  | TCP: 9870   | 0.0.0.0/0     |
     
  
- 为了更好地获取和更新系统和软件，建议您更新镜像源为华为云镜像源，详细操作，请参见[如何使用华为云开源镜像配置yum源(x86_64和鲲鹏)？](https://support.huaweicloud.com/ecs_faq/zh-cn_topic_0118948562.html)。
 
#### 操作流程
Linux实例手工搭建Hadoop环境的具体操作步骤如下：
1. [安装JDK]
2. [配置SSH免密登录]
3. [安装Hadoop]
4. [配置Hadoop]
5. [启动Hadoop]
 
#### 实施步骤
1. 登录弹性云服务器。 
   具体操作请参见[Linux ECS登录方式概述](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771089.html)。
   
   
2. **安装JDK**
   
   1. 执行以下命令，下载[JDK 1.8](https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz)安装包。
      ```
      wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
      ```
      
   
   2. 执行以下命令，解压下载的JDK 1.8安装包。
      ```
      tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
      ```
      
   
   3. 执行以下命令，移动并重命名JDK安装包。 本示例中将JDK安装包重命名为java8，您可以根据需要使用其他名称。
      ```
      sudo mv java-se-8u41-ri/ /usr/java8
      ```
      
   
   4. 执行以下命令，配置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
      ```
      
   
   5. 验证安装。
      ```
      java -version
      ```
      回显信息如下表示jdk安装成功。
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002298488457.png "点击放大")
      
   
   
   
   
3. **配置SSH免密登录**
   
   1. 执行以下命令，创建公钥和私钥。
      ```
      ssh-keygen -t rsa
      ```
      按三次回车后回显信息如下图所示，表示创建公钥和私钥成功。
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002298488637.png "点击放大")
      
   
   2. 执行以下命令，将公钥添加到authorized_keys文件中。
      ```
      cd .ssh
      cat id_rsa.pub >> authorized_keys
      ```
      
   
   
   
   
4. **安装Hadoop**
   
   1. 执行以下命令，下载[Hadoop软件包](https://archive.apache.org/dist/hadoop/common/)。
      此处以[3.2.4](https://archive.apache.org/dist/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz)版本为例。
      ```
      cd
      wget https://archive.apache.org/dist/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz
      ```
      
   
   2. 解压Hadoop安装包到opt目录下。
      ```
      sudo tar -zxvf hadoop-3.2.4.tar.gz -C /opt/
      sudo mv /opt/hadoop-3.2.4 /opt/hadoop
      ```
      
   
   3. 执行以下命令，配置环境变量。
      ```
      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.sh和hadoop-env.sh中JAVA_HOME的路径。
      ```
      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 version
      ```
      回显信息如下，表示Hadoop安装成功。
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002297996605.png "点击放大")
      
   
   
   
   
5. **配置Hadoop**
   
   1. 修改Hadoop配置文件core-site.xml。
      1. 执行以下命令，进入编辑页面。
         ```
         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>
         ```
         
      
      4. 按**Esc**键退出编辑模式。
      
      5. 执行以下命令保存并退出。
         ```
         :wq
         ```
         
       
   
   2. 修改Hadoop配置文件hdfs-site.xml。
      1. 执行以下命令，进入编辑页面。
         ```
         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>
         ```
         
      
      4. 按**Esc**键退出编辑模式。
      
      5. 执行以下命令保存并退出。
         ```
         :wq
         ```
         
       
   
   
   
   
6. **启动Hadoop**
   
   1. 执行以下命令，初始化namenode。
      ```
      hadoop namenode -format
      ```
      
   
   2. 依次执行以下命令，启动Hadoop。
      ![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/caution_3.0-zh-cn.png)
      - 出于系统安全和稳定性考虑，Hadoop官方不推荐使用root用户来启动Hadoop服务，直接使用root用户会因为权限问题无法启动Hadoop。您可以通过非root用户身份启动Hadoop服务，例如ecs-user用户等。
      
      - 如果您一定要使用root用户启动Hadoop服务，请在了解Hadoop权限控制及相应风险之后，修改配置文件，具体步骤请参见[相关操作]。
      
      - 使用root用户启动Hadoop服务会带来严重的安全风险，包括但不限于数据泄露、恶意软件更容易获得系统最高权限、意料之外的权限问题或行为。
       
      ```
      start-dfs.sh
      ```
      回显信息如下图所示。
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002298379585.png "点击放大")
      ```
      start-yarn.sh
      ```
      回显信息如下图所示。
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002263762748.png "点击放大")
      
   
   3. 执行以下命令，可查看成功启动的进程。
      ```
      jps
      ```
      成功启动的进程如下所示。
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002298379701.png "点击放大")
      
   
   4. 打开浏览器访问http://服务器弹性公网IP地址:8088和http://服务器弹性公网IP地址:9870。 若显示如下界面，表示Hadoop环境搭建完成。
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002263819908.png "点击放大")
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002298493081.png "点击放大")
      
   
   
   
   
 
 #### 相关操作
**修改配置文件，以便root用户可以启动Hadoop服务。**
1. 分别执行以下命令，编辑**start-dfs.sh** 和**stop-dfs.sh** 两个文件。
   ```
   vim /opt/hadoop/sbin/start-dfs.sh
   vim /opt/hadoop/sbin/stop-dfs.sh
   ```
   
2. 在文件中添加以下参数。
   ```
   HDFS_DATANODE_USER=root
   HADOOP_SECURE_DN_USER=hdfs
   HDFS_NAMENODE_USER=root
   HDFS_SECONDARYNAMENODE_USER=root
   ```
   ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002263761820.png "点击放大")
   
3. 分别执行以下命令，编辑**start-yarn.sh** 和**stop-yarn.sh** 两个文件。
   ```
   vim /opt/hadoop/sbin/start-yarn.sh
   vim /opt/hadoop/sbin/stop-yarn.sh
   ```
   
4. 在文件中添加以下参数。
   ```
   YARN_RESOURCEMANAGER_USER=root
   HADOOP_SECURE_DN_USER=yarn
   YARN_NODEMANAGER_USER=root
   ```
   
 
