Sqoop-가져 오기
이 장에서는 MySQL 데이터베이스에서 Hadoop HDFS로 데이터를 가져 오는 방법에 대해 설명합니다. '가져 오기 도구'는 RDBMS에서 HDFS로 개별 테이블을 가져옵니다. 테이블의 각 행은 HDFS에서 레코드로 처리됩니다. 모든 레코드는 텍스트 파일에 텍스트 데이터로 저장되거나 Avro 및 Sequence 파일에 이진 데이터로 저장됩니다.
통사론
다음 구문은 데이터를 HDFS로 가져 오는 데 사용됩니다.
$ sqoop import (generic-args) (import-args)
$ sqoop-import (generic-args) (import-args)
예
다음과 같은 세 테이블의 예를 살펴 보겠습니다. emp, emp_add, 및 emp_contact, MySQL 데이터베이스 서버의 userdb라는 데이터베이스에 있습니다.
세 개의 테이블과 그 데이터는 다음과 같습니다.
emp :
신분증 | 이름 | 도 | 봉급 | 부서 |
---|---|---|---|---|
1201 | 고팔 | 매니저 | 50,000 | TP |
1202 | Manisha | 증거 판독기 | 50,000 | TP |
1203 년 | 칼릴 | PHP 개발 | 30,000 | AC |
1204 | 프라 산스 | PHP 개발 | 30,000 | AC |
1204 | Kranthi | 관리자 | 20,000 | TP |
emp_add :
신분증 | hno | 거리 | 시티 |
---|---|---|---|
1201 | 288A | vgiri | 희년 |
1202 | 108I | AOC | 초-나쁜 |
1203 년 | 144Z | Pgutta | 하이드 |
1204 | 78B | 오래된 도시 | 초-나쁜 |
1205 년 | 720X | 하이텍 | 초-나쁜 |
emp_contact :
신분증 | phno | 이메일 |
---|---|---|
1201 | 2356742 | [email protected] |
1202 | 1661663 | [email protected] |
1203 년 | 8887776 | [email protected] |
1204 | 9988774 | [email protected] |
1205 년 | 1231231 | [email protected] |
테이블 가져 오기
Sqoop 도구 'import'는 테이블 데이터를 테이블에서 Hadoop 파일 시스템으로 텍스트 파일 또는 이진 파일로 가져 오는 데 사용됩니다.
다음 명령을 사용하여 emp MySQL 데이터베이스 서버에서 HDFS로 테이블.
$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp --m 1
성공적으로 실행되면 다음 출력이 표시됩니다.
14/12/22 15:24:54 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5
14/12/22 15:24:56 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
14/12/22 15:24:56 INFO tool.CodeGenTool: Beginning code generation
14/12/22 15:24:58 INFO manager.SqlManager: Executing SQL statement:
SELECT t.* FROM `emp` AS t LIMIT 1
14/12/22 15:24:58 INFO manager.SqlManager: Executing SQL statement:
SELECT t.* FROM `emp` AS t LIMIT 1
14/12/22 15:24:58 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /usr/local/hadoop
14/12/22 15:25:11 INFO orm.CompilationManager: Writing jar file:
/tmp/sqoop-hadoop/compile/cebe706d23ebb1fd99c1f063ad51ebd7/emp.jar
-----------------------------------------------------
-----------------------------------------------------
14/12/22 15:25:40 INFO mapreduce.Job: The url to track the job:
http://localhost:8088/proxy/application_1419242001831_0001/
14/12/22 15:26:45 INFO mapreduce.Job: Job job_1419242001831_0001 running in uber mode :
false
14/12/22 15:26:45 INFO mapreduce.Job: map 0% reduce 0%
14/12/22 15:28:08 INFO mapreduce.Job: map 100% reduce 0%
14/12/22 15:28:16 INFO mapreduce.Job: Job job_1419242001831_0001 completed successfully
-----------------------------------------------------
-----------------------------------------------------
14/12/22 15:28:17 INFO mapreduce.ImportJobBase: Transferred 145 bytes in 177.5849 seconds
(0.8165 bytes/sec)
14/12/22 15:28:17 INFO mapreduce.ImportJobBase: Retrieved 5 records.
HDFS에서 가져온 데이터를 확인하려면 다음 명령을 사용하십시오.
$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*
그것은 당신에게 보여줍니다 emp 테이블 데이터와 필드는 쉼표 (,)로 구분됩니다.
1201, gopal, manager, 50000, TP
1202, manisha, preader, 50000, TP
1203, kalil, php dev, 30000, AC
1204, prasanth, php dev, 30000, AC
1205, kranthi, admin, 20000, TP
대상 디렉터리로 가져 오기
Sqoop 가져 오기 도구를 사용하여 테이블 데이터를 HDFS로 가져 오는 동안 대상 디렉터리를 지정할 수 있습니다.
다음은 Sqoop 가져 오기 명령에 대한 옵션으로 대상 디렉터리를 지정하는 구문입니다.
--target-dir <new or exist directory in HDFS>
다음 명령은 가져 오기에 사용됩니다. emp_add 테이블 데이터를 '/ queryresult'디렉토리에 저장합니다.
$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp_add \
--m 1 \
--target-dir /queryresult
다음 명령은 / queryresult 디렉토리 형식으로 가져온 데이터를 확인하는 데 사용됩니다. emp_add 표.
$ $HADOOP_HOME/bin/hadoop fs -cat /queryresult/part-m-*
쉼표 (,)로 구분 된 필드가있는 emp_add 테이블 데이터가 표시됩니다.
1201, 288A, vgiri, jublee
1202, 108I, aoc, sec-bad
1203, 144Z, pgutta, hyd
1204, 78B, oldcity, sec-bad
1205, 720C, hitech, sec-bad
테이블 데이터의 하위 집합 가져 오기
Sqoop 가져 오기 도구의 'where'절을 사용하여 테이블의 하위 집합을 가져올 수 있습니다. 각 데이터베이스 서버에서 해당 SQL 쿼리를 실행하고 그 결과를 HDFS의 대상 디렉터리에 저장합니다.
where 절의 구문은 다음과 같습니다.
--where <condition>
다음 명령은 하위 집합을 가져 오는 데 사용됩니다. emp_add테이블 데이터. 서브 세트 쿼리는 Secunderabad 도시에 거주하는 직원 ID와 주소를 검색하는 것입니다.
$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp_add \
--m 1 \
--where “city =’sec-bad’” \
--target-dir /wherequery
다음 명령은 / wherequery 디렉토리에서 가져온 데이터를 확인하는 데 사용됩니다. emp_add 표.
$ $HADOOP_HOME/bin/hadoop fs -cat /wherequery/part-m-*
그것은 당신에게 보여줄 것입니다 emp_add 쉼표 (,)로 구분 된 필드가있는 테이블 데이터.
1202, 108I, aoc, sec-bad
1204, 78B, oldcity, sec-bad
1205, 720C, hitech, sec-bad
증분 가져 오기
증분 가져 오기는 테이블에 새로 추가 된 행만 가져 오는 기술입니다. 증분 가져 오기를 수행하려면 'incremental', 'check-column'및 'last-value'옵션을 추가해야합니다.
다음 구문은 Sqoop 가져 오기 명령의 증분 옵션에 사용됩니다.
--incremental <mode>
--check-column <column name>
--last value <last check column value>
새로 추가 된 데이터를 emp 표는 다음과 같습니다-
1206, satish p, grp des, 20000, GR
다음 명령은 서버에서 증분 가져 오기를 수행하는 데 사용됩니다. emp 표.
$ sqoop import \
--connect jdbc:mysql://localhost/userdb \
--username root \
--table emp \
--m 1 \
--incremental append \
--check-column id \
-last value 1205
다음 명령은 다음에서 가져온 데이터를 확인하는 데 사용됩니다. emp 테이블을 HDFS emp / 디렉토리에 추가합니다.
$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*
그것은 당신에게 보여줍니다 emp 쉼표 (,)로 구분 된 필드가있는 테이블 데이터.
1201, gopal, manager, 50000, TP
1202, manisha, preader, 50000, TP
1203, kalil, php dev, 30000, AC
1204, prasanth, php dev, 30000, AC
1205, kranthi, admin, 20000, TP
1206, satish p, grp des, 20000, GR
다음 명령은 수정되거나 새로 추가 된 행을 확인하는 데 사용됩니다. emp 표.
$ $HADOOP_HOME/bin/hadoop fs -cat /emp/part-m-*1
새로 추가 된 행을 emp 쉼표 (,)로 구분 된 필드가있는 테이블.
1206, satish p, grp des, 20000, GR