0

HDFS 2.7.1.2.4 および Pig 0.15.0.2.4 (Hortonworks HDP 2.4) でHadoop を使用しており、Spark および Hadoop 用の Google Cloud Storage Connector (GitHub の bigdata-interop) を使用しようとしています。私が試してみると、正しく動作します。

hadoop fs -ls gs://bucket-name

しかし、Pigで(mapreduceモードで)次のことを試すと:

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

Pig は次のエラーで失敗します。

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 を使用しましたか? どんな助けでも歓迎されます。

4

1 に答える 1

1

TL;DRは、豚のジョブを開始するときに明示的に workmapreduce.job.working.dir=/user/root/ を設定します

ジョブの送信時に作業ディレクトリが明示的に設定されていない場合、Hadoop は作業ディレクトリをデフォルトのファイルシステムの作業ディレクトリに設定します。HDFS をデフォルトの FS として使用する場合、作業ディレクトリは通常、「hdfs://namenode:port/user/<your username>」のようなものになります。

PigInputFormat#getSplits が呼び出されると、操作対象の入力のパスに関連付けられた FileSystem がフェッチされます。この場合、ファイルシステムは GoogleHadoopFileSystem のインスタンスです。次に、Pig はその入力のパスを検査し、パスが非ローカルの場合は FileSystem#setWorkingDirectory(job.getWorkingDirectory()) を呼び出します。ここでの問題は、ジョブの作業ディレクトリが 'hdfs://namenode:port/user/<your username>' であることです。これは、GoogleHadoopFileSystem が独自の作業ディレクトリとして設定するパスとして拒否します ('gs:// のみをサポートするため)。 ' パス)。

于 2016-04-14T19:10:26.150 に答える