컴포넌트 사용하기
Hadoop Eco 서비스에서 클러스터에 설치된 컴포넌트를 사용하는 방법은 다음과 같습니다.
Hive 쿼리
Hive CLI를 실행한 후, 쿼리를 입력합니다.
코드 예제 Hive CLI를 이용한 쿼리 실행
$ hive
hive (default)> CREATE TABLE tbl (
> col1 STRING
> ) STORED AS ORC
> TBLPROPERTIES ("orc.compress"="SNAPPY");
OK
Time taken: 1.886 seconds
Beeline 쿼리
- Beelin CLI를 실행합니다.
-
HiveServer2에 직접 접근과 Zookeeper를 이용한 접근 중 선택하여 HiveServer2에 접속합니다.
접근 방식 접속 명령어 HiveServer2 직접 접근 !connect jdbc:hive2://[서버명]:10000/default;
Zookeeper를 이용한 접근 !connect jdbc:hive2://[마스터 1]:2181,[마스터 2]:2181,[마스터3]:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kepbp_hiveserver2
- 쿼리를 입력합니다.
- 쿼리를 실행하기 전 접근 사용자명을 정확하게 입력하여야 합니다. Hadoop Eco의 기본 사용자는 Ubuntu입니다.
-
HDFS에 접근할 수 없는 사용자로 실행한 경우, 쿼리 실행 시 오류가 발생할 수 있습니다.
코드 예제 Beeline CLI를 이용한 쿼리 실행
###################################### # hiveserver2 직접 접근 ###################################### beeline> !connect jdbc:hive2://10.182.50.137:10000/default; Connecting to jdbc:hive2://10.182.50.137:10000/default; Enter username for jdbc:hive2://10.182.50.137:10000/default: Enter password for jdbc:hive2://10.182.50.137:10000/default: Connected to: Apache Hive (version 2.3.2) Driver: Hive JDBC (version 2.3.2) Transaction isolation: TRANSACTION_REPEATABLE_READ 0: jdbc:hive2://10.182.50.137:10000/default> show databases; +----------------+ | database_name | +----------------+ | db_1 | | default | +----------------+ 2 rows selected (0.198 seconds) ##################################### # 주키퍼를 이용한 접근 ##################################### beeline> !connect jdbc:hive2://hadoopmst-hadoop-ha-1:2181,hadoopmst-hadoop-ha-2:2181,hadoopmst-hadoop-ha-3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kepbp_hiveserver2 Connecting to jdbc:hive2://hadoopmst-hadoop-ha-1:2181,hadoopmst-hadoop-ha-2:2181,hadoopmst-hadoop-ha-3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kepbp_hiveserver2 Enter username for jdbc:hive2://hadoopmst-hadoop-ha-1:2181,hadoopmst-hadoop-ha-2:2181,hadoopmst-hadoop-ha-3:2181/: Enter password for jdbc:hive2://hadoopmst-hadoop-ha-1:2181,hadoopmst-hadoop-ha-2:2181,hadoopmst-hadoop-ha-3:2181/: 22/09/06 05:40:52 [main]: INFO jdbc.HiveConnection: Connected to hadoopmst-hadoop-ha-1:10000 Connected to: Apache Hive (version 2.3.9) Driver: Hive JDBC (version 2.3.9) Transaction isolation: TRANSACTION_REPEATABLE_READ 0: jdbc:hive2://hadoopmst-hadoop-ha-1:2181,ha> show databases; +----------------+ | database_name | +----------------+ | default | +----------------+ 1 row selected (2.164 seconds) 0: jdbc:hive2://hadoopmst-hadoop-ha-1:2181,ha> ##################################### # 사용자 입력 (Enter username: ) ##################################### beeline> !connect jdbc:hive2://bigdata-hadoop-master-1.kep.k9d.in:10000/default; Connecting to jdbc:hive2://bigdata-hadoop-master-1.kep.k9d.in:10000/default; Enter username for jdbc:hive2://bigdata-hadoop-master-1.kep.k9d.in:10000/default: ubuntu Enter password for jdbc:hive2://bigdata-hadoop-master-1.kep.k9d.in:10000/default: Connected to: Apache Hive (version 2.3.9) Driver: Hive JDBC (version 2.3.9) Transaction isolation: TRANSACTION_REPEATABLE_READ 0: jdbc:hive2://bigdata-hadoop-master-1.kep.k> create table t2 (`value` string,`product_num` int) partitioned by (manufacture_date string) STORED AS ORC; No rows affected (0.527 seconds) 0: jdbc:hive2://bigdata-hadoop-master-1.kep.k> insert into t2 partition(manufacture_date='2019-01-01') values('asdf', '123'); No rows affected (26.56 seconds) 0: jdbc:hive2://bigdata-hadoop-master-1.kep.k>
Hue
Hue는 Hadoop Eco 클러스터에 제공되는 사용자 인터페이스입니다.
클러스터 상세 페이지에서 퀵 링크를 클릭하여 접속합니다. 클러스터 생성 시점에 입력한 관리자 정보로 로그인합니다.
안내
Hue는 Hive 편집기와 브라우저를 이용할 수 있습니다.
- 브라우저 종류: 파일 브라우저, 테이블 브라우저, 잡 브라우저
표. 클러스터 타입별 Hue 접속 포트
클러스터 타입 | 접속 포트 |
---|---|
표준(Single) | 마스터 1번 노드의 8888 포트 |
HA | 마스터 3번 노드의 8888 포트 |
이미지 Hue 사용자 로그인
Oozie
Oozie는 Hadoop Eco 클러스터의 타입이 Core Hadoop일 때 제공되는 워크플로(Workflow) 작업 도구입니다.
클러스터 상세 페이지에서 퀵 링크를 클릭하여 Oozie에 접속합니다.
표 클러스터 타입별 Oozie 접속 포트
클러스터 타입 | 접속 포트 |
---|---|
표준(Single) | 마스터 1번 노드의 11000 포트 |
HA | 마스터 3번 노드의 11000 포트 |
이미지 Oozie 워크플로 목록
이미지 Oozie 워크플로 작업 정보
이미지 Oozie 워크플로 작업 내용
Zepplin
Zepplin은 Hadoop Eco 클러스터의 타입이 Core Hadoop일 때 제공되는 사용자 인터페이스입니다. 클러스터 상세 페이지에서 퀵 링크를 클릭하여 Zepplin에 접속합니다.
표 클러스터 타입별 Zepplin 접속 포트
클러스터 타입 | 접속 포트 |
---|---|
표준(Single) | 마스터 1번 노드의 8180 포트 |
HA | 마스터 3번 노드의 8180 포트 |
이미지 Zepplin 사용자 인터페이스
Trino
- Trino CLI를 실행합니다.
- 서버 정보는 Trino Coordinator가 설치된 위치를 입력합니다.
표 클러스터 타입별 Trino 접속 포트
클러스터 타입 접속 포트 표준(Single) 마스터 1번 노드의 8780 포트 HA 마스터 3번 노드의 8780 포트 -
쿼리를 입력합니다.
코드 예제 Trino CLI를 이용한 쿼리 실행
$ trino --server http://hadoopmst-trino-ha-3:8780 trino> SHOW CATALOGS; Catalog --------- hive system (2 rows) Query 20220701_064104_00014_9rp8f, FINISHED, 2 nodes Splits: 12 total, 12 done (100.00%) 0.23 [0 rows, 0B] [0 rows/s, 0B/s] trino> SHOW SCHEMAS FROM hive; Schema -------------------- default information_schema (2 rows) Query 20220701_064108_00015_9rp8f, FINISHED, 3 nodes Splits: 12 total, 12 done (100.00%) 0.23 [2 rows, 35B] [8 rows/s, 155B/s] trino> select * from hive.default.t1; col1 ------ a b c (3 rows) Query 20220701_064113_00016_9rp8f, FINISHED, 1 node Splits: 5 total, 5 done (100.00%) 0.23 [3 rows, 16B] [13 rows/s, 71B/s]
Trino Web 접속하기
-
Trino Coordinator가 설치된 서버의 8780 포트로 Trino Web UI에 접속합니다.
표 클러스터 타입별 Trino 접속 포트
클러스터 타입 접속 포트 표준(Single) 마스터 1번 노드의 8780 포트 HA 마스터 3번 노드의 8780 포트 -
Trino 쿼리 히스토리와 통계 정보를 확인합니다.
이미지 Trino Web 화면
Trino - Zeppelin 연동하기
-
Zeppelin에서 인터프리터를 Trino로 선택합니다.
이미지 Trino-Zeppelin 연동
-
Trino에 조회하고자 하는 쿼리를 입력하면 결과를 확인할 수 있습니다.
이미지 Trino-Zeppelin 쿼리 결과 확인
인터프리터
인터프리터는 프로그래밍 언어 소스 코드를 바로 실행하는 환경을 의미합니다.
Zepplin은 Spark, Hive, Trino 인터프리터를 제공합니다.
이미지 Zeppelin 사용
Flink on Yarn Session
Apache Flink는 Apache Software Foundation에서 개발한 오픈 소스, 통합 스트림 처리 및 일괄 처리 프레임워크입니다. Flink를 Yarn 세션 모드로 실행하는 방법은 다음과 같습니다.
Flink 실행하기
Flink를 세션 모드로 실행할 때 옵션을 이용해서 Flink가 사용할 수 있는 리소스를 조절할 수 있습니다.
표 Flink 실행 옵션
옵션 | 설명 |
---|---|
-jm | 잡 매니저 메모리 사이즈 |
-tm | 태스크 매니저 메모리 사이즈 |
-s | CPU 코어 개수 |
-n | 태스크 매니저 개수 |
-nm | 애플리케이션 이름 |
-d | 백그라운드 모드 |
코드 예제 Flink 실행
yarn-session.sh \
-jm 2048 \
-tm 2048 \
-s 2 \
-n 3 \
-nm yarn-session-jobs
Flink 인터페이스
Flink를 실행하면 Yarn의 노드에서 Flink가 실행되고 WebUI가 실행되어 해당 위치로 접속할 수 있습니다.
코드 예제 Flink 인터페이스
2022-07-07 23:15:33,775 INFO org.apache.flink.shaded.curator4.org.apache.curator.framework.state.ConnectionStateManager [] - State change: CONNECTED
2022-07-07 23:15:33,800 INFO org.apache.flink.runtime.leaderretrieval.DefaultLeaderRetrievalService [] - Starting DefaultLeaderRetrievalService with ZookeeperLeaderRetrievalDriver{connectionInformationPath='/leader/rest_server/connection_info'}.
JobManager Web Interface: http://hadoopwrk-logan-표준(Single)-2:8082
이미지 Flink Web 화면
Flink 작업 실행하기
Flink on Yarn Session을 실행한 후 사용자 작업을 실행하고, 웹사이트에서 확인할 수 있습니다.
이미지 Flink 작업 실행
코드 예제 Flink 작업 실행
$ flink run /opt/flink/examples/batch/WordCount.jar
Executing WordCount example with default input data set.
Use --input to specify file input.
Printing result to stdout. Use --output to specify output path.
Job has been submitted with JobID 43aee6d7d947b1ce848e01c094801ab4
Program execution finished
Job with JobID 43aee6d7d947b1ce848e01c094801ab4 has finished.
Job Runtime: 7983 ms
Accumulator Results:
- 4e3b3f0ae1b13d861a25c3798bc15c04 (java.util.ArrayList) [170 elements]
(a,5)
(action,1)
(after,1)
(against,1)
Kakao HBase Tools
HBase Tools는 Kakao에서 개발한 오픈 소스입니다. 카카오 i 클라우드 콘솔에서 Hadoop Eco 메뉴를 선택합니다. 클러스터 목록에서 삭제할 클러스터의 [더보기] 아이콘 > 클러스터 삭제를 클릭합니다. 클러스터 삭제 팝업창에서 삭제할 클러스터를 확인한 후, 영구 삭제를 입력하고 [삭제] 버튼을 클릭합니다.
안내
자세한 설명은 Kakao Tech 블로그를 참고하시기 바랍니다.
표 Kakao HBase Tools
구분 | 설명 |
---|---|
hbase-manager Module | 리전 배치 관리, 스플릿, 머지, 메이저 컴팩션 제공 - Region Assignment Management - Advanced Split - Advanced Merge - Advanced Major Compaction |
hbase-table-stat Module | 성능 모니터링 - Table Metrics Monitoring |
hbase-snapshot Module | HBase에 저장된 데이터를 백업 및 복구 - Table Snapshot Management |
Kakao HBase Tools 실행하기
Zookeeper 호스트 정보를 전달하여 HBase 정보를 가져옵니다.
코드 예제 Kakao HBase Tools 실행
# hbase-manager
java -jar /opt/hbase/lib/tools/hbase-manager-1.2-1.5.7.jar <command> <zookeeper host name> <table name>
# hbase-snapshot
java -jar /opt/hbase/lib/tools/hbase-snapshot-1.2-1.5.7.jar <zookeeper host name> <table name>
# hbase-table-stat
java -jar /opt/hbase/lib/tools/hbase-table-stat-1.2-1.5.7.jar <zookeeper host name> <table name>
hbase-manager
HBase 관리를 위한 Admin Tool입니다.
이미지 hbase-manager
hbase-table-stat
테이블의 현재 사용 상태를 확인하기 위한 Tool입니다.
이미지 hbase-table-stat
hbase-snapshot
테이블 데이터 스냅샷 생성을 위한 Tool입니다.
이미지 hbase-snapshot
Hadoop Eco 보안 사례
YARN은 Hadoop 시스템의 통일된 자원 관리 플랫폼으로, Hadoop 내 작업 스케쥴링, 클러스터 리소스 관리를 위한 프레임워크입니다. YARN은 REST API를 호출하여 작업을 실행 시, YARN의 기본 포트인 8088 포트를 오픈합니다. 이때 User는 dr.who로 설정되어 기본 작업이 실행됩니다.
이 과정에서 ACL은 확인하지 않으며, 따라서 외부 공격자는 공개된 8088 포트를 사용하여 서버에 실행 명령을 수행하고 악성 스크립트를 다운로드 하는 등 악의적인 공격을 할 수 있습니다.
이미지 User: dr.who로 기본 작업 실행
퍼블릭 클라우드에서 이용되는 모든 Hadoop Eco는 악의적인 외부 공격을 받을 수 있습니다.
따라서 REST API 호출을 아예 제한하거나, 또는 REST API 사용 시 적절한 보안 조치를 취해야 합니다.
Rest API 호출 제한하기
악의적인 외부 공격에 대한 대응하기 위해 Rest API를 이용한 작업 실행을 제한할 수 있습니다. Hadoop Eco 2.10.1 버전부터 Rest API를 이용한 작업 제출을 제한하는 기능을 제공합니다. Hadoop Eco는 기본적으로 이 옵션을 false(기본값, REST API 호출을 허용)으로 사용하고 있습니다.
Rest API 호출을 허용하지 않도록 설정하기 위해서는 /etc/hadoop/conf/yarn-site.xml 파일에서 yarn.webapp.enable-rest-app-submissions의 설정을 true로 수정 후 리소스 매니저를 재부팅해야 합니다.
코드 예제 Rest API 작업 실행 제한
<property>
<name>yarn.webapp.enable-rest-app-submissions</name>
<value>false</value>
</property>
파라미터 | 설명 |
---|---|
yarn.webapp.enable-rest-app-submissions | REST API 호출 허용 여부 - true: 호출을 허용하지 않음 - false(기본값): 호출을 허용 |
해당 옵션을 이용하여 작업 실행이 제한되면 Rest API를 이용하여 작업을 실행할 때 다음과 같은 메시지가 출력됩니다.
이미지 작업 실행 제한 옵션
REST API 사용 시, 보안 조치
REST API를 사용해야 하는 성황이라면, 보안 취약점이 발생하지 않도록 아래와 같이 대응하시기 바랍니다.
사용자가 작업 실행을 목적으로 REST API를 이용한 작업 실행을 사용해야 한다면 다음과 같은 대응 방법을 생각할 수 있습니다.
대응 방법 1. 8088 포트 비공개
첫 번째로 8088 포트를 외부로 오픈하지 않는 것입니다. Hadoop Eco는 기본적으로 Public IP를 사용하지 않기 때문에 VM에 Public IP를 지정하지 않으면 외부에서 접근할 방법이 없습니다.
다음과 같이 공인 IP를 지정하지 않으면 외부에서 접근할 수 없습니다.
- 카카오 i 클라우드 콘솔에서 Hadoop Eco 메뉴를 선택합니다.
- 클러스터 목록에서 노드 목록을 작업 실행할 클러스터를 클릭합니다.
- 노드 목록 탭을 클릭한 후, 해당 클러스터의 노드 목록을 확인합니다.
-
노드 목록에서 공인 IP가 비어져 있는지 확인합니다.
이미지 노드 목록에서 공인 IP 확인
대응 방법 2. 인바운드 정책 수정
두 번째로 인바운드 정책을 수정할 수 있습니다. 기본 설정된 0.0.0.0/0 오픈을 접속하고자 하는 소스 컴퓨터의 IP로 설정하는 것이 좋습니다. 시큐리티 그룹의 인바운드 정책에서 패킷 출발지를 접근하고자 하는 호스트의 공인 IP로 설정하면 접근할 수 있습니다.
- 카카오 i 클라우드 콘솔에서 Hadoop Eco 메뉴를 선택합니다.
- 클러스터 목록에서 노드 목록을 작업 실행할 클러스터를 클릭합니다.
- 노드 목록 탭을 클릭한 후, 해당 클러스터의 노드 목록을 확인합니다.
- 노드 목록에서 노드 인스턴스 이름을 클릭합니다.
- 해당 노드의 인스턴스 상세 페이지에서 보안 탭을 클릭합니다.
- Inbound 탭에서 패킷 출발지를 확인합니다.
- 적용된 시큐리티 그룹을 클릭하여 VPC의 Security 탭으로 이동합니다.
-
인바운드 정책 탭에서 인바운드 정책 관리를 클릭하여 정책을 변경합니다.
이미지 인바운드 탭에서 패킷 출발지 확인
대응 방법 3. 리소스 매니저 포트 정보 변경
세 번째로 외부에 리소스 매니저의 정보를 꼭 오픈해야 하는 상황이라면 리소스 매니저의 포트 정보를 변경하는 것입니다. 다만 포트 정보를 변경하면 증설/축소 등의 동작이 실패할 수도 있습니다.
yarn-site.xml의 다음 정보를 수정한 후 리소스 매니저를 재부팅하면 접근 포트를 변경할 수 있습니다.
코드 예제 yarn-site.xml 수정
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>127.0.0.1:8088</value>
</property>