[HADOOP] 로컬 Hadoop 2.6 설치에서 S3 / S3n에 어떻게 액세스합니까?
HADOOP로컬 Hadoop 2.6 설치에서 S3 / S3n에 어떻게 액세스합니까?
내 로컬 컴퓨터에서 Amazon EMR 클러스터를 재현하려고합니다. 이를 위해 2.6.0 버전의 최신 Hadoop 안정 버전을 설치했습니다. 이제 EMR 클러스터 내부에서 수행하는 것처럼 S3 버킷에 액세스하려고합니다.
core-site.xml에 aws 자격 증명을 추가했습니다.
<property>
<name>fs.s3.awsAccessKeyId</name>
<value>some id</value>
</property>
<property>
<name>fs.s3n.awsAccessKeyId</name>
<value>some id</value>
</property>
<property>
<name>fs.s3.awsSecretAccessKey</name>
<value>some key</value>
</property>
<property>
<name>fs.s3n.awsSecretAccessKey</name>
<value>some key</value>
</property>
참고 : 키에 슬래시가 있기 때문에 % 2F를 사용하여 이스케이프 처리했습니다.
버킷의 내용을 나열하려고하면 다음과 같이하십시오.
hadoop fs -ls s3://some-url/bucket/
이 오류가 발생합니다.
ls : 계획에 대한 FileSystem 없음 : s3
core-site.xml을 다시 편집하고 fs :
<property>
<name>fs.s3.impl</name>
<value>org.apache.hadoop.fs.s3.S3FileSystem</value>
</property>
<property>
<name>fs.s3n.impl</name>
<value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value>
</property>
이번에는 다른 오류가 발생합니다.
-ls: Fatal internal error
java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3.S3FileSystem not found
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2074)
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2578)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2591)
어떻게 든 원사 배포에는 S3을 읽을 수있는 필요한 항아리가 없다고 생각되지만 어디에서 가져올 수 있는지 잘 모릅니다. 이 방향의 모든 포인터는 크게 감사 할 것입니다.
해결법
-
==============================
1.어떤 이유로, NativeS3FileSystem에 대한 구현을 포함하는 jar hadoop-aws- [version] .jar은 버전 2.6 및 2.7에서 기본적으로 hadoop 클래스 경로에 존재하지 않습니다. 따라서 $ HADOOP_HOME / etc / hadoop / hadoop-env.sh에있는 hadoop-env.sh에 다음 행을 추가하여 classpath에 추가하십시오.
어떤 이유로, NativeS3FileSystem에 대한 구현을 포함하는 jar hadoop-aws- [version] .jar은 버전 2.6 및 2.7에서 기본적으로 hadoop 클래스 경로에 존재하지 않습니다. 따라서 $ HADOOP_HOME / etc / hadoop / hadoop-env.sh에있는 hadoop-env.sh에 다음 행을 추가하여 classpath에 추가하십시오.
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/tools/lib/*
그런데 다음을 사용하여 Hadoop의 클래스 경로를 확인할 수 있습니다.
bin/hadoop classpath
-
==============================
2.
import os os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages com.amazonaws:aws-java-sdk:1.10.34,org.apache.hadoop:hadoop-aws:2.6.0 pyspark-shell' import pyspark sc = pyspark.SparkContext("local[*]") from pyspark.sql import SQLContext sqlContext = SQLContext(sc) hadoopConf = sc._jsc.hadoopConfiguration() myAccessKey = input() mySecretKey = input() hadoopConf.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem") hadoopConf.set("fs.s3.awsAccessKeyId", myAccessKey) hadoopConf.set("fs.s3.awsSecretAccessKey", mySecretKey) df = sqlContext.read.parquet("s3://myBucket/myKey")
-
==============================
3.@ Ashrith의 답변은 한 가지 수정으로 저에게 효과적이었습니다. 우분투에서 v2.6을 실행할 때 $ HADOOP_HOME 대신 $ HADOOP_PREFIX를 사용해야했습니다. 아마도 이것은 $ HADOOP_HOME이 사용되지 않는 것처럼 들리기 때문입니다.
@ Ashrith의 답변은 한 가지 수정으로 저에게 효과적이었습니다. 우분투에서 v2.6을 실행할 때 $ HADOOP_HOME 대신 $ HADOOP_PREFIX를 사용해야했습니다. 아마도 이것은 $ HADOOP_HOME이 사용되지 않는 것처럼 들리기 때문입니다.
HADOOP_CLASSPATH = $ HADOOP_CLASSPATH를 내 보냅니다. $ {HADOOP_PREFIX} / share / hadoop / tools / lib / *
그런 말로하면, 내 컴퓨터에서 Homebrew를 통해 v2.6을 설치 한 적이 없다. 이 경우, 나는이 매우 냉담한 수출을 사용하고 있습니다 :
HADOOP_CLASSPATH = $ HADOOP_CLASSPATH를 출력합니다. $ (brew --prefix hadoop) / libexec / share / hadoop / tools / lib / *
-
==============================
4.이 문제를 해결하기 위해 위의 모든 것을 시도했는데 실패했습니다 (어쨌든 내 환경 용).
이 문제를 해결하기 위해 위의 모든 것을 시도했는데 실패했습니다 (어쨌든 내 환경 용).
그러나 나는 위에서 언급 한 두 개의 jar 파일을 도구 디렉토리에서 common / lib로 복사함으로써 작동시킬 수있었습니다.
그 후 잘 했어.
-
==============================
5.HDP 2.x 이상을 사용하는 경우 Ambari의 MapReduce2 구성 설정에서 다음 속성을 수정 해 볼 수 있습니다.
HDP 2.x 이상을 사용하는 경우 Ambari의 MapReduce2 구성 설정에서 다음 속성을 수정 해 볼 수 있습니다.
mapreduce.application.classpath
기존 문자열의 끝에 다음 값을 추가하십시오.
/usr/hdp/${hdp.version}/hadoop-mapreduce/*
from https://stackoverflow.com/questions/28029134/how-can-i-access-s3-s3n-from-a-local-hadoop-2-6-installation by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 값을 두 번 반복 (MapReduce) (0) | 2019.05.29 |
---|---|
[HADOOP] hadoop의 MultipleOutputFormat (0) | 2019.05.29 |
[HADOOP] .txt 파일을 Hadoop의 시퀀스 파일 형식으로 변환하는 방법 (0) | 2019.05.29 |
[HADOOP] 원사 개념 이해에 촉발 (0) | 2019.05.29 |
[HADOOP] Apache Spark에서 s3a : // 파일에 액세스하는 방법? (0) | 2019.05.29 |