레이블이 EMR인 게시물을 표시합니다. 모든 게시물 표시
레이블이 EMR인 게시물을 표시합니다. 모든 게시물 표시

2017년 10월 31일 화요일

EMR에서 Hadoop Job을 돌리고 ElasticSearch에 결과 출력하기

참고 사이트

https://www.elastic.co/guide/en/elasticsearch/hadoop/current/troubleshooting.html
http://libqa.com/wiki/807

EMR 클러스터 세팅

EMR 클러스터와 ElasticSearch 서버와의 연동 테스트를 위해서 우선 EMR 클러스터 마스터 노드에 ElasticSearch를 설치해서 진행했다.

Hadoop 출력을 Elastic Search에 저장하기
참고해서 마스터 노드에 Elastic Search를 설치한다.

Elastic Search 설정 파일을 수정한다.
vi $ES_HOME/config/elasticsearch.yml

network.host: 192.168.0.1
http.port: 9200

마스터 노드 내부 IP를 입력한다.
이 IP가 Java 프로그래밍 안에 들어가야 한다.
conf.set("es.nodes","192.168.0.1:9200");

보안그룹 인바운드 규칙 편집

마스터 노드 보안 그룹의 인바운드 규칙을 수정한다.
마스터, 슬레이브 노드 간에는 모든 TCP, 모든 UDP 등 기본으로 되어 있는 규칙이 있기 때문에
ElasticSearch를 마스터 노드 내부에 설치했을 경우 별도의 설정이 필요 없을 것이다.
만약 외부에서 ElasticSearch에 접속해야 될 경우 외부에서 접속할 수 있는 경로를 열어놔야 한다.
규칙 추가를 누르고 아래 내역을 입력하고 저장한다.
- 유형 : 사용자 지정 TCP
- 프로토콜 : TCP
- 포트 범위 : 9200
- 소스 : '내 IP'(고정 IP가 없다면 '위치 무관')


scp를 이용해서 로컬에서 작업한 mapreduce jar 파일을 마스터 노드로 복사한다.
elasticsearch를 실행하고 wordcount 예제를 돌려서 에러 없이 돌아가는지 확인한다.
정상적으로 돌아갔다면 데이터가 정상적으로 들어갔는지 확인한다.

마스터 노드에서
curl -XGET http://[Private IP]:9200/hadoop/_search?pretty=true?q=*.*

외부에서는
curl -XGET http://[Public IP]:9200/hadoop/_search?pretty=true?q=*.*


{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1035,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "hadoop",
        "_type" : "wordcount",
        "_id" : "AV9wXlTwywZ-ibD3mov5",
        "_score" : 1.0,
        "_source" : {
          "reaffirm" : 1
        }
      },
      {
        "_index" : "hadoop",
        "_type" : "wordcount",
        "_id" : "AV9wXlTwywZ-ibD3mov8",
        "_score" : 1.0,
        "_source" : {
          "recognition," : 1
        }
      },
      {
        "_index" : "hadoop",
        "_type" : "wordcount",
        "_id" : "AV9wXlTwywZ-ibD3mov_",
        "_score" : 1.0,
        "_source" : {
          "refused" : 1
        }
      },

이런 식으로 source에 wordcount 결과가 저장된다.

2017년 10월 27일 금요일

AWS EMR에서 custom MR Job 돌리기

참고 사이트
http://www.thecloudavenue.com/2013/12/CustomMRExecutionWithAmazonEMR.html

Master 노드에 SSH로 접속하기

http://modoleesi.blogspot.kr/2017/10/aws-emrelastic-mapreduce.html
참고해서 먼저 SSH에 접속할 수 있는 환경을 만든다.
그리고 아래 명령어로 master 노드에 접속한다. (계정명은 hadoop)

ssh -i ~/<your_access_key>.pem hadoop@ec2-000-000-000-000.region.compute.amazonaws.com

필요한 파일들 복사하기

로컬PC에서 컴파일한 jar와 input 파일들을 옮겨야 한다.
scp -i ~/<your_access_key>.pem <복사를 원하는 원본 파일의 경로> hadoop@ec2-000-000-000-000.region.compute.amazonaws.com:/home/hadoop/<복사 목적지 경로>

HDFS를 저장소로 이용해서 Shell에서 실행

로컬에서 실행하는 것도 동일하게 실행하면 된다.
hadoop jar wordcount-demo-1.0-SNAPSHOT.jar WordCountJob input output 

S3에 파일 업로드

Shell에서 업로드

S3를 HDFS 처럼 사용할 수 있다.
hadoop fs -put input s3://mybucket/directory

AWS 콘솔에서 업로드

S3 콘솔에 접속해서 그냥 파일 첨부 형식으로 업로드 하면 된다.

S3를 저장소로 이용해서 실행

Shell에서 실행

hadoop jar wordcount-demo-1.0-SNAPSHOT.jar WordCountJob s3://mybucket/directory/input s3://mybucket/directory/output 

AWS 콘솔에서 실행

클러스터 정보에 들어가서 단계(Step) 탭에 들어가면 단계 추가(Add Step)이 있다.
그걸 누르면 위 처럼 입력할 수 있는 창이 뜨는데 여기에 맞춰서 넣어주면 된다.
단계 유형(Step type) : Custom JAR
이름 (Name) : 원하는 이름으로
JAR 위치 (JAR S3 location) : S3에 올려놓은 jar 파일 위치
인수(Arguments) : MainClass명 인수들... (입력 출력 위치 등등...)
실패 시 작업(Action on failure) : '계속'으로 되어 있는데, 그냥 job 실패하면 '취소 및 대기' 하는게 더 나아 보인다.

다 채운 후 추가(Add)를 누르면 Job이 추가되고 상태가 나온다.

2017년 10월 23일 월요일

AWS EMR(Elastic MapReduce) 구성

참고 사이트


EMR(Elastic MapReduce) 란?

Amazon EMR은 AWS에서 Apache 하둡 및 Apache Spark와 같은 빅 데이터 프레임워크 실행을 간소화하는 관리형 클러스터 플랫폼입니다. 이러한 프레임워크와 함께 Apache Hive 및 Apache Pig와 같은 관련 오픈 소스 프로젝트를 사용하여 분석용 데이터와 비즈니스 인텔리전스 워크로드를 처리할 수 있습니다. 또한 Amazon EMR를 사용하여 Amazon Simple Storage Service(Amazon S3) 및 Amazon DynamoDB와 같은 기타 AWS 데이터 스토어 및 데이터베이스에서 많은 양의 데이터를 양방향으로 변환하고 이동할 수 있습니다.

하둡 클러스터를 구성해주는 상품!
EC2를 이용해서 클러스터 노드를 유동적으로 더하고 빼고 할 수 있다.

클러스터 생성


클러스터 생성 버튼을 누른다.

- 클러스터 이름원하는 이름
- 시작 모드 : 클러스터 (단계 실행은 아마도 시작 후 바로 job을 실행하도록 할 때 사용하는 것 같음)
- 릴리스 : 모르니깐 최신버전
- 애플리케이션 : Hadoop 이 외에 특별히 쓰고자 하는 것이 없으면 Core Hadoop
- 인스턴스 유형 : 현재 가장 저렴하게 사용할 수 있는 거는 m4.large (더 사양이 낮아도 될 것 같은데 지금 선택할 수 있는 옵션 중에서는 이게 가량 저렴한 것 같다.)
- 인스턴스 개수 : 2 (우선 테스트용으로 마스터 1대, 코어 1대)
나중에 제대로 돌리려면 replication을 생각한다면 5대 이상 생성해야 한다.
EMR에서 자동으로 코어 개수에 따라 replication을 지정하는데
1대~3대  : 1
4대~9대  : 2
10대 ~ : 3
- EC2 키 페어 : 사용할 키페어 지정
- 권한 : 기본값

클러스터 생성!

그러면 인스턴스 2개가 프로비저닝 중이라고 뜰거고, 그게 다 뜨면 마스터 퍼블릭 DNS를 확인하고 SSH 접속을 시도한다. 그런데 접속이 안된다......

클러스터 생성 후 SSH로 Master 노드에 접속하기

SSH 접속을 위해서는 보안 그룹 규칙을 추가해 줘야 한다.

"기본적으로 ElasticMapReduce-master 보안 그룹은 인바운드 SSH 액세스를 허용하지 않습니다. 따라서 액세스를 원하는 소스에서 SSH 액세스(TCP 포트 22)를 허용하는 인바운드 규칙을 추가해야 합니다. 보안 그룹 규칙 수정에 대한 자세한 내용은 Amazon EC2 User Guide for Linux Instances의 보안 그룹에 규칙 추가를 참조하십시오." 라고 한다.