0

내가 만든 클러스터의 Google dataproc을 통해 pyspark 애플리케이션을 실행 중입니다. 한 단계에서 애플리케이션은 Amazon S3 디렉토리의 디렉토리에 액세스해야합니다. 이 단계에서 오류가 발생합니다.Google의 데이터 파이프에서 S3 데이터 읽기

AWS 액세스 키 ID 및 비밀 키는 s3 URL의 사용자 이름 또는 비밀번호로 각각 지정하거나 fs.s3.awsAccessKeyId 또는 fs.s3을 설정하여 지정해야합니다. .awsSecretAccessKey 속성 (각각).

클러스터의 헤드 노드에 로그온하고 AWS_ACCESS_KEY_ID 및 AWS_SECRET_ACCESS_KEY 정보로 /etc/boto.cfg를 설정했지만 액세스 문제가 해결되지 않았습니다.

(1) dataproc 클러스터에서 AWS S3에 액세스하는 방법에 대한 다른 제안 사항이 있습니까?

(2) 또한 dataproc이 클러스터에 액세스하는 데 사용하는 사용자의 이름은 무엇입니까? 내가 알면, 해당 사용자의 클러스터에서 ~/.aws 디렉토리를 설정할 수 있습니다.

감사합니다.

+0

당신은'awscli'와 같은 것을 사용하기 위해 일을하고 있습니다. 아니면 일반적인 Spark/Hadoop FileSystem 인터페이스를 통해 S3에 액세스하고 있습니까? –

+0

정상적인 스파크 인터페이스를 통해 s3에 액세스합니다. 기본적으로 AWS_ACCESS_KEY_ID 및 AWS_SECRET_ACCESS_KEY를 설정 한 다음 sc.textFile (s3_path)을 실행하고 카운트를 얻으려고합니다. – Eka

답변

0

sparkContext를 초기화하는 동안 AWS config를 설정할 수 있습니다.

conf = < your SparkConf()> 
sc = SparkContext(conf=conf) 
sc.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", <s3AccessKey>) 
sc.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", <s3SecretKey>) 
+0

오류가 발생합니다. AttributeError : 'SparkContext'객체에 'hadoopConfiguration'속성이 없습니다. 이 직업은 뾰족하지 않은 불꽃 놀이입니다. 거기 hadoop 없이이 설정을 설정하는 방법이 있습니까? – Eka

2

당신은 하둡/스파크 인터페이스를 사용하고 있기 때문에이 (같은 sc.textFile는) 모든 것이 참으로 오히려 어떤 ~/.aws 또는 /etc/boto.cfg 설정을 통해 와이어를 시도보다 fs.s3.* 또는 fs.s3n.* 또는 fs.s3a.* 키를 통해 수행해야합니다. 클러스터 작성시

: 귀하 통해 Dataproc 클러스터로 당신을 통해 이러한 설정을 측량 할 수있는 몇 가지 방법이 있습니다

gcloud dataproc clusters create --properties \ 
    core:fs.s3.awsAccessKeyId=<s3AccessKey>,core:fs.s3.awsSecretAccessKey=<s3SecretKey> \ 
    --num-workers ... 

core 접두사 여기 당신이 설정 한, core-site.xml 파일에 배치도록합니다 Cluster Properties documentation에서 설명합니다. 당신이 Dataproc에서의 API를 사용하는 경우

또는 작업 제출시,이 경우

gcloud dataproc jobs submit pyspark --cluster <your-cluster> \ 
    --properties spark.hadoop.fs.s3.awsAccessKeyId=<s3AccessKey>,spark.hadoop.fs.s3.awsSecretAccessKey=<s3SecretKey> \ 
    ... 

을, 우리는 스파크의 건물에서 등록 정보를 전달하는, 및 스파크 정의하는 편리한 메커니즘을 제공합니다 "hadoop"conf 속성을 간단히 spark.hadoop.* 접두어로 사용하여 Spark conf의 하위 집합으로 만듭니다. 당신은 클러스터 작성시에 그것을 설정하고 싶지만 액세스 키를 명시 적으로 통해 Dataproc에서 설정하지 않으려면,

spark-submit --conf spark.hadoop.fs.s3.awsAccessKeyId=<s3AccessKey> \ 
    --conf spark.hadoop.fs.s3.awsSecretAccessKey=<s3SecretKey> 

마지막 : SSH을 통해 명령 줄에서 제출하는 경우,이 동일합니다 메타 데이터를 사용하는 대신 initialization action을 대신 사용할 수 있습니다.

#!/bin/bash 
# Create this shell script, name it something like init-aws.sh 
bdconfig set_property \ 
    --configuration_file /etc/hadoop/conf/core-site.xml \ 
    --name 'fs.s3.awsAccessKeyId' \ 
    --value '<s3AccessKey>' \ 
    --clobber 
bdconfig set_property \ 
    --configuration_file /etc/hadoop/conf/core-site.xml \ 
    --name 'fs.s3.awsSecretAccessKey' \ 
    --value '<s3SecretKey>' \ 
    --clobber 

어딘가 GCS 버킷에 그 업로드 및 클러스터 작성시에 사용 :

gsutil cp init-aws.sh gs://<your-bucket>/init-aws.sh 
gcloud dataproc clustres create --initialization-actions \ 
    gs://<your-bucket>/init-aws.sh 
쉽게 XML 설정을 수정할 수있는 경로에 존재해야 bdconfig라는 편리한 도구가있다

Dataproc 메타 데이터는 실제로는 다른 모든 사용자 데이터와 마찬가지로 안전하게 암호화되고 다른 사용자 데이터와 마찬가지로 안전하게 보호되지만 init 액션을 사용하면 실수로 Dataproc 클러스터 속성을 볼 때 화면 뒤에서 누군가에게 액세스 키/암호가 표시되는 것을 방지 할 수 있습니다.

+0

여기 환상적인 정보! 고마워요, 데니스! – Eka

관련 문제