9

로컬 컴퓨터에 Google 허브 저장소 (예 : gs : //storage.googleapis.com/)를 사용하여 Google 클라우드 저장소에서 파일을 읽습니다. https://cloud.google.com/dataproc/docs/connectors/cloud-storageGSC 커넥터를 사용하여 Google 스토리지 파일을 연결할 수 없습니다.

컴퓨팅 계정 및 저장 권한이있는 서비스 계정 을 설정했습니다. 내 스파크 구성 및 코드 나 또한 키 파일을 가리키는 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) 

내가, 자바 8 일식에서 내 작업을 실행 2.2.0 종속성 및 GCS 커넥터 1.6.1.hadoop2을 촉발하고있다. OAuth 메커니즘이 아닌 서비스 계정을 통해서만 연결해야합니다.

미리 감사드립니다.

+0

는 대신 sparkContext.hadoopConfiguration''에서 매개 변수를 설정하려고 되세요' SparkConf'? –

답변

0

로컬로 시도 하시겠습니까? 예 다음 당신은 당신의 key.jsonGOOGLE_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");