분산컴퓨팅(4)-Hive and Sqoop
업데이트:
숭실대학교 박영택교수님의 “빅데이터분산컴퓨팅” 강의를 참고했습니다.
Hive
- Facebook에서 시작
- “ETL”은 python을 통해 구현됨
motivation
- Yahoo는 Hadoop에서의 어플리케이션 작업을 가능케 하기 위해 pig를 사용해 작업함
- 주 사용 목적은 unstructured data의 처리
- Facebook은 Hadoop에서의 warehouse solutions 작업을 전개하였고, Hive 개발로 이어짐
- MR의 한계점
- M/R model을 사용해야 함
- 재사용 불가
- 에러가 발생하기 쉬움
- MapReduce함수의 다중 stage 필요함
Overview
- Intuitive
- Unstructured data를 테이블처럼 보이게 함
- 이 테이블에 SQL 쿼리를 직접 사용할 수 있음
- 해당 쿼리에 대해 지정된 excution plan을 수립함
- What’s Hive
- structured data를 Hadoop file system에 저장하기 위한 data warehousing system
- excution Hadoop / MapReduce plans을 통해 사용하기 쉬운 쿼리를 제공함
Pros
- 대용량 데이터를 쉽게 처리할 수 있음
- SQL queries를 제공
- 사용자가 정의한 확장 인터페이스 제공
- Programmability
- Efficient execution plans를 제공
- 다른 데이터베이스와의 상호 연동성
Cons
- 데이터를 추가하는 방법이 쉽지 않음
- HDFS안의 파일은 수정 불가
Application
- Log processing
- Daily Report
- 사용자행위평가 및 예측
- Data / Text mining
- 기계학습
- Business inteligence
- 광고 배달
- 스팸 메일 감지
Architecture
HiveQL
- Subset of SQL
- Mata-Data queries
- Limited equality 와 join predicates
- No interts on existing tables (to preserve worm property)
- 전체 테이블을 덮어 쓸 수 있음
Sqoop
Hadoop 과 RDB 사이의 데이터 전송 툴
Importing Data with Sqoop
gcp인스턴스에 docker로 예제 hadoop 환경을 구축해놓았다(Cloudera). 해당 환경에서 Sqoop을 통해 RDB 내의 데이터를 HDFS에 적재해보자.
-
Sqoop 명령어를 이용해 db list 확인
$sqoop list-databases --connect jdbc:mysql://localhost\ --username root --password cloudera
Warning: /usr/lib/sqoop/../accumulo does not exist! Accumulo imports will fail. Please set $ACCUMULO_HOME to the root of your Accumulo installation. 19/12/22 07:44:38 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6-cdh5.7.0 19/12/22 07:44:38 WARN tool.BaseSqoopTool: Setting your password on the command -line is insecure. Consider using -P instead. 19/12/22 07:44:39 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset. information_schema cm firehose hue metastore mysql nav navms oozie retail_db rman sentry
-
Sqoop 명령어를 이용해
retail_db
db 안의 테이블 목록 확인$sqoop list-tables --connect jdbc:mysql://localhost/retail_db \ --username root --password cloudera
Warning: /usr/lib/sqoop/../accumulo does not exist! Accumulo imports will fail. Please set $ACCUMULO_HOME to the root of your Accumulo installation. 19/12/22 07:50:13 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6-cdh5.7.0 19/12/22 07:50:13 WARN tool.BaseSqoopTool: Setting your password on the command -line is insecure. Consider using -P instead. 19/12/22 07:50:13 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset. categories customers departments order_items orders products
-
customers
테이블을 HDFS로 가져오기$sqoop import \ --connect jdbc:mysql://localhost/retail_db \ --table customers --fields-terminated-by '\t' \ --username root --password cloudera
이 과정에서 많은 문제가 발생했다.
- 도커 컨테이너에서 하둡 서비스들이 전부 꺼짐
- 서비스를 재실행하는 cloudera 쉘 스크립트가 알 수 없는 에러가 남
- 쉘 스크립트 수정해서 일부 서비스 재실행 성공
- 하둡을 비정상적으로 종료해서 safe mode 진입함
- safe mode OFF
- hadoop job이 실행되지 않음 (
The auxService:mapreduce_shuffle does not exist
)- yarn 설정파일 수정으로 해결
- Shuffle 단계에서 메모리 부족으로 process kill 됨
댓글남기기