2016-04-13 48 views
0

我使用HDFS 2.7.1.2.4和Pig 0.15.0.2.4(Hortonworks HDP 2.4)的Hadoop並嘗試使用Google Cloud Storage Connector for Spark and Hadoop(GitHub上的bigdata-interop) 。它工作正常,當我嘗試,比方說,用於Hadoop的Google Cloud連接器不適用於Pig

hadoop fs -ls gs://bucket-name 

但是當我嘗試在豬以下內容(的MapReduce模式):

data = LOAD 'gs://softline/o365.avro' USING AvroStorage(); 
data = STORE data INTO 'gs://softline/o366.avro' USING AvroStorage(); 

豬失敗,出現以下錯誤:

org.apache.pig.backend.executionengine.ExecException: ERROR 2118: Wrong FS scheme: hdfs, in path: hdfs://hdp.slweb.ru:8020/user/root, expected scheme: gs 
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigInputFormat.getSplits(PigInputFormat.java:279) 
    at org.apache.hadoop.mapreduce.JobSubmitter.writeNewSplits(JobSubmitter.java:301) 
    at org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:318) 
    at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:196) 
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290) 
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:422) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657) 
    at org.apache.hadoop.mapreduce.Job.submit(Job.java:1287) 
    at org.apache.hadoop.mapreduce.lib.jobcontrol.ControlledJob.submit(ControlledJob.java:335) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.apache.pig.backend.hadoop23.PigJobControl.submit(PigJobControl.java:128) 
    at org.apache.pig.backend.hadoop23.PigJobControl.run(PigJobControl.java:194) 
    at java.lang.Thread.run(Thread.java:745) 
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher$1.run(MapReduceLauncher.java:276) 
Caused by: java.lang.IllegalArgumentException: Wrong FS scheme: hdfs, in path: hdfs://hdp.slweb.ru:8020/user/root, expected scheme: gs 
    at com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystemBase.checkPath(GoogleHadoopFileSystemBase.java:741) 
    at com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem.checkPath(GoogleHadoopFileSystem.java:90) 
    at org.apache.hadoop.fs.FileSystem.makeQualified(FileSystem.java:466) 
    at com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystemBase.makeQualified(GoogleHadoopFileSystemBase.java:701) 
    at com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem.getGcsPath(GoogleHadoopFileSystem.java:163) 
    at com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystemBase.setWorkingDirectory(GoogleHadoopFileSystemBase.java:1094) 
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigInputFormat.getSplits(PigInputFormat.java:235) 
    ... 18 more 

如果需要,我可以發佈GC連接器的日誌。

Hame有人用Pig連接器?任何幫助將被解僱。

+0

運行豬工作時,嘗試設置mapred.working.dir =/user/root。通過Hadoop的Job conf來計算默認值,假設工作目錄應該在默認的fs上。然後,豬對非本地文件系統做出假設。 –

+0

@AngusDavis,太棒了,它解決了問題!一個注意:mapred.working.dir現在已被棄用。我已經使用mapreduce.job.working.dir。你能否將其添加爲答案?爲什麼它有效? 「/ user/root」字符串中沒有顯式的fs,Pig現在如何做出正確的假設?不管怎樣,謝謝! – sckol

回答

1

TL; DR明確設置workmapreduce.job.working.dir = /用戶/根/開始養豬工作

時,如果工作目錄尚未明確作業提交過程中設置的Hadoop然後將設置工作目錄是默認文件系統的工作目錄。當使用HDFS作爲您的默認FS時,工作目錄通常是'hdfs:// namenode:port/user/<您的用戶名>'。

當調用PigInputFormat#getSplits時,它將獲取與正在操作的輸入路徑關聯的FileSystem。在這種情況下,文件系統是GoogleHadoopFileSystem的一個實例。然後Pig檢查其輸入的路徑,如果路徑是非本地調用FileSystem#setWorkingDirectory(job.getWorkingDirectory())。這裏的問題在於作業的工作目錄是'hdfs:// namenode:port/user/<您的用戶名>',GoogleHadoopFileSystem會拒絕它作爲自己工作目錄的路徑(因爲它只支持'gs:// '路徑)。

相關問題