集群存储根路径没有权限,导致集群服务启动失败的问题

本文介绍集群运行时,由于配置的集群存储根路径(对应Hadoop-Common服务中fs.DefaultFS配置项)缺乏访问权限,导致集群的部分服务启动失败的原因和解决方案。

问题详情

在E-MapReduce控制台,集群的Hadoop-Common服务状态页面的健康检查项区域,查看异常状态的检查结果,显示信息中包含[hadoop_fs_availability] DefaultFS is unable to access,将鼠标悬浮至image.png图标时,提示fs.defaultFS不可访问。请检查配置项,并使用您可访问的存储地址

可能出现该问题的情况:

  • 创建集群时,选择了OSS-HDFS服务,并选择了开通OSS-HDFS服务的Bucket作为集群存储根路径,但在基础配置阶段中使用了没有访问OSS权限的ECS应用角色,导致集群运行时没有该Bucket的访问权限。

  • 创建集群时,通过自定义配置的方式,为Hadoop-Common服务传入fs.DefaultFS配置项时,所使用的Bucket在集群运行时没有访问权限。

  • 集群创建完成后,修改Hadoop-Common服务中fs.DefaultFS配置项时,使用的Bucket在集群运行时没有访问权限。

问题原因和解决方案

针对不同服务,问题原因和解决方案如下。

YARN

问题原因

因为选择的集群存储根路径没有权限,导致EMR集群启动YARN服务时,ResourceManager组件无法正常创建Node Labels等数据目录,MRHistoryServer组件无法正常创建聚合日志等数据目录。

解决方案

  1. 登录集群的Master节点,详情请参见登录集群

  2. 执行以下命令,创建相应数据目录并授予权限。

    sudo su hadoop
    STORE_DIR=$(hdfs getconf -confKey yarn.node-labels.fs-store.root-dir)
    hadoop fs -mkdir -p $STORE_DIR
    hadoop fs -chmod 775 $STORE_DIR
    hadoop fs -chown hadoop:hadoop $STORE_DIR
    STAGING_DIR=$(hdfs getconf -confKey yarn.app.mapreduce.am.staging-dir)
    hadoop fs -mkdir -p $STAGING_DIR
    hadoop fs -chmod 777 $STAGING_DIR
    hadoop fs -chown hadoop:hadoop $STAGING_DIR
    hadoop fs -mkdir -p $STAGING_DIR/history
    hadoop fs -chmod 775 $STAGING_DIR/history
    hadoop fs -chown hadoop:hadoop $STAGING_DIR/history
    LOG_DIR=$(hdfs getconf -confKey yarn.nodemanager.remote-app-log-dir)
    hadoop fs -mkdir -p $LOG_DIR
    hadoop fs -chmod 1777 $LOG_DIR
    hadoop fs -chown hadoop:hadoop $LOG_DIR
  3. 重启YARN服务,详情请参见重启服务

    在EMR控制台YARN服务的状态页面的组件列表区域,观察YARN服务是否正常启动。

Hive

问题原因

因为选择的集群存储根路径没有权限,导致EMR集群启动Hive服务时,HiveServer组件无法正常创建Hive warehouse等数据目录。

解决方案

  1. 登录集群的Master节点,详情请参见登录集群

  2. 执行以下命令,创建相应数据目录并授予权限。

    hadoop fs -mkdir -p /user/hive/warehouse
    hadoop fs -chown hive /user/hive
    hadoop fs -chown hive /user/hive/warehouse
    hadoop fs -chmod 751 /user/hive
    hadoop fs -chmod 1771 /user/hive/warehouse

在EMR控制台Hive服务的状态页面的组件列表区域,观察HiveServer组件是否正常启动。

Spark

问题原因

因为选择的集群存储根路径没有权限,导致EMR集群启动Spark服务时无法正常创建Spark History目录。

解决方案

  1. 登录集群的Master节点,详情请参见登录集群

  2. 执行以下命令,创建Spark History目录。

    hadoop fs -mkdir /spark-history

    在EMR控制台Spark服务的状态页面的组件列表区域,观察SparkHistoryServer和SparkThriftServer组件是否正常启动。

Tez

问题原因

因为选择的集群存储根路径没有权限,导致EMR集群启动Tez服务时无法正常上传相关文件到相应存储目录下。

解决方案

  1. 登录集群的Master节点,详情请参见登录集群

  2. 执行以下命令。

    tez_dir=`readlink  $TEZ_HOME`
    tez_version=`basename $tez_dir`
    
    cd /tmp
    mkdir -p $tez_version/lib
    cp $TEZ_HOME/*.jar $tez_version
    cp $TEZ_HOME/lib/*.jar $tez_version/lib
    tar czf $tez_version.tar.gz $tez_version
    
    hadoop fs -mkdir -p /apps/$tez_version
    hadoop fs -rm -f /apps/$tez_version/$tez_version.tar.gz
    hadoop fs -put $tez_version.tar.gz /apps/$tez_version/
    
    rm -fr $tez_version*

    在EMR控制台Tez服务的状态页面的健康检查项区域,观察tez_env_status检查项状态是否正常。

Flink

问题原因

因为选择的集群存储根路径没有权限,导致EMR集群启动Flink服务时无法正常创建Flink History目录, 并且按默认配置启动的Flink作业可能无法正常写入Checkpoint或Savepoint到OSS-HDFS中。

解决方案

  1. 登录集群的Master节点,详情请参见登录集群

  2. 执行以下命令,创建Flink所需的目录并授予权限。

    hdfs dfs -mkdir -p /flink/flink-checkpoints /flink/flink-jobs /flink/flink-savepoints
    hdfs dfs -chmod -R /flink
  3. 重启Flink服务,详情请参见重启服务

    在EMR控制台Flink服务的状态页面的组件列表区域,观察FlinkHistoryServer组件是否正常启动。还可以启动Flink示例作业,观察Checkpoint是否能正常完成。

HBase

问题原因

因为选择的集群存储根路径没有权限,导致EMR集群启动HBase服务时无法正常创建HBase数据存储目录。

解决方案

  1. 登录集群的Master节点,详情请参见登录集群

  2. 执行以下命令,创建相应数据存储目录并授予权限。

    hadoop dfs -mkdir -p /hbase
    hadoop fs -chown hbase:hadoop /hbase
    hadoop fs -chmod 755 /hbase
  3. 重启HBase服务,详情请参见重启服务

    在EMR控制台HBase服务的状态页面的组件列表区域,观察HBase服务是否正常启动。