Apache sqoop

  • 492 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
492
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
25
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Apache Sqoop 아꿈사 Cecil 13년 10월 7일 월요일
  • 2. 이미지 출처: siliconweek, <http://www.siliconweek.es/noticias/apache-sqoop-se-convierte-en-proyecto-prioritario-para-big-data-21558> 하둡과 RDBMS 사이에서 데이터를 전송하기 위한 Tool Import Export 13년 10월 7일 월요일
  • 3. Import 13년 10월 7일 월요일
  • 4. Import Flow 1. JDBC를 이용해서 임포트할 테이블을 검사 2. 레코드 컨테이너 클래스 생성 3. 맵리듀스 잡 실행 • 맵 태스크는 쿼리를 실행하고 컨테이너 클래스를 사용 해서 인스턴스로 역직렬화 13년 10월 7일 월요일
  • 5. 컨테이너 클래스 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일 월요일
  • 6. 성능을 위한 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일 월요일
  • 7. ETC. • 임포트 제어하기 WHERE 절의 추가하여 전체 테이블이 아닌 일부만 임포트 가능 • 임포트와 일관성 데이터 임포트시, 소스 데이터의 일관된 스냅샷에 접근하는 것이 중요. 이를 위해 임포 트 기간중 테이블을 수정하는 프로세스를 실행을 막는 것이 필요 • 직접 모드 임포트 직접 모드를 사용하여 임포트 성능을 향상 시킬수 있음. 이러한 직접 모드는 데이터 베이스에서 지원하는 툴을 사용(ex: mysqldump ...) 13년 10월 7일 월요일
  • 8. Export 13년 10월 7일 월요일
  • 9. Export Flow 1. JDBC를 이용해서 테이블을 검사 2. 레코드 컨테이너 클래스 생성 3. 맵리듀스 잡 실행 • INSET 문을 만들어서 대상 테이블에 다중 레코드를 추가 13년 10월 7일 월요일
  • 10. ETC. • 익스포트와 트랜잭션 프로세스의 병렬성으로 인하여 익스포트는 하나의 단일 동작으로 제어되지 않음. (하나의 태스트 결과는 다른 태스크가 끝나기 전에 참조될 수 있음) 이를 위해 먼저 임시 테이블에 익스포트 후, 잡이 종료되는 시점에 단일 트랜잭션으로 목표 테이블로 옮김 (staging-table 옵션) • 직접 모드 익스포트 직접 모드를 사용하여 익스 성능을 향상 시킬수 있음. 이러한 직접 모드는 데이터 베 이스에서 지원하는 툴을 사용(ex: mysqlimport ...) 13년 10월 7일 월요일
  • 11. References • Tom White (2013). 하둡 완벽가이드. (심탁길, 김현우, 옮김). 서울: 한빛미디어. (원서출 판 2012) 13년 10월 7일 월요일