# 목차
[1] sqoop help
[2] sqoop import : table → HDFS
[3] 인수 종류
[4] 테스트
[1] sqoop help
1. Available commands:
- codegen : Generate code to interact with database records
- create-hive-table : Import a table definition into Hive
- eval : Evaluate a SQL statement and display the results
- export : Export an HDFS directory to a database table
- help : List available commands
- import : Import a table from a database to HDFS
- import-all-tables : Import tables from a database to HDFS
- import-mainframe : Import datasets from a mainframe server to HDFS
- job : Work with saved jobs
- list-databases : List available databases on a server
- list-tables : List available tables in a database
- merge : Merge results of incremental imports
- metastore : Run a standalone Sqoop metastore
- version : Display version information
[2] sqoop import : table → HDFS
1. 사용 방법 :
$ sqoop import (generic-args) (import-args)
$ sqoop-import (generic-args) (import-args)
[3] 인수 종류
1. 공통 인수들(Common Arguments)
- ---connect <jdbc-uri> : jdbc connect string(Database Connection URL)
- --connection-manager <class-name> : Specify connection manager class to use
- --driver <class-name> : Manually specify JDBC driver class to use(Database Driver Class Name)
- --hadoop-mapred-home <dir> : Override $HADOOP_MAPRED_HOME
- --help : 사용 지침
- --password-file : 인증 암호가 있는 파일 경로 설정
- -P : 콘솔에서 비밀번호(password) 읽음
- --password <password> : 인증 비밀번호(password) 설정
- --username <username> : 인증 유저명 설정
- --verbose : 작업하는 동안 정보 출력
- --connection-param-file <filename> : 연결하는데 필요한 파라미터들이 들어 있는 특성 파일
- --relaxed-isolation : Set connection transaction isolation to read uncommitted for the mappers.
--7.2.1. Connecting to a Database Server--
2. 유효성 검사 인수들(Validation Arguments)
- --validate : 복사된 데이터의 유효성을 검사하고 단일 테이블 복사만 지원
- --validator <class-name> : 사용할 Validator class를 구체화
- --validation-threshold <class-name> : 사용할 Validation threshold class를 구체화
- --validation-failurehandler <class-name> : 사용할 Validation failure handler class를 구체화
3. 중요 제어 인수들(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…> : 테이블에 넣을 컬럼들
- --delete-target-dir : 데이터를 가져와서 넣을 타겟 디렉토리가 존재한다면 삭제
- --direct : 데이터베이스가 있으면 direct connector를 사용
- --fetch-size <n> : 한 번에 데이터베이스로부터 읽을 entry의 수
- --inline-lob-limit <n> : inline LOB 최대 사이즈 설정
- -m,--num-mappers <n> : n개의 map task들을 병렬로 import 사용 → -m1 사용 권장?
- -e,--query <statement> : 쿼리 결과를 import
- --split-by <column-name> : 작업 단위를 분할하는 데 사용되는 테이블의 컬럼
- --split-limit <n> :
- --autoreset-to-one-mapper
- --table <table-name> : 읽을 테이블명([스키마.]테이블명)
- --target-dir <dir> : HDFS 대상 디렉토리
- --temporary-rootdir <dir>
- --warehouse-dir <dir>
- --where <where clause> : import에 사용할 where 절
- -z,--compress
- --compression-codec <c>
- --null-string <null-string> : string 타입 NULL 대신 들어갈 값 설정
- --null-non-string <null-string> : string이 아닌 타입에 NULL 대신 들어갈 값 설정
cf) Driver Class 관련 에러 발생 시 sqoop/lib에 jar가 있고 버전이 맞는지 확인!
[4] 테스트
1) text(default) data type으로 넣어서 create table 해서 데이터 업로드 성공한 명령어 예시
sqoop import --connect jdbc:mysql://***.***.***.***:**** --driver com.mysql.cj.jdbc.Driver --username **** --password ***** --query 'select * from default.sqoop_test_001 where $CONDITIONS' --split-by column01 --target-dir /warehouse/tablespace/managed/hive/hdfs_sqoop_test_001
위 명령어 실행 후에 테이블 생성하면 테이블로 볼 수 있음
→ 폴더가 이미 존재해있으면 안 됨
2) connection 테스트
sqoop list-databases --connect jdbc:mysql://***.***.***.***:**** --username **** --password *****
3) sql 파일을 활용한 방법
sqoop import \
--connect jdbc:mysql://loclhost:7777/db?zeroDateTimeBehavior=convertToNull \
--username scott \
--password tiger \
--query '`cat /~path/test_query.sql'\
--target-dir hdfs://localhost/user/hadoop/