코알못

[EMR] 해결한 이슈 항목 본문

BIG DATA

[EMR] 해결한 이슈 항목

코린이s 2022. 5. 27. 13:17
728x90

1. INSERT OVERWRITE 쿼리를 hive 에서 돌릴시 s3 에 쓰는 시간이 오래 소요됨 (처리 로그 확인)

- 원인 : s3 rename 의 경우 지우고 삭제하는 개념이라 hdfs 보다 느리다고함

- 해결 :
. hdfs 에 임시 파일 쓰도록 하는 옵션 추가

. thread 갯수 늘리는 옵션 추가

set hive.blobstore.optimizations.enabled=true;
set fs.s3.threadpool.size=5000;
set fs.s3.threadpool.maxSize=5000;
set fs.s3.maxConnections=5000;
set hive.emr.use.hdfs.as.scratch.dir=true;
set hive.exec.input.listing.max.threads=1000;
set mapreduce.input.fileinputformat.list-status.num-threads=5000;
set hive.mv.files.thread=1000;
set hive.exec.max.dynamic.partitions.pernode=100000;
set hive.exec.max.dynamic.partitions=100000;
set mapred.reduce.tasks=10;
set hive.exec.dynamic.partition.mode=true;

2. EMR 에서 200GB 이상인 데이터 관련 쿼리 돌릴시 오류 발생

Caused by: org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /tmp/hive/hadoop/fb238759-7f3a-4e48-9e64-2225ca9031a8/hive_2022-05-27_03-49-39_244_3569868551559928696-1/_task_tmp.-mr-10000/yyyy=2018/mm=04/dd=20/_tmp.000016_0 could only be written to 0 of the 1 minReplication nodes. There are 3 datanode(s) running and 3 node(s) are excluded in this operation.

- 원인 : hdfs 디스크 부족 

- 해결 : core node 를 늘려 디스크 확보

3. EMR 생성시 S3 를 찾지 못하는 이슈

On the master instance, application provisioning failed. Master instance failed attempting to download bootstrap action 1 file from S3.

- 원인 : EMR 프라이빗 서브넷으로 구성하여 S3 를 찾지 못하여 발생(프라이빗 서브넷으로 IGW, NAT 설정도 되어 있지 않아 S3와 통신 불가능)

- 해결 : 

프라이빗 서브넷에서 Amazon EMR 클러스터를 설정할 때 Amazon S3용 VPC 엔드포인트를 설정해야합니다. [1]
 
EMR 클러스터가 Amazon S3용 VPC 엔드포인트가 없는 프라이빗 서브넷에 있는 경우,
EMR 클러스터와 S3 간의 트래픽이 VPC 내에 유지되지 않기 때문에 S3 트래픽과 연결된 추가 NAT 게이트웨이 요금이 발생합니다.
 
최소한 Amazon S3의 Amazon EMR 서비스 로그 버킷 및 Amazon Linux 리포지토리에 대한 경로를 제공해야 합니다. [2]
 
[참고문서 1] : https://docs.aws.amazon.com/emr/latest/ManagementGuide/private-subnet-iampolicy.html
[참고문서 2] : https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-clusters-in-a-vpc.html

[1] VPC 접속 > 엔드포인트 클릭

[2] 엔드포인트 생성  클릭

[3] 이름 설정 > s3 검색 > gateway 형태 선택

[4] EMR 이 속하는 VPC, 라우팅 선택

[5] 엔드 포인트 생성 클릭

사용 가능 상태가 되면 완료!

4. hive metastore 를 glue 선택후 구성시 hive 에서 glue 연결 관련 발생 에러

Caused by: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: com.amazonaws.SdkClientException: Unable to execute HTTP request: Connect to glue.ap-northeast-2.amazonaws.com:443 [glue.ap-northeast-2.amazonaws.com/x.x.x.x, glue.ap-northeast-2.amazonaws.com/x.x.x.x

 

- 해결 : 세 항목 중 한가지를 선택하여 라우팅 테이블에 추가하시면 오류가 해결될 것으로 보입니다.

  1. 인터넷 게이트웨이(IGW)
  2. NAT게이트웨이
  3. Glue 엔드포인트 [1]

[참고문서 1] : https://docs.aws.amazon.com/ko_kr/glue/latest/dg/vpc-interface-endpoints.html

 

AWS Glue 및 인터페이스 VPC 엔드포인트(AWS PrivateLink) - AWS Glue

AWS Glue 및 인터페이스 VPC 엔드포인트(AWS PrivateLink) 인터페이스 VPC 종단점을 생성하여 VPC와 AWS Glue 간에 프라이빗 연결을 설정할 수 있습니다. 인터페이스 엔드포인트는 인터넷 게이트웨이, NAT 디

docs.aws.amazon.com

저자의 경우 엔드 포인트 생성하여 해결 (생성시 VPC, 서브넷은 EMR 이 속한 범주로 선택)

5. hive 많은 파티션 생성 작업 진행시 INSERT OVERWRITE 안되는 이슈

- 해결 :

1. 현재 4vCPU와 16GB메모리를 가진 m5.xlarge를 사용하고 있는데,

이보다 큰 16vCPU와 64GB메모리를 가진 m5.4xlarge로 시도하는 방법.

2. 다음과 같이, reducer의 수를 늘리는 방법.

==============================

예시 : SET mapred.reduce.task = 8

==============================

3. Apache Hive의 일부 기본 동작은 Amazon S3에 저장된 테이블의 데이터를 읽고 쓸 때 성능이 저하될 수 있어,

[문서 1]을 보고 귀사에 맞게 파라미터를 튜닝하여 사용하는 방법

4. 다음과 같이, 일부 blobstore 구성 속성을 사용하여, Amazon S3와 같은 blobstore 시스템에 저장된 테이블로 작업하는 방법

- hive.blobstore.optimizations.enabled 을 true로 설정하면, 이 파라미터는 S3에서 직접 스크래치 디렉터리를 사용할 수 있습니다.

- hive.blobstore.use.blobstore.as.scratchdir 을 true로 설정하면, 스토리지 시스템에서 직접 스크래치 디렉토리를 사용할 수 있습니다.

 이러한 구성 속성에 대한 자세한 내용은 맨 아래에 첨부 드린 문서 1, 2를 참조하고, 데이터의 사용 사례 및 크기에 따라 설정하시기 바랍니다.

5. VIEW를 사용하여, 표를 더 빨리 쿼리하는 방법

[참고 문서 1] : https://docs.cloudera.com/documentation/enterprise/latest/topics/admin_hive_on_s3_tuning.html
[참고 문서 2] : https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties#ConfigurationProperties-Blobstore(i.e.AmazonS3)

 

Configuration Properties - Apache Hive - Apache Software Foundation

 

cwiki.apache.org

참고 옵션

hive> set hive.blobstore.optimizations.enabled=true;
hive> set fs.s3.threadpool.size=5000;
hive> set fs.s3.threadpool.maxSize=5000;
hive> set fs.s3.maxConnections=5000;
hive> set hive.emr.use.hdfs.as.scratch.dir=true;
hive> set hive.exec.input.listing.max.threads=5000;
Query returned non-zero code: 1, cause: 'SET hive.exec.input.listing.max.threads=5000' FAILED in validation : 5000 is bigger than 1Kb.
hive> set mapreduce.input.fileinputformat.list-status.num-threads=5000;
hive> set hive.mv.files.thread=1000;
hive> set hive.exec.max.dynamic.partitions.pernode=100000;
hive> set hive.exec.max.dynamic.partitions=100000;
hive> set hive.exec.dynamic.partition.mode=true;
hive> set mapred.reduce.tasks=10;

6. EMR 메타 스토어 RDS 구성시 데이터베이스, 테이블 정보는 확인 가능하나 데이터 조회시 아래 오류 발생

 'SdkClientException: Unable to load AWS credentials from any provider in the chain'

 - 해결:

EMR 버전 6.3.1 사용중이였으나 6.5.0 으로 버전업하여 해결 (6.3.1 버전 버그로 확인) 

728x90
Comments