Hive on AWS EMR

Hive on AWS EMR (Amazon Elastic MapReduce)

Amazon Elastic MapReduce는 AWS의 웹 규모 인프라에서 관리형·크기 조정 가능한 Hadoop 클러스터를 쉽게 실행하게 해주는 웹 서비스예요. Hive와 Hadoop 클러스터를 손쉽게 띄우고, 클러스터 크기를 유연하게 선택하며, 처리가 끝나면 자동으로 정리해주기 때문에 사용한 리소스에 대해서만 비용을 지불할 수 있답니다.

출처: 문서

본문

Amazon Elastic MapReduce와 Hive

Amazon Elastic MapReduce는 AWS(Amazon Web Services)의 웹 규모 인프라에서 관리형이며 크기 조정 가능한 Hadoop 클러스터를 쉽게 실행하게 해주는 웹 서비스예요. Elastic Map Reduce는 Hive와 Hadoop 클러스터를 쉽게 시작하게 해주고, 다양한 클러스터 크기를 선택하는 유연성을 주며, 처리가 완료되면 자동으로 클러스터를 정리할 수 있게 해줘요. 최소 요금이나 장기 약정 없이 사용한 리소스에 대해서만 비용을 지불해요.

Amazon Elastic MapReduce는 다음과 같은 방식으로 Hive 클러스터 사용을 단순화해요:

  1. 수천 개의 EC2 인스턴스로 구성된 Hadoop 클러스터의 프로비저닝 처리
  2. 클러스터의 마스터/슬레이브 노드에 Hadoop 설치 및 선택한 하드웨어에 따른 Hadoop 구성
  3. 클러스터의 마스터 노드에 Hive를 설치하고 Hadoop JobTracker 및 NameNode와 통신하도록 구성
  4. 클러스터 수명 동안 Hadoop 태스크를 관리·모니터링·디버깅하기 위한 간단한 API, 웹 UI, 목적 특화 도구 제공
  5. S3 및 EC2 같은 AWS 서비스와 Spot Instances, Elastic IPs, IAM(Identity and Access Management) 같은 AWS 기능과의 심층 통합 및 최적화된 성능 제공

Amazon Elastic MapReduce 시작 가이드는 다음 링크를 참고해요:

Getting Started

Amazon Elastic MapReduce는 Hive 클러스터를 실행할 여러 클라이언트를 제공해요. AWS Management Console, Amazon Elastic MapReduce Ruby Client, 또는 AWS Java SDK로 Hive 클러스터를 실행할 수 있어요. 또한 같은 클러스터에 여러 버전의 Hive를 설치·실행할 수 있어서, 이전 버전과 나란히 더 새로운 Hive 버전을 벤치마킹할 수 있어요. 기존 Hive 클러스터에 더 새로운 Hive 버전을 직접 설치할 수도 있어요.

지원 버전 (Supported versions):

EMR 버전 Hive 버전
emr-7.0.0 3.1.3
emr-6.15.0 3.1.3
emr-5.36.1 2.3.9

Hive 기본값 (Hive Defaults)

Thrift 통신 포트

Hive 버전 Thrift 포트
0.4 10000
0.5 10000
0.7 10001
0.7.1 10002

로그 파일 (Log File)

Hive 버전 로그 위치
0.4 /mnt/var/log/apps/hive.log
0.5 /mnt/var/log/apps/hive_05.log
0.7 /mnt/var/log/apps/hive_07.log
0.7.1 /mnt/var/log/apps/hive_07_1.log

MetaStore

기본적으로 Amazon Elastic MapReduce는 마스터 노드에 미리 설치된 MySQL을 Hive metastore로 사용해요. 대안으로 Amazon Relational Database Service(Amazon RDS)를 사용해 metastore를 클러스터 수명 이후에도 영속시킬 수 있어요. 이렇게 하면 여러 Hive 클러스터가 metastore를 공유할 수도 있어요. MySQL 데이터베이스의 기본 위치를 외부 영구 저장 위치로 재정의하면 돼요.

Hive CLI

EMR은 마스터 노드가 SSH 접근을 허용하도록 구성해요. 마스터 노드에 로그인해 Hive CLI로 Hive 명령을 실행할 수 있어요. 클러스터에 여러 버전의 Hive가 설치되어 있다면 각각을 별도의 명령으로 접근할 수 있어요:

Hive 버전 Hive 명령
0.4 hive
0.5 hive-0.5
0.7 hive-0.7
0.7.1 hive-0.7.1

EMR은 주어진 클러스터에서 설치된 각 Hive 버전에 대해 별도의 Hive metastore와 Hive warehouse를 설정해요. 따라서 한 버전으로 만든 테이블은 다른 설치 버전으로 만든 테이블과 간섭하지 않아요. 단, 여러 Hive 테이블이 같은 위치를 가리키면 한 테이블의 변경 사항이 다른 테이블에도 보이게 된다는 점에 유의해요.

Hive Server

EMR은 Hive 클러스터의 마스터 노드에서 Thrift Hive 서버를 실행해요. Hive JDBC 드라이버를 통해 어떤 JDBC 클라이언트(예: squirrel SQL)로도 접근할 수 있어요. 다양한 Hive 버전의 JDBC 드라이버는 다음 링크에서 받을 수 있어요:

Hive 버전 Hive JDBC
0.5 http://aws.amazon.com/developertools/0196055244487017
0.7 http://aws.amazon.com/developertools/1818074809286277
0.7.1 http://aws.amazon.com/developertools/8084613472207189

JDBC 드라이버로 Hive Server에 연결하는 과정은 다음과 같아요:

http://docs.amazonwebservices.com/ElasticMapReduce/latest/DeveloperGuide/UsingEMR_Hive.html#HiveJDBCDriver

배치 쿼리 실행 (Running Batch Queries)

명령줄 클라이언트에서 원격으로 쿼리를 제출할 수도 있어요. 현재 각 클러스터에는 256 스텝까지의 제한이 있다는 점에 유의해요. 실행할 스텝이 256개보다 많다면 Hive CLI로 직접 쿼리를 실행하거나 JDBC 드라이버로 쿼리를 제출하는 것을 권장해요.

Hive S3 테이블

Elastic MapReduce Hive 클러스터는 S3와 통신하도록 구성되어 제공돼요. 테이블을 만들고 S3 위치를 가리키면 Hive와 Hadoop이 제공한 자격 증명을 사용해 S3와 자동으로 통신해요.

데이터를 S3 버킷으로 옮겼다면, 그 S3 위치를 테이블이 가리키게 하면 Hive로 데이터를 읽거나 처리할 수 있어요. S3에 파티션 테이블을 만들 수도 있어요. Elastic MapReduce의 Hive는 S3에서 동적 파티셔닝을 지원해요.

Hive 로그

Hive 애플리케이션 로그: 모든 Hive 애플리케이션 로그는 /mnt/var/log/apps/ 디렉토리로 리다이렉트돼요.

Hadoop 데몬 로그: Hadoop 데몬 로그는 /mnt/var/log/hadoop/ 폴더에서 사용할 수 있어요.

Hadoop 태스크 시도 로그는 클러스터의 각 슬레이브 노드에서 /mnt/var/log/hadoop/userlogs/ 폴더에서 사용할 수 있어요.

튜토리얼 (Tutorials)

Elastic MapReduce에서 Hive를 시작하기 위해 다음 Hive 튜토리얼을 사용할 수 있어요:

  1. Google Books n-grams 데이터와 Elastic MapReduce의 Apache Hive로 트렌드 토픽 찾기
  2. HPC(High Performance Computing) 인스턴스로 Apache Hive와 Amazon Elastic MapReduce를 사용한 문맥 광고(Contextual Advertising)
  3. Hive, Amazon Elastic MapReduce, Amazon SimpleDB로 데이터 웨어하우스 운영
  4. Amazon ElasticMap Reduce에서 Hive 실행

또한 Amazon은 단계별 비디오 튜토리얼을 제공해요:

지원 (Support)

Elastic MapReduce의 Hive 관련 질문은 Elastic MapReduce 포럼에서 할 수 있어요:

https://forums.aws.amazon.com/forum.jspa?forumID=52

자세한 내용은 EMR 개발자 가이드도 참고해요:

http://docs.amazonwebservices.com/ElasticMapReduce/latest/DeveloperGuide/

기고자: Vaibhav Aggarwal

더 알아보기 (Learn more)