데이터 마이그레이션 도구를 사용 Sqoop을

기사의 저자 : foochane 

원본 링크 : https://foochane.cn/article/2019063001.html

간단히 MySQL로 HDFS / HIVE Sqoop을 데이터에 대한 데이터를 Sqoop을 Sqoop을 데이터 마이그레이션 도구 Sqoop을 사용하여

1 Sqoop을 간단한

Sqoop을 아파치입니다 도구는 "하둡 및 관계형 데이터베이스 서버 사이의 데이터를 전송"입니다. 데이터를 가져 오기 및 내보내기하십시오.

Sqoop을

  • 데이터를 가져 오기 : MySQL은, 하둡 HDFS, HIVE, HBase를 다른 데이터 저장 시스템에 오라클 데이터 가져 오기;
  • 데이터 내보내기 : 관계형 데이터베이스에 하둡 파일 시스템에서 데이터 내보내기 MySQL과 같은

Sqoop을 작동 메커니즘을 가져 오거나 주로 inputformat에 및 사용자 정의 outputformat 맵리 듀스 번역에 맵리 듀스 프로그램으로 번역 수출 명령이 구현된다.

2 Sqoop을 설치

처음 설치 자바 환경과 하둡 환경을 Sqoop을 설치하기 전에.

단지 공구 Sqoop을, 해당 데이터베이스 캔에 연결될 수만큼 하둡 Java 환경 환경으로하고, 그 노드에 탑재 될 수있다.

2.1 다운로드 및 압축 해제

다운로드 : HTTP : //mirror.bit.edu.cn/apache/sqoop/
다운로드 : Sqoop을-1.4.7.bin__hadoop-2.6.0.tar.gz

설치 디렉토리를 추출하려면

2.2 구성 파일을 수정

sqoop-env-template.sh사본은 이름 변경 sqoop-env.sh, 파일을 sqoop-env.sh다음 파일을 추가합니다 :

export HADOOP_COMMON_HOME=/usr/local/bigdata/hadoop-2.7.1
export HADOOP_MAPRED_HOME=/usr/local/bigdata/hadoop-2.7.1
export HIVE_HOME=/usr/local/bigdata/hive-2.3.5

MySQL의 JDBC를 시작 2.3 설치

Sqoop을의 lib 디렉토리에 MySQL의 커넥터 - 자바-5.1.45.jar.

$ sudo apt-get install libmysql-java #之前已经装过了
$ ln -s /usr/share/java/mysql-connector-java-5.1.45.jar /usr/local/bigdata/sqoop-1.4.7/lib

당신은 또한 MySQL의 커넥터 - 자바-5.1.45.jar 자신의 손을 복사 할 수 있습니다.

2.4 Sqoop을 확인

보기 Sqoop을 버전

$ bin/sqoop-version
Warning: /usr/local/bigdata/sqoop-1.4.7/bin/../../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /usr/local/bigdata/sqoop-1.4.7/bin/../../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
19/06/30 03:03:07 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7
Sqoop 1.4.7
git commit id 2328971411f57f0cb683dfb79d19d4d19d185dd8
Compiled by maugli on Thu Dec 21 15:59:58 STD 20

이 경고의 수 있지만 그 생각을 개최한다.

서비스 데이터베이스 MySQL의 사이의 연결을 확인 Sqoop을 :

$ bin/sqoop-list-databases --connect jdbc:mysql://Master:3306 --username hiveuser --password 123456
$ bin/sqoop-list-tables --connect jdbc:mysql://Master:3306/metastore --username hiveuser --password 123456

3 Sqoop을 데이터 가져 오기

HDFS 3.1 MySQL의 안내 데이터

먼저 MySQL의에서 테이블을 구축하기 위해 테스트 데이터를 삽입;

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `emp`
-- ----------------------------
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(100) DEFAULT NULL,
  `deg` varchar(100) DEFAULT NULL,
  `salary` int(11) DEFAULT NULL,
  `dept` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records of emp
-- ----------------------------
INSERT INTO `emp` VALUES ('1201', 'gopal', 'manager', '50000', 'TP');
INSERT INTO `emp` VALUES ('1202', 'manisha', 'Proof reader', '50000', 'TP');
INSERT INTO `emp` VALUES ('1203', 'khalil', 'php dev', '30000', 'AC');
INSERT INTO `emp` VALUES ('1204', 'prasanth', 'php dev', '30000', 'AC');
INSERT INTO `emp` VALUES ('1205', 'kranthi', 'admin', '20000', 'TP');

-- ----------------------------
-- Table structure for `emp_add`
-- ----------------------------
DROP TABLE IF EXISTS `emp_add`;
CREATE TABLE `emp_add` (
  `id` int(11) DEFAULT NULL,
  `hno` varchar(100) DEFAULT NULL,
  `street` varchar(100) DEFAULT NULL,
  `city` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records of emp_add
-- ----------------------------
INSERT INTO `emp_add` VALUES ('1201', '288A', 'vgiri', 'jublee');
INSERT INTO `emp_add` VALUES ('1202', '108I', 'aoc', 'sec-bad');
INSERT INTO `emp_add` VALUES ('1203', '144Z', 'pgutta', 'hyd');
INSERT INTO `emp_add` VALUES ('1204', '78B', 'old city', 'sec-bad');
INSERT INTO `emp_add` VALUES ('1205', '720X', 'hitec', 'sec-bad');

-- ----------------------------
-- Table structure for `emp_conn`
-- ----------------------------
DROP TABLE IF EXISTS `emp_conn`;
CREATE TABLE `emp_conn` (
  `id` int(100) DEFAULT NULL,
  `phno` varchar(100) DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records of emp_conn
-- ----------------------------
INSERT INTO `emp_conn` VALUES ('1201', '2356742', '[email protected]');
INSERT INTO `emp_conn` VALUES ('1202', '1661663', '[email protected]');
INSERT INTO `emp_conn` VALUES ('1203', '8887776', '[email protected]');
INSERT INTO `emp_conn` VALUES ('1204', '9988774', '[email protected]');
INSERT INTO `emp_conn` VALUES ('1205', '1231231', '[email protected]');

가져 오기 :

bin/sqoop import   \
--connect jdbc:mysql://Master:3306/test   \
--username root  \
--password root   \
--target-dir /sqooptest \
--fields-terminated-by ',' \
--table emp   \
--m 2 \
--split-by id;
  • --connect : 데이터베이스를 지정합니다
  • --username : 사용자 이름을 지정합니다
  • --password : 암호를 지정합니다
  • --table 표를 가져올 수
  • --target-DIR을 : 디렉토리 지정 HDFS를
  • --fields-종료-기준 : 지정된 파일 구분
  • --m : 하나 이상은, 분할하여 2 파라미터으로 지정한 지정해야하는 경우는 최종 문서는 두 제조 될 것이다, MapTask 수를 지정
  • --split 별 : 단편 지정된 필드

데이터 테이블은 대형이에 대한 설정 지정하지 있지 않은 경우 --m의 매개 변수를

관심과 실 대신 로컬로 실행의 이전 수입 및 원사를 제출하기 전에 HDFS가 실행 시작합니다.

예 :

$ bin/sqoop import   --connect jdbc:mysql://Master:3306/test   --username hadoop  --password 123456   --target-dir /sqooptest --fields-terminated-by ',' --table emp  --m 1  --split-by id;
Warning: /usr/local/bigdata/sqoop-1.4.7/bin/../../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /usr/local/bigdata/sqoop-1.4.7/bin/../../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
19/06/30 05:00:43 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7
19/06/30 05:00:43 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
19/06/30 05:00:44 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
19/06/30 05:00:44 INFO tool.CodeGenTool: Beginning code generation
Sun Jun 30 05:00:45 UTC 2019 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
19/06/30 05:00:46 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `emp` AS t LIMIT 1
19/06/30 05:00:46 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `emp` AS t LIMIT 1
19/06/30 05:00:46 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /usr/local/bigdata/hadoop-2.7.1
Note: /tmp/sqoop-hadoop/compile/cd17c36add75dfe67edd3facf7538def/emp.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
19/06/30 05:00:56 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-hadoop/compile/cd17c36add75dfe67edd3facf7538def/emp.jar
19/06/30 05:00:56 WARN manager.MySQLManager: It looks like you are importing from mysql.
19/06/30 05:00:56 WARN manager.MySQLManager: This transfer can be faster! Use the --direct
19/06/30 05:00:56 WARN manager.MySQLManager: option to exercise a MySQL-specific fast path.
19/06/30 05:00:56 INFO manager.MySQLManager: Setting zero DATETIME behavior to convertToNull (mysql)
19/06/30 05:00:56 INFO mapreduce.ImportJobBase: Beginning import of emp
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hadoop-2.7.1/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/bigdata/hbase-2.0.5/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
19/06/30 05:00:58 INFO Configuration.deprecation: mapred.jar is deprecated. Instead, use mapreduce.job.jar
19/06/30 05:01:06 INFO Configuration.deprecation: mapred.map.tasks is deprecated. Instead, use mapreduce.job.maps
19/06/30 05:01:07 INFO client.RMProxy: Connecting to ResourceManager at Master/192.168.233.200:8032
Sun Jun 30 05:01:55 UTC 2019 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
19/06/30 05:01:56 INFO db.DBInputFormat: Using read commited transaction isolation
19/06/30 05:01:56 INFO mapreduce.JobSubmitter: number of splits:1
19/06/30 05:01:58 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1561868076549_0002
19/06/30 05:02:05 INFO impl.YarnClientImpl: Submitted application application_1561868076549_0002
19/06/30 05:02:06 INFO mapreduce.Job: The url to track the job: http://Master:8088/proxy/application_1561868076549_0002/
19/06/30 05:02:06 INFO mapreduce.Job: Running job: job_1561868076549_0002
19/06/30 05:02:47 INFO mapreduce.Job: Job job_1561868076549_0002 running in uber mode : false
19/06/30 05:02:48 INFO mapreduce.Job:  map 0% reduce 0%
19/06/30 05:03:35 INFO mapreduce.Job:  map 100% reduce 0%
19/06/30 05:03:36 INFO mapreduce.Job: Job job_1561868076549_0002 completed successfully
19/06/30 05:03:37 INFO mapreduce.Job: Counters: 30
        File System Counters
                FILE: Number of bytes read=0
                FILE: Number of bytes written=135030
                FILE: Number of read operations=0
                FILE: Number of large read operations=0
                FILE: Number of write operations=0
                HDFS: Number of bytes read=87
                HDFS: Number of bytes written=151
                HDFS: Number of read operations=4
                HDFS: Number of large read operations=0
                HDFS: Number of write operations=2
        Job Counters
                Launched map tasks=1
                Other local map tasks=1
                Total time spent by all maps in occupied slots (ms)=42476
                Total time spent by all reduces in occupied slots (ms)=0
                Total time spent by all map tasks (ms)=42476
                Total vcore-seconds taken by all map tasks=42476
                Total megabyte-seconds taken by all map tasks=43495424
        Map-Reduce Framework
                Map input records=5
                Map output records=5
                Input split bytes=87
                Spilled Records=0
                Failed Shuffles=0
                Merged Map outputs=0
                GC time elapsed (ms)=250
                CPU time spent (ms)=2700
                Physical memory (bytes) snapshot=108883968
                Virtual memory (bytes) snapshot=1934733312
                Total committed heap usage (bytes)=18415616
        File Input Format Counters
                Bytes Read=0
        File Output Format Counters
                Bytes Written=151
19/06/30 05:03:37 INFO mapreduce.ImportJobBase: Transferred 151 bytes in 150.6495 seconds (1.0023 bytes/sec)
19/06/30 05:03:37 INFO mapreduce.ImportJobBase: Retrieved 5 records.

가져 오기 성공 여부를 확인합니다 :

$ hdfs dfs -cat /sqooptest/part-m-*
1201,gopal,manager,50000,TP
1202,manisha,Proof reader,50000,TP
1203,khalil,php dev,30000,AC
1204,prasanth,php dev,30000,AC
1205,kranthi,admin,20000,TP

하이브 데이터 3.2 MySQL의 가이드

명령 :

bin/sqoop import \
--connect jdbc:mysql://Master:3306/test \
--username hadoop  \
--password 123456  \
--table emp  \
--hive-import  \
--split-by id  \
--m 1;

하이브로 수입, 당신은 추가 할 필요가 --hive-import지정하지 않고 매개 변수를 --target-dirHDFS에 같은 다른 매개 변수를.

가져 오기 테이블 데이터는 3.3 부분 집합

때때로 우리는 또한 데이터 테이블로 일부 데이터를 지원 Sqoop을, 데이터 테이블의 모든 데이터를 가져올 필요가 없습니다.

Sqoop을 사용하는 것이 가능하다 where문. where조항의 일부. 그것은 자신의 데이터베이스 서버에서 해당 SQL 쿼리를 수행하고 HDFS의 대상 디렉토리에 결과를 저장합니다.

다음과 같이 where 절 구문은 다음과 같습니다

--where <condition>

다음 명령은 일부 emp_add 테이블 데이터를 가져옵니다. 시내 : 초 - 나쁜

bin/sqoop import \
--connect jdbc:mysql://Master:3306/test \
--username hadoop \
--password 123456 \
--where "city ='sec-bad'" \
--target-dir /wherequery \
--table emp_add \
 --m 1

양자 택일로, 당신은 선택 문을 사용할 수 있습니다 :

bin/sqoop import \
--connect jdbc:mysql://Master:3306/test \
--username hadoop \
--password 123456 \
--target-dir /wherequery2 \
--query 'select id,name,deg from emp WHERE id>1207 and $CONDITIONS' \
--split-by id \
--fields-terminated-by '\t' \
--m 2

3.4 증분 가져 오기

테이블의 증분 가져 오기 가져 오기 전용 기술 행이 새로 추가.

Sqoop을 두 델타 MySQL이 특정 열을 증가시켜, 즉 벌집 형태 번 APPEND에 도입 지원한다. 다른 종류의 타임 스탬프를 기반으로합니다.

3.4.1 APPEND

다음 매개 변수를 지정합니다 :

--incremental append  
--check-column num_id 
--last-value 0 

마지막 값의 위치를 ​​지정된 시간 - --check 열은 지정된 필드 증가를 나타낸다

예를 들면 :

bin/sqoop import \
--connect jdbc:mysql://Master:3306/test \
--username hadoop \
--password 123456 \
--table emp --m 1 \
--incremental append \
--check-column id \
--last-value 1208

3.4.2 타임 스탬프에 따라

명령은 다음 매개 변수를 추가합니다 :

--incremental lastmodified 
--check-column created 
--last-value '2012-02-01 11:0:00' 

그것은 유일한 수입이다 created보다 더 2012-02-01 11:0:00큰 데이터.

4 Sqoop을 데이터 내보내기

데이터는 RDBMS 데이터베이스에 HDFS 파일에서 파생 목표 테이블 전에 수출 대상 데이터베이스에 존재해야합니다. 기본 동작은 INSERT 문을 사용하여 데이터 파일에서 테이블에 삽입됩니다. 업데이트 모드는 테이블 데이터 업데이트 UPDATE 문 생성
구문을

$ sqoop export (generic-args) (export-args) 

가져 오기 프로세스

1, 먼저 수동으로 대상 테이블에 MySQL을 작성해야

mysql> USE db;
mysql> CREATE TABLE employee ( 
   id INT NOT NULL PRIMARY KEY, 
   name VARCHAR(20), 
   deg VARCHAR(20),
   salary INT,
   dept VARCHAR(10));

2 내보내기 명령

bin/sqoop export \
--connect jdbc:mysql://Master:3306/test \
--username root \
--password root \
--table employee \
--export-dir /user/hadoop/emp/

3. 테이블 MySQL의 명령 줄 있는지 확인합니다.

mysql>select * from employee;

주어진 데이터 저장 성공하면, 아래 직원 테이블의 데이터를 찾을 수 있습니다.

+------+--------------+-------------+-------------------+--------+
| Id   | Name         | Designation | Salary            | Dept   |
+------+--------------+-------------+-------------------+--------+
| 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     |
+------+--------------+-------------+-------------------+--------+

추천

출처www.cnblogs.com/foochane/p/11110583.html