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 결과가 저장된다.

댓글 없음:

댓글 쓰기