9

私のローカルマシンにgoogleのハングアウトコネクタを使用してGoogle Cloud Storageからファイルを読み込みました。gs://storage.googleapis.com/ as https://cloud.google.com/dataproc/docs/connectors/cloud-storageGSCコネクタを使用してSparkのGSCコネクタを使用することができません

私はサービスアカウントにコンピューティングエンジンとストレージのアクセス許可を設定しました。 マイスパーク構成とコードが、私はまた、キーファイルを指すGOOGLE_APPLICATION_CREDENTIALSという名前の環境変数を設定している

SparkConf conf = new SparkConf(); 
conf.setAppName("SparkAPp").setMaster("local"); 
conf.set("google.cloud.auth.service.account.enable", "true"); 
conf.set("google.cloud.auth.service.account.email", "[email protected]"); 
conf.set("google.cloud.auth.service.account.keyfile", "/root/Documents/xxx-compute-e71ddbafd13e.p12"); 
conf.set("fs.gs.project.id", "xxx-990711"); 
conf.set("fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem"); 
conf.set("fs.AbstractFileSystem.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem"); 

SparkContext sparkContext = new SparkContext(conf); 
JavaRDD<String> data = sparkContext.textFile("gs://storage.googleapis.com/xxx/xxx.txt", 0).toJavaRDD(); 
data.foreach(line -> System.out.println(line)); 

です。両方のキーファイル、すなわちjson & P12を使用して試しました。しかし、ファイルにアクセスできません。私が手 エラーが

java.net.UnknownHostException: metadata 
java.io.IOException: Error getting access token from metadata server at: http://metadata/computeMetadata/v1/instance/service-accounts/default/token 
     at com.google.cloud.hadoop.util.CredentialFactory.getCredentialFromMetadataServiceAccount(CredentialFactory.java:208) 
     at com.google.cloud.hadoop.util.CredentialConfiguration.getCredential(CredentialConfiguration.java:70) 

である私は2.2.0依存関係とGCS-コネクタ1.6.1.hadoop2の火付け役、Javaの8で日食の私の仕事を実行しています。 OAuthメカニズムではなく、サービスアカウントを使用して接続する必要があります。

ありがとうございます。

+0

あなたはsparkContext.hadoopConfiguration' 'であなたのパラメータを設定する代わりに、'しようとしたことがありSparkConf'? –

答えて

0

ローカルで試していますか?はい、あなたはあなたのkey.jsonに環境変数GOOGLE_APPLICATION_CREDENTIALSを設定するかのようなSparkConfに設定するのではなく、HadoopConfigurationに設定する必要がある場合:

Configuration hadoopConfiguration = sparkContext.hadoopConfiguration(); 
    hadoopConfiguration.set("google.cloud.auth.service.account.enable", true); 
    hadoopConfiguration.set("google.cloud.auth.service.account.email", "[email protected]"); 
    hadoopConfiguration.set("google.cloud.auth.service.account.keyfile", "/root/Documents/xxx-compute-e71ddbafd13e.p12"); 
関連する問題