2016-04-13 18 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のモードで)豚に次しようとすると:

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 

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

豚は、次のエラーで失敗します

必要に応じてGCコネクタのログを投稿できます。

誰かがこのコネクタで豚を使用しましたか?どんな援助も訴えられるでしょう。

+0

豚のジョブを実行するときは、mapred.working.dir =/user/rootを設定してみてください。 Hadoopのジョブconfによるデフォルトの計算は、作業ディレクトリがデフォルトのfsであることを前提としています。その後、Pigは非ローカルファイルシステムについて仮定します。 –

+0

@AngusDavis、素晴らしい、それは問題を解決しました! 1つの注意:mapred.working.dirは廃止予定です。代わりにmapreduce.job.working.dirを使用しました。答えとして追加してください。それはなぜ機能するのですか? "/ user/root"文字列に明示的なfsはありません。Pigはどうやって正しい仮定をしていますか?とりあえずありがとう! – sckol

答えて

1

TLは、DR明示的に設定workmapreduce.job.working.dir = /ユーザー/ルート/豚ジョブ

を開始するときに作業ディレクトリを明示的にジョブ投入時に設定されていない場合は、Hadoopのが設定されます作業ディレクトリをデフォルトのファイルシステムの作業ディレクトリにします。あなたのデフォルトFSとしてHDFSを使用するとき、作業ディレクトリは一般に 'hdfs:// namenode:port/user/<あなたのユーザ名>'のようなものです。

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

関連する問題