2017-06-12 77 views
0

我想寫一個簡單的地圖只有hadoop流作業從hdfs讀取數據並將其推送到vertica。Oozie Hadoop Streaming

我已經寫了幾個shell腳本如下

load.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:用戶()}

回答

1

能夠通過添加以下Workflow.xml

HADOOP_USER_NAME解決這個問題= $ {wf:user()}

0
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 
+0

我正在運行oozie用戶而不是紗線。我不確定它是如何嘗試訪問紗線dir –

+0

您正在運行hadoop streaming作業 – philantrovert

+0

可以通過添加 HADOOP_USER_NAME = $ {wf:user()}

相關問題