sqoop 基础

说明:以下内容借鉴于【尚硅谷】大数据技术 ;

 

sqoop help

[vmuser@bd-c02 ~]$ sqoop help

 

 

 

sqoop help  list-databases

sqoop list-databases \
--connect jdbc:mysql://localhost:3306/test \
--username root \
--password root \

sqoop help  list-tables 

list-tables
sqoop list-tables \
--connect jdbc:mysql://localhost:3306/test \
--username root \
--password root \

sqoop help  import 

 1 sqoop import \
 2 --connect jdbc:mysql://localhost:3306/test \
 3 --username root \
 4 --password root \
 5 --table t_order_info \
 6 --hive-import
 7 
 8 增量导入数据到hive , mode=append
 9 sqoop import \
10 --connect jdbc:mysql://localhost:3306/test \
11 --username root \
12 --password root \
13 --table t_order_info \
14 --num-mappers 1 \
15 --fields-terminated-by "\t" \
16 --target-dir /user/hive/warehouse/hive_t_order_info \
17 --check-column id \
18 --incremental append \
19 --last-value 3
20 注意: append不能与--hive-等参数同时使用
增量导入数据到hdfs,mode=lastmodified
mysql> create table company.staff_timestamp(id int(4), name varchar(255), sex varchar(255), last_modified timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
mysql> insert into company.staff_timestamp (id, name, sex) values(1, 'AAA', 'female');
mysql> insert into company.staff_timestamp (id, name, sex) values(2, 'BBB', 'female');

先导入一部分数据:
$ bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff_timestamp \
--delete-target-dir \
--m 1

增量导入:
mysql> insert into company.staff_timestamp (id, name, sex) values(3, 'CCC', 'female');
sqoop import \
--connect jdbc:mysql://localhost:3306/test \
--username root \
--password root \
--table t_order_info \
--check-column last_modified \
--incremental lastmodified \
--last-value "2021-06-18 14:10:18" \
--m 1 \
--append

注意:
1.使用lastmodified方式导入数据要指定增量数据是要--append(追加)还是要--merge-key(合并)
2.last-value指定的值是会包含于增量导入的数据中

sqoop help  export

命令&参数:export
从 HDFS,HIVE,Hbase 导出到RDBMS
sqoop import \
--connect jdbc:mysql://localhost:3306/test \
--username root \
--password root \
--table t_order_info \
--export-dir /user/company \
--input-fields-terminated-by "\t" \
--num-mappers 1

sqoop help  job 

命令&参数:job
用来生成一个sqoop任务,生成后不会立即执行,需要手动执行。
$ bin/sqoop job \
--create myjob -- import-all-tables \
--connect jdbc:mysql://localhost:3306/test \
--username root \
--password root \
注意:
1.import-all-tables和它左边的"--"之间有一个空格 ;
2.如果需要连接metastore,则--meta-connect jdbc:hsqldb:hsql://linux01:16000/sqoop

查看job list
$ bin/sqoop job --list
执行job
$ bin/sqoop job --exec myjob   -- 在执行一个job时,如果需要手动输入数据库密码,可以做如下优化


<property>
    <name>sqoop.metastore.client.record.password</name>
    <value>true</value>
    <description>If true, allow saved passwords in the metastore.</description>
</property>

sqoop help  eval

1 命令&参数:eval
2 可以快速的使用SQL语句对关系型数据库进行操作,经常用于在import数据之前,了解一下SQL语句是否正确,数据是否正常,并可以将结果显示在控制台。
3 sqoop eval \
4 --connect jdbc:mysql://localhost:3306/test \
5 --username root \
6 --password root \
7 --query "SELECT * FROM t_order_info"

sqoop help codegen

codegen:将关系型数据库中的表映射为一个Java类,在该类中有各列对应的各个字段。
sqoop codegen \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--bindir /home/admin/Desktop/staff \
--class-name Staff \
--fields-terminated-by "\t"

sqoop help merge

merge:将HDFS中不同目录下面的数据合并在一起并放入指定目录中

new_staff
1       AAA     male
2       BBB     male
3       CCC     male
4       DDD     male
old_staff
1       AAA     female
2       CCC     female
3       BBB     female
6       DDD     female
注意:上边数据的列之间的分隔符应该为\t,行与行之间的分割符为\n,如果直接复制,请检查之。

创建JavaBean:
$ bin/sqoop codegen \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--bindir /home/admin/Desktop/staff \
--class-name Staff \
--fields-terminated-by "\t"

开始合并:
$ bin/sqoop merge \
--new-data /test/new/ \
--onto /test/old/ \
--target-dir /test/merged \
--jar-file /home/admin/Desktop/staff/Staff.jar \
--class-name Staff \
--merge-key id
结果:
1    AAA    MALE
2    BBB    MALE
3    CCC    MALE
4    DDD    MALE
6    DDD    FEMALE

sqoop help  create-hive-table

create-hive-table:生成与关系数据库表结构对应的hive表结构
sqoop create-hive-table \
--connect jdbc:mysql://localhost:3306/test \
--username root \
--password root \
--table t_order_info \
--hive-table hive_t_order_info

sqoop help import-all-tables

1 import-all-tables :可以将RDBMS中的所有表导入到HDFS中,每一个表都对应一个HDFS目录
2 sqoop import-all-tables \
3 --connect jdbc:mysql://localhost:3306/test \
4 --username root \
5 --password root \
6 --warehouse-dir /all_tables

 

 执行sqoop脚本

 1 vi opt/job_HDFS2RDBMS.opt
 2 
 3 export
 4 --connect
 5 jdbc:mysql://hadoop102:3306/company
 6 --username
 7 root
 8 --password
 9 000000
10 --table
11 staff
12 --num-mappers
13 1
14 --export-dir
15 /user/hive/warehouse/staff_hive
16 --input-fields-terminated-by
17 "\t"
18 
19 
20 
21 sqoop --options-file opt/job_HDFS2RDBMS.opt

 

 

 

 

 

 

 

posted @ 2022-03-24 14:59  linbo.yang  阅读(78)  评论(0编辑  收藏  举报