Apache sqoop
Upcoming SlideShare
Loading in...5
×
 

Apache sqoop

on

  • 834 views

 

Statistics

Views

Total Views
834
Views on SlideShare
761
Embed Views
73

Actions

Likes
0
Downloads
19
Comments
0

1 Embed 73

http://cecil1018.wordpress.com 73

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Apache sqoop Apache sqoop Presentation Transcript

  • Apache Sqoop 아꿈사 Cecil 13년 10월 7일 월요일
  • 이미지 출처: siliconweek, <http://www.siliconweek.es/noticias/apache-sqoop-se-convierte-en-proyecto-prioritario-para-big-data-21558> 하둡과 RDBMS 사이에서 데이터를 전송하기 위한 Tool Import Export 13년 10월 7일 월요일
  • Import 13년 10월 7일 월요일 View slide
  • Import Flow 1. JDBC를 이용해서 임포트할 테이블을 검사 2. 레코드 컨테이너 클래스 생성 3. 맵리듀스 잡 실행 • 맵 태스크는 쿼리를 실행하고 컨테이너 클래스를 사용 해서 인스턴스로 역직렬화 13년 10월 7일 월요일 View slide
  • 컨테이너 클래스 public class widgets extends SqoopRecord implements DBWritable, Writable { ... public void readFields(ResultSet __dbResults) throws SQLException { // Importing this.__cur_result_set = __dbResults; this.id = JdbcWritableBridge.readInteger(1, __dbResults); this.widget_name = JdbcWritableBridge.readString(2, __dbResults); this.price = JdbcWritableBridge.readBigDecimal(3, __dbResults); this.design_date = JdbcWritableBridge.readDate(4, __dbResults); this.version = JdbcWritableBridge.readInteger(5, __dbResults); this.design_comment = JdbcWritableBridge.readString(6, __dbResults); } // Exporting public int write(PreparedStatement __dbStmt, int __off) throws SQLException { JdbcWritableBridge.writeInteger(id, 1 + __off, 4, __dbStmt); JdbcWritableBridge.writeString(widget_name, 2 + __off, 12, __dbStmt); JdbcWritableBridge.writeBigDecimal(price, 3 + __off, 3, __dbStmt); JdbcWritableBridge.writeDate(design_date, 4 + __off, 91, __dbStmt); JdbcWritableBridge.writeInteger(version, 5 + __off, 4, __dbStmt); JdbcWritableBridge.writeString(design_comment, 6 + __off, 12, __dbStmt); return 6; } ... } Sqoop은 데이터를 직렬화/역직렬화하는 컨테이너 클래스를 생성하여 테이블로부터 추출된 레코드를 유지 13년 10월 7일 월요일
  • 성능을 위한 Map Task의 분할 임포트 성능은 쿼리를 다수의 노드에 분산시켜서 얻을 수 있음 Sqoop은 테이블에 대한 메타 데이터를 사용하여 분할을 결정 (DataDrivenDBInputFormat) “-m 1” 옵션을 사용하면 1개의 맵 태스크만 실행 됨. Ex) 주키의 최소/최대 값 이용 0 ~ 99,999 값을 가지는 ID 컬럼이고, 5개의 맵태스크가 실행될 경우 각각의 맵 태스크는 아래와 같은 쿼리를 실행 SELECT * FROM widgets WHERE id >=0 AND id < 20000; SELECT * FROM widgets WHERE id >=20000 AND id < 40000; : 13년 10월 7일 월요일
  • ETC. • 임포트 제어하기 WHERE 절의 추가하여 전체 테이블이 아닌 일부만 임포트 가능 • 임포트와 일관성 데이터 임포트시, 소스 데이터의 일관된 스냅샷에 접근하는 것이 중요. 이를 위해 임포 트 기간중 테이블을 수정하는 프로세스를 실행을 막는 것이 필요 • 직접 모드 임포트 직접 모드를 사용하여 임포트 성능을 향상 시킬수 있음. 이러한 직접 모드는 데이터 베이스에서 지원하는 툴을 사용(ex: mysqldump ...) 13년 10월 7일 월요일
  • Export 13년 10월 7일 월요일
  • Export Flow 1. JDBC를 이용해서 테이블을 검사 2. 레코드 컨테이너 클래스 생성 3. 맵리듀스 잡 실행 • INSET 문을 만들어서 대상 테이블에 다중 레코드를 추가 13년 10월 7일 월요일
  • ETC. • 익스포트와 트랜잭션 프로세스의 병렬성으로 인하여 익스포트는 하나의 단일 동작으로 제어되지 않음. (하나의 태스트 결과는 다른 태스크가 끝나기 전에 참조될 수 있음) 이를 위해 먼저 임시 테이블에 익스포트 후, 잡이 종료되는 시점에 단일 트랜잭션으로 목표 테이블로 옮김 (staging-table 옵션) • 직접 모드 익스포트 직접 모드를 사용하여 익스 성능을 향상 시킬수 있음. 이러한 직접 모드는 데이터 베 이스에서 지원하는 툴을 사용(ex: mysqlimport ...) 13년 10월 7일 월요일
  • References • Tom White (2013). 하둡 완벽가이드. (심탁길, 김현우, 옮김). 서울: 한빛미디어. (원서출 판 2012) 13년 10월 7일 월요일