2017-06-12 3 views
0

Ich versuche, eine einfache Karte nur Hadoop-Streaming-Job Lesen von Daten aus HDFs schreiben und schieben es nach Vertica.Oozie Hadoop Streaming

Ich habe einige Shell-Skripte geschrieben, wie unten

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 

Workflow:

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

es mit Oozie Benutzer Lauf nach unten kommen Ausnahme:

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) 

Lösung:

in Workflow hinzufügen:

HADOOP_USER_NAME = $ {wf: user()}

Antwort

1

der Lage, dies zu beheben, durch Zugabe von unten in Workflow.xml

HADOOP_USER_NAME = $ {wf: user()}

0
Permission denied: user=yarn, access=WRITE, inode="/user/yarn/.staging":hdfs:hdfs:drwxr-xr-x 

Impliziert, dass das Verzeichnis /user/yarn/.staging von dem Benutzer gehört hdfs.

Das Verzeichnis verfügt über Berechtigungen rwxr-xr-x was bedeutet, dass nur Benutzer hdfs Zugriff auf Schreibzugriff hat.

Da Ihr Workflow mit dem Benutzer yarn ausgeführt wird, kann er nicht in dieses Verzeichnis schreiben.

Sie können entweder Berechtigungen ändern:

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

Oder geben Sie es Eigentum ist zu yarn mit so etwas wie:

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

Ich führe den Job oozie Benutzer nicht Garn. Ich bin mir nicht sicher, wie es versucht, auf Garn dir zuzugreifen –

+0

Sie laufen einen Hadoop-Streaming-Job – philantrovert

+0

Kann das beheben, indem Sie hinzufügen HADOOP_USER_NAME = $ {wf: user()}

Verwandte Themen