G
N
I
D
A
O
L

OpenEuler-Hadoop安装配置


OpenEuler-Hadoop安装配置

服务器:华为TaiShan-200 (鲲鹏920) 2台

操作系统:OpenEuler_20.03LTS arm64

用户:root

集群规划:分布式

参考教程:OpenEuler搭建Hadoop集群_wxl-CSDN博客

配置JAVA环境变量

所有节点都要配置

  1. 安装JAVA:dnf install openjdk-8-jdk

  2. 找到安装路径:update-alternatives --config java

    例如:安装路径

  3. 设置环境变量:vi /etc/profile

    在文件末尾键入(注意JAVA_HOME的目录):

    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-7.oe1.aarch64
    export JRE_HOME=$JAVA_HOME/jre
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
    

    保存生效:source /etc/profile

    由于其他因素(例如PATH被覆盖等问题),PATH可能在系统重启后失效,需要重新加载

    具体参考:每次重启需要source /etc/profile的原因-环境变量_ningyanggege的博客-CSDN博客_/etc/profile 重启

主节点

  1. 下载Hadoop:wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1-aarch64.tar.gz

    官方地址:Apache Hadoop

    hadoop-3.3.1-aarch64.tar.gz:选择匹配的架构下载

  2. 解压文件:tar -zxvf hadoop-3.3.1-aarch64.tar.gz -C /opt/

    /opt/:此目录可自选

    解压后即可删除下载文件:rm hadoop-3.3.1-aarch64.tar.gz

  3. 移动到解压的目录,重命名和修改用户权限

    移动:cd /opt/

    重命名:mv hadoop-3.3.1 hadoop

    修改权限: chown -R hadoop ./hadoop (ROOT用户不必修改)

  4. 设置环境变量:vi /etc/profile

    在文件末尾键入(注意HADOOP_HOME的目录):

    export HADOOP_HOME=/opt/hadoop
    export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    

    保存生效:source /etc/profile

  5. 部署配置文件修改:

    修改文件中的**<configuration></configuration>**部分

    node1,node2,端口,/opt/hadoop/data 请根据实际自行修改

    • core-site.xml

      vi /opt/hadoop/etc/hadoop/core-site.xml

      <configuration>
       <!--指定NameNode的地址-->
       <property>
        <name>fs.defaultFS</name>
        <!--主节点名:端口-->
        <value>hdfs://node1:8020</value>
       </property>
       <!--指定hadoop数据的存储目录-->
       <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop/data</value>
       </property>
       <!-- 配置 HDFS 网页登录使用的静态用户为 root (非必须,可以不要)-->
       <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
       </property>
      </configuration>
      

      Hadoop数据的存储目录可指定多个目录,用逗号隔开

      经测试:namenode存放目录不可与datanode存放目录冲突,原因未知

    • hdfs-site.xml

      vi /opt/hadoop/etc/hadoop/hdfs-site.xml

      <configuration>
       <!--nn web端访问地址-->
       <property>
        <name>dfs.namenode.http-address</name>
        <value>ndoe1:9870</value>
       </property>
       <!--2nn web端访问地址-->
       <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node2:9868</value>
       </property>
      <!-- 当集群结点小于等于3,写文件操作容易出错,所以添加以下内容 -->
      <property>
          <name>dfs.client.block.write.replace-datanode-on-failure.enable</name>
          <value>true</value>
      </property>
      <property>
          <name>dfs.client.block.write.replace-datanode-on-failure.policy</name>
          <value>NEVER</value>
      </property>
      
      <property>
          <name>dfs.client.block.write.replace-datanode-on-failure.best-effort</name>
          <value>false</value>
      </property>
      <!--hdfs 读写权限设定-->
      <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
        <description>
          If "true", enable permission checking in HDFS.
          If "false", permission checking is turned off,
          but all other behavior is unchanged.
          Switching from one parameter value to the other does not change the mode,
          owner or group of files or directories.
        </description>
      </property>
      </configuration>
      

      datanode默认存放目录同hadoop.tmp.dir

      若需修改目录,在本文件插入如下文本:

       <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/hadoop_tmp</value>
       </property>
      

      多目录可用逗号隔开

    • yarn-site.xml

      vi /opt/hadoop/etc/hadoop/yarn-site.xml

      <configuration>
       <!--指定MR走shuffle -->
       <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
       </property>
       <!--指定ResourceManager的地址-->
       <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node2</value>
       </property>
       <!--环境变量的继承-->
       <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
       </property>
       <!--开启日志聚集功能-->
        <property>
         <name>yarn.log-aggregation-enable</name>
         <value>true</value>
        </property>
       <!--设置日志聚集服务器地址-->
        <property>
         <name>yarn.log.server.url</name>
         <value>http://node1:19888/jobhistory/logs</value>
        </property>
       <!--设置日志保留时间为7天-->
        <property>
         <name>yarn.log-aggregation.retain-seconds</name>
         <value>604800</value>
        </property>
      </configuration>
      
    • mapred-site.xml

      vi /opt/hadoop/etc/hadoop/mapred-site.xml

      <configuration>
       <!--指定MapReduce程序运行在Yarn上-->
        <property>
         <name>mapreduce.framework.name</name>
         <value>yarn</value>
        </property>
       <!--历史服务器端地址-->
       <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node1:10020</value>
       </property>
       <!--历史服务器web端地址-->
       <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node1:19888</value>
       </property>
      </configuration>
      
  6. 添加JAVA_HOME路径至文件hadoop-env.sh,yarn-env.sh,mapred-env.sh

    例如:vi /opt/hadoop/etc/hadoop/hadoop-env.sh

    添加JAVA_HOME路径至文件

  7. 添加节点主机名:vi /opt/hadoop/etc/hadoop/workers

    node1
    node2
    
  8. 添加节点hosts映射(其他节点也进行修改):vi /etc/hosts

    192.168.1.10 node1
    192.168.1.11 node2
    

    根据实际情况自行修改:ip 节点名

  9. ssh无密码访问

    • 主节点生成公钥

      cd ~/.ssh               # 如果没有该目录,先执行一次ssh localhost
      rm ./id_rsa*            # 删除之前生成的公匙(如果有)
      ssh-keygen -t rsa       # 一直按回车就可以
      
    • 传递公钥给其他节点:scp ~/.ssh/id_rsa.pub root@node2:/root

      非root用户将root改为其他用户名,注意传输文件的权限问题

      scp文件传输指令:scp 需要传输的文件目录 远程用户名@远程ip:保存路径

    • 其他节点授权公钥

      mkdir ~/.ssh       # 如果不存在该文件夹需先创建,若已存在则忽略
      cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
      rm ~/id_rsa.pub    # 用完就可以删掉了
      
  10. 集群分发至其他节点(拷贝主节点Hadoop至其他节点)

    参考教程使用rsync进行拷贝,本教程使用scp

    scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件,类似于 cp 命令,不过 cp 只能在本机中拷贝。
    rsync指令和scp的区别:前者只传差异文件,后者不论是否有差异都传。

    scp -r /opt/hadoop root@node2:/opt/

    其他节点激活环境:source /etc/profile

  11. 关闭防火墙或开放指定端口,配置路由端口映射(过程略)

初始化

bin/hdfs namenode -format

  • 常用的启动、关闭服务的指令:

    sbin/start-dfs.sh  # 任意虚拟机均可执行
    sbin/start-yarn.sh  # 只能在node1中执行(yarn-site.xml文件中的配置决定)
    bin/mapred --daemon start historyserver  # node1中执行
    bin/mapred --daemon stop historyserver  # node1中执行
    sbin/stop-yarn.sh  # 只能在node1中执行(yarn-site.xml文件中的配置决定)
    sbin/stop-dfs.sh  # 任意虚拟机均可执行
    
  • 初始化只需一次,重复初始化可能导致节点无法正常启动

    类似问题参考:[DataNode节点无法启动问题解决方法 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/340827380#:~:text=在Hadoop日常运维过程中,比较常见的一个问题就是DataNode节点无法启动。 无法启动的一个原因可能为,HDFS重复的进行格式化。 执行文件系统格式化时,会在NameNode节点的data目录(即配置文件中dfs.name.dir在本地系统的路径)中保存一个current%2FVERSION文件,记录当前的clusterID,标识了当前NameNode的版本。)

    • 删除同配置文件中的hadoop.tmp.dirdfs.datanode.data.dir等目录
    • 或修改问题节点上述目录下的VERSION文件中的clusterIDNameNode中的一致
  • 存在指令start-all.sh,但不建议使用

错误纠正


文章作者: AnglesD
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AnglesD !
评论
  目录