2017-08-07 46 views
1

由於各種原因,我在使用AMI 2.4.11/Hadoop 1.0.3的EMR上運行一些作業。我試圖通過添加額外的EMR步驟在作業之後運行HDFS清理。使用博託:從Hadoop 1.0.3中的AWS EMR上的HDFS清除數據

step = JarStep(
     'HDFS cleanup', 
     'command-runner.jar', 
     action_on_failure='CONTINUE', 
     step_args=['hadoop', 'dfs', '-rmr', '-skipTrash', 'hdfs:/tmp']) 
    emr_conn.add_jobflow_steps(cluster_id, [step]) 

然而,它經常失敗,在EMR控制檯中沒有任何stderr。 爲什麼我很困惑是,如果我ssh到主節點,並運行以下命令:

hadoop dfs -rmr -skipTrash hdfs:/tmp

它成功與它成功刪除一切0和消息。所有正常的hadoop命令似乎都像記錄一樣工作。有誰知道這是否有明顯的原因?問題與亞馬遜分銷?未記錄在某些命令中的行爲?

注: 我在Hadoop中2運行的其他就業和記載:

hdfs dfs -rm -r -skipTrash hdfs:/tmp

作品正如人們所期望既是一個步驟,並且爲命令。

回答

0

我的解決辦法通常是升級一切Hadoop2,在這種情況下,這個工程:

 JarStep(
      '%s: HDFS cleanup' % self.job_name, 
      'command-runner.jar', 
      action_on_failure='CONTINUE', 
      step_args=['hdfs', 'dfs', '-rm', '-r', '-skipTrash', path] 
     ) 

這是最好的,我可以用Hadoop1拿到工作得很好。

 JarStep(
      '%s: HDFS cleanup' % self.job_name, 
      'command-runner.jar', 
      action_on_failure='CONTINUE', 
      step_args=['hadoop', 'fs', '-rmr', '-skipTrash', 
         'hdfs:/tmp/mrjob'] 
     )