콘텐츠로 이동

3. 기능#

이 장은 Altibase 하둡 커넥터의 기능을 예제와 함께 설명한다.

커맨드 라인 옵션#

Altibase 하둡 커넥터는 스쿱 기반으로 동작하기 때문에 스쿱이 제공하는 기능을 모두 지원한다. 이장은 일부 기능에 대해서만 설명하므로, 스쿱의 전체 기능은 Sqoop User Guide (v1.4.4)을 참고하도록 한다.

구문#

Altibase 하둡 커넥터를 실행하는 구문은 아래와 같다.

sqoop <command> --connect <url>
--driver <driver> 
--username <user> 
--password <password> 
--connection-manager    com.altibase.sqoop.manager.AltibaseManager

옵션#

옵션 설명
<command> 이 문서에서는 아래의 명령어만 기술하므로, 다른 커맨드에 대해서는 위에서 언급한 스쿱 문서를 참고하기 바란다.
export import list-databases list-tables
--connect <url> Altibase url을 명시한다.
jdbc:Altibase://*ip*:*port*/mydb
--driver <driver> Altibase의 JDBC 드라이버 클래스를 명시한다.
Altibase.jdbc.driver.AltibaseDriver
--username <user> 연결하려는 데이터베이스 사용자를 명시한다.
--password <password> 사용자의 패스워드를 명시한다.
--connection-manager <connector> Altibase 하둡 커넥터 클래스를 명시한다.
com.altibase.sqoop.manager.AltibaseManager

여기에 기술한 커맨드와 옵션 외에 다른 커맨드 또는 import 제어 옵션, export 제어 옵션 등에 대해서는 스쿱 사용자 가이드를 참고하기 바란다.


Import#

Import는 Altibase의 데이터를 HDFS 또는 Hive로 가져오는 기능이다. 이 절은 이러한 기능을 예제와 함께 설명한다.

텍스트 파일로 HDFS에 가져오기#

Altibase에 존재하는 특정 테이블의 데이터를 HDFS의 지정된 디렉토리에 텍스트 파일 형태로 저장하려면 sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.

% sqoop import 
--connect <url> 
--driver <jdbc_driver> 
--username <user> 
--password <password> 
--connection-manager com.altibase.sqoop.manager.AltibaseManager 
-table <table_name> 
-split-by <split_name>

저장되는 텍스트 파일은 기본적으로 CSV 형태이다. 아래 표의 옵션들을 사용해서 필드 종료 문자, 라인 종료 문자 같은 구분자들을 지정할 수 있다. 만약 사용자가 이 중에서 하나라도 지정하지 않으면 기본값이 사용된다.

옵션 설명 기본값
--enclosed-by 필드를 감싸는 문자로 필수 옵션이다. \"
--escaped-by 이스케이프 문자
--fields-terminated-by 필드 구분 문자 ,
--lines-terminated-by 라인 종료 문자 \n
--mysql-delimiters MySQL의 기본 구분자로 아래와 같다.
fields-terminated-by: ,
lines-terminated-by: \n
escaped-by: \
optionally-enclosed-by: '
--optionally-enclosed-by 필드를 감싸는 문자로 선택 옵션이다.

주의

필드 내에 라인 구분자, 필드 구분자가 포함되어 있는 경우, 큰 따옴표(") 같은 묶음 문자로 필드를 감싸 주어야 한다. 필드 내에 묶음 문자로 쓰이는 큰 따옴표(")가 포함된 경우에는 이스케이프 문자를 큰 따옴표 앞에 두어 묶음 문자가 아님을 표시해야 한다. 현재 sqoop에는 묶음 문자와 이스케이프 문자를 동일하게 지정하면 비정상적으로 동작하는 버그가 있기 때문에, Altibase 하둡 커넥터는 묶음 문자의 기본값만 큰 따옴표(")로 제공하고 이스케이프 문자는 사용자가 직접 지정하도록 지원한다.

Sequence 파일로 HDFS에 가져오기#

Altibase에 존재하는 특정 테이블의 데이터를 HDFS의 지정된 디렉토리에 Sequence 파일 형태로 저장하려면 sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.

% sqoop import 
--connect <url> 
--driver <jdbc_driver> 
--username <user> 
--password <password> 
--connection-manager com.altibase.sqoop.manager.AltibaseManager 
-table <table_name> 
-split-by <split_name> 
--as-sequencefile

Avro 파일로 HDFS에 가져오기#

Altibase에 존재하는 특정 테이블의 데이터를 HDFS의 지정된 디렉토리에 Avro 파일 형태로 저장하려면 sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.

% sqoop import 
--connect <url> 
--driver <jdbc_driver> 
--username <user> 
--password <password> 
--connection-manager com.altibase.sqoop.manager.AltibaseManager 
-table <table_name> 
-split-by <split_name> 
--as-avrodatafile

쿼리를 사용해서 HDFS에 가져오기#

사용자가 지정한 질의문으로 Altibase에 존재하는 특정 테이블의 데이터를 조회하여 HDFS에 저장하려면 sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.

% sqoop import 
--connect <url> 
--driver <jdbc_driver> 
--username <user> 
--password <password> 
--connection-manager com.altibase.sqoop.manager.AltibaseManager 
-table <table_name> 
-split-by <split_name> 
--boundary-query <query>

Hive에 가져오기#

Altibase에 존재하는 특정 테이블의 데이터를 Hive에 저장하려면 sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.

% sqoop import 
--connect <url> 
--driver <jdbc_driver> 
--username <user> 
--password <password> 
--connection-manager com.altibase.sqoop.manager.AltibaseManager 
-table <table_name> 
-split-by <split_name> 
--hive-import


Export#

Export는 HDFS의 데이터를 Altibase로 내보내는 기능이다. 옵션에 따라 데이터베이스에 데이터를 삽입하거나 기존 데이터를 갱신하는 동작이 수행된다.

데이터 삽입#

HDFS의 데이터를 Altibase의 특정 테이블에 저장하려면 sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.

% sqoop export 
-D sqoop.export.records.per.statement=<size> 
--connect <url> 
--driver <jdbc_driver> 
--username <user> 
--password <password> 
--connection-manager com.altibase.sqoop.manager.AltibaseManager 
-table <table_name> 
--export-dir <dir>

sqoop.export.records.per.statement의 값을 1보다 크게 지정하면 Altibase 하둡 커넥터는 배치 모드(batch mode)로 동작한다. 배치 모드에서는 한 번의 Execute 수행으로 여러 건의 레코드가 삽입된다. 이 옵션은 커맨드 옵션(export) 뒤에 다른 옵션들보다 먼저 나와야 한다. sqoop.export.records.per.statement의 값을 1로 지정하면 Altibase 하둡 커넥터가 배치 모드로 동작하지 않는다.

CSV 파일에서 데이터 삽입#

CSV 파일을 사용해서 export하는 경우, 구분자들을 지정하는 옵션을 사용할 수 있다. 사용 가능한 옵션에 대한 상세한 설명은 "텍스트 파일로 HDFS에 가져오기" 절을 참고하기 바란다.

배치 모드로 데이터 삽입#

Altibase JDBC 드라이버의 배치 모드 기능을 사용하여 HDFS의 데이터를 Altibase의 특정 테이블에 저장하려면 sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.

% sqoop export 
--connect <url> 
--driver <jdbc_driver> 
--username <user> 
--password <password> 
--connection-manager com.altibase.sqoop.manager.AltibaseManager 
-table <table_name> 
--export-dir <dir> 
--batch

--batch 옵션 지정 여부에 관계없이 Altibase 하둡 커넥터는 기본으로 배치 모드로 동작하며, 한 번의 Execute 수행으로 기본 100건의 레코드가 삽입된다. Altibase 하둡 커넥터가 배치 모드로 동작하지 않게 하려면, -D sqoop.export.records.per.statement 옵션을 1로 지정해야 한다.

데이터 갱신#

Altibase의 특정 테이블의 데이터를 HDFS의 데이터로 갱신하려면 sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.

% sqoop export 
--connect <url> 
--driver <jdbc_driver> 
--username <user> 
--password <password> 
--connection-manager com.altibase.sqoop.manager.AltibaseManager 
-table <table_name> 
--export-dir <dir> 
-update-key <column>

데이터 갱신 또는 삽입#

HDFS의 데이터가 Altibase에 존재하면 갱신하고, 존재하지 않으면 삽입하는 기능이다. sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.

% sqoop export 
--connect <url> 
--driver <jdbc_driver> 
--username <user> 
--password <password> 
--connection-manager com.altibase.sqoop.manager.AltibaseManager 
-table <table_name> 
--export-dir <dir> 
-update-key <column> 
--update-mode allowinsert

주의: 이 기능은 Altibase의 merge 구문을 이용하기 때문에, Altibase 하둡 커넥터가 버전 6.3.1 이상의 Altibase와 함께 동작할 때만 지원된다.

Staging-table을 이용한 데이터 삽입#

Sqoop은 export 처리를 여러 개의 트랜잭션으로 수행하기 때문에 일부 데이터는 커밋이 실패할 수도 있다. --staging-table 옵션은 이것을 방지하기 위한 것으로, HDFS의 데이터를 이 옵션에 지정한 테이블에 먼저 삽입한 후에, 이 테이블의 데이터를 Altibase의 대상 테이블로 이동하는 기능이다. sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.

% sqoop export 
--connect <url> 
--driver <jdbc_driver> 
--username <user> 
--password <password> 
--connection-manager com.altibase.sqoop.manager.AltibaseManager 
-table <table_name> 
--export-dir <dir> 
-update-key <column> 
--staging-table <table_name>


list-databases#

Altibase의 데이터베이스 목록을 조회하려면, sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.

% sqoop list-databases 
--connect <url> 
--driver <jdbc_driver> 
--username <user> 
--password <password> 
--connection-manager com.altibase.sqoop.manager.AltibaseManager


list-tables#

Altibase에 존재하는 테이블들을 조회하려면, sqoop 명령어와 함께 아래의 옵션들을 사용하면 된다.

% sqoop list-tables 
--connect <url> 
--driver <jdbc_driver> 
--username <user> 
--password <password> 
--connection-manager  com.altibase.sqoop.manager.AltibaseManager