【问题标题】:Oozie Hadoop StreamingOozie Hadoop 流式处理
【发布时间】:2019-07-30 22:04:38
【问题描述】:

我正在尝试编写一个仅映射简单的 hadoop 流作业,从 hdfs 读取数据并将其推送到 vertica。

我写了几个shell脚本如下

加载.sh

  hadoop jar hadoop-streaming-2.7.3.2.5.3.0-37.jar -input $INPUT_DIR -mapper /user/oozie/adhoc_data_load/scripts/export.sh -output $OUTPUT_DIR

export.sh

 ./vsql -c "copy $TABLE from stdin delimiter E'\t' direct null '\\N';" -U $DBUSER -w $DBPWD -h $DBHOST -p $DBPORT

工作流程:

<action name="loadToVertica">
    <shell xmlns="uri:oozie:shell-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <exec>loadVertica.sh</exec>
            <argument>${STREAMING_JAR_PATH}</argument>
            <argument>${nameNode}/user/oozie/optus_adhoc_data/${exportDataDate}</argument>
            <argument>${TABLE_NAME_VERTICA}</argument>
            <argument>${dbHost}</argument>
            <argument>${dbName}</argument>
            <argument>${dbPassword}</argument>
            <argument>${dbPort}</argument>
            <argument>${nameNode}/user/oozie/optus_adhoc_data/output/${exportDataDate}</argument>
            <argument>vsql,export.sh</argument>
            <file>${nameNode}/user/oozie/adhoc_data_load/scripts/loadVertica.sh#loadVertica.sh</file>
            <file>${wfsBasePath}/libs/${STREAMING_JAR_PATH}#${STREAMING_JAR_PATH}</file>
            <file>${wfsBasePath}/config/vsql#vsql</file>
            <file>${wfsBasePath}/scripts/export.sh#export.sh</file>
            <capture-output/>
        </shell>
        <ok to="end"/>
       <error to="end"/>
    </action>

在 Oozie 用户出现以下异常的情况下运行它:

org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=yarn, access=WRITE, inode="/user/yarn/.staging":hdfs:hdfs:drwxr-xr-x
        at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:319)

解决方案:

添加工作流:

HADOOP_USER_NAME=${wf:user()}

【问题讨论】:

    标签: hadoop oozie hadoop-streaming


    【解决方案1】:

    可以通过在 Workflow.xml 中添加以下内容来解决此问题

    HADOOP_USER_NAME=${wf:user()}

    【讨论】:

      【解决方案2】:
      Permission denied: user=yarn, access=WRITE, inode="/user/yarn/.staging":hdfs:hdfs:drwxr-xr-x
      

      暗示目录/user/yarn/.staging归用户hdfs所有。

      目录有权限rwxr-xr-x,这意味着只有用户hdfs有写权限。

      由于您的工作流是使用用户 yarn 执行的,因此无法写入该目录。

      您可以更改权限:

      hdfs dfs -chmod -R 777 /user/yarn/
      

      或者将其所有权授予yarn,例如:

      sudo -u hdfs hdfs dfs -chown yarn:yarn /user/yarn
      

      【讨论】:

      • 我运行的是 oozie 用户而不是纱线。我不确定它是如何尝试访问纱线目录的
      • 您正在运行一个 hadoop 流式作业
      • 可以通过添加 HADOOP_USER_NAME=${wf:user()} 来解决这个问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多