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