[ Sqoop-Import ]
1. 일반인수 (Common arguments)
- --connect <jdbc-uri> : JDBC 접속URI 지정
- --connect-manager <class-name> : 사용할 연결 관리자
- --driver <class-name> : JDBC driver class 지정
- --hadoop-mapred-home <dir> : Override $HADOOP_MAPRED_HOME
- --help : 도움말
- --password-file : 인증관련 파일 경로
- -P : 콘솔에서 비밀번호를 읽을 때
- --password <password> : 인증패스워드 SET
- --username <username> : 유저이름 SET
- --verbose : working시 더 많은 정보 출력
- --relaxed-isolation : 매퍼에 대해 커밋되지 않은 읽기 데이터를 가져온다. HDFS에 저장되기전 데이터를 컨트롤하기 위한 인수
2. 데이터베이스 서버 접속
접속예시
$ sqoop import --connect jdbc:mysql://database.example.com/employees \ --username aaron --password 12345
비밀번호가 저장된 파일을 이용하여 접속
$ sqoop import --connect jdbc:mysql://database.example.com/employees \ --username venkatesh --password-file ${user.home}/.password
또는 -P 인수를 통해 비밀번호를 콘솔에서 입력할 수 있다.
$ sqoop import --connect jdbc:mysql://database.example.com/employees \ --username aaron -P
password: *****
Sqoop은 몇몇 데이터베이스(Mysql)들은 기본적으로 지원한다. 지원하는 데이터베이스들의 JDBC가 설치되어 있기 때문이다.
그러나 다른 데이터베이스를 사용하기위해 JDBC를 설치해야 하는 경우 해당 .jar파일을 $SQOOP_HOME/lib 경로에 추가시켜야한다. (데비안-/usr/lib/sqoop/lib)
3. 유효성관련 인수 (Validation arguments)
인수 | 인수 |
---|---|
--validate | 복사된 데이터의 유효성 검사 사용, 단일 테이블 복사본만 지원 |
--validator <class-name> | 특정 vaildator클래스 지정 |
--validation-threshold <class-name> | 사용할 유효성 검사 임계값 클래스 지정 |
--validation-failurehandler <class-name> | 사용할 유효성 검사 오류 처리기 클래스 지정 |
4. Import 관련 인수 (Import control arguments)
인수 | 인수 |
---|---|
--append | 기존 HDFS의 데이터세트에 데이터 추가 |
--as-avrodatafile | Avro 데이터파일로 가져오기 |
--as-sequencefile | SequenceFiles 데이터파일로 가져오기 |
--as-textfile | text파일로 가져오기 (default) |
--as-parquetfile | Parquet 데이터파일로 가져오기 |
--boundary-query <statement> | 분할 작성에 사용한 경계쿼리 |
--columns <col,col,col…> | 테이블에서 가져올 Columns |
--delete-target-dir | target directory가 있을 경우 삭제 |
--direct | 데이터베이스에 대한 직접 컨넥터 사용 |
--fetch-size <n> | 데이터베이스에서 한 번에 읽을 항목 수 |
--inline-lob-limit <n> | inline LOB의 최대크기 설정 |
-m,--num-mappers <n> | 병렬로 작업 할 map tasks 수 설정 |
-e,--query <statement> | 쿼리로 가져올 데이터 지정 |
--split-by <column-name> | 컬럼을 구분하는데 사용되는 유닛 ex) "," |
--split-limit <n> | 정수 및 날짜 열에 대한 분할크기지정 |
--autoreset-to-one-mapper | primary key나 분할 기준열이 없는 경우 자동적으로 매퍼가 조정 |
--table <table-name> | 읽을 테이블 지정 |
--target-dir <dir> | HDFS 디렉토리 경로 |
--temporary-rootdir <dir> | import될 동안 생성할 임시 HDFS 디렉토리 경로 |
--warehouse-dir <dir> | 지정된 테이블의 상위 HDFS 디렉토리 |
--where <where clause> | 작성할 WHERE절 |
-z,--compress | 압축사용 |
--compression-codec <c> | 사용할 하둡 아축 코덱 (default gzip) |
--null-string <null-string> | 문자열컬럼이 null일 떄 쓸 문자열 |
--null-non-string <null-string> | 비문자열컬럼이 null일 때 쓸 문자열 |
예시1)
$ sqoop import \ --table employ \ \
--columns "id,name,age" \ --where "id > 300"
예시2)
$ sqoop import \ --query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' \ --split-by a.id --target-dir /user/foo/joinresults
--query 사용시 WHERE절 뒤에 "AND \$CONDITIONS" 문구를 추가하여 이 문장이 조건절을 나타내고 있다는 표시를 해줘야 한다.
Ex) "SELECT * FROM x WHERE a='foo' AND \$CONDITIONS"
또한 복잡한 조인쿼리는 오류가 생길 수 있다.
5. 병렬 제어 (Contorlling Parallelism)
-m 또는 --num-mappers 인수로 제어 할 수 있다. 병렬시 분할 기준은 기본키 또는 지정한 키값이다. 예를 들어 기본키가 0-1000이고, -m 4(맵리듀스 4개)로 설정하면 각 맵태스크는 250개씩 나누어 작업을 한다.
기본 키값이 균일하게 분포되지 않으면 작업 불균형이 생긴다. --split-by인수를 사용해 명시적인 컬럼을 선택한다.
--split-limit옵션을 사용하여 -m 또는 --num-mapers를 재정의 할 수 있다. --split-limit옵션은 분할된 태스크의 크기를 제한한다. 같은 예시로 위의 1-1000개의 기본키가 있는 테스크를 똑같이 -m 4, 그리고 --split-limit옵션은 task 200개로 지정하면 맵퍼수가 하나 증가하며 5개로 재조정된다.
6. 저장위치
/shared/foo 에 저장된다
$ sqoop import --connnect <connect-str> --table foo --warehouse-dir /shared \ ...
$ sqoop import --connnect <connect-str> --table foo --target-dir /shared/foo\ ...
--target-dir와 --warehouse-dir은 같이 쓸 수 없다. 또한 대상 디렉토리가 HDFS에 이미 존재하는 경우 작동하지 않는다. 그럴 경우 대상 디렉토리 이름을 변경하던가 --delete-target-dir인수를 사용하여 기존 파일을 지운후 가져오는 방식을 사용해야 한다.
댓글 없음:
댓글 쓰기