sqoop的常用命令
程序员文章站
2024-02-29 11:17:04
...
1. 基础命令
列出MySQL中有那些数据库
sqoop list-databases \
--connect jdbc:mysql://hadoop01:3306/ \
--username hadoop \
--password root \
列出MySQL中的数据库有哪些表
sqoop list-tables \
--connect jdbc:mysql://hadoop01:3306/mysql \
--username hadoop \
--password root \
在hive中创建一个跟MySQL数据库表中一样的表
create-hive-table
--connect jdbc:mysql://hadoop01:3306/test
--username hadoop
--password root
--table book
--hive-table test_hk
2.sqoop的数据导入
语法:sqoop import (generic-args) (import-args)
常用参数
-connect jdbc 连接地址
--connection-manager 连接管理者
--driver 驱动类
--hadoop-mapred-home $HADOOP_MAPRED_HOME
--help help 信息
-P 从命令行输入密码
-m 指定maptask的个数,指定maptask的并行度
--target-dir 指定导出数据在hdfs上的存储目录
--fields-terminated-by 指定每条记录中字段之间的分隔符
--where 指定查询sql的where条件
--query 指定sql查询
--columns 指定查询的列 (不指定默认导出所有的列)
--password 密码
--username 账号
--verbose 打印流程信息
--connection-param-file 可选参数
MySQL ---> HDFS
#不指定分隔符和路径
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \ #指定连接
--username hadoop \ #指定MySQL的用户名
-password root \ #指定MySQL的密码
--table book \ #指定导出的MySQL的表
-m 1 #启动一个maptask
#ps:如果没有指定文件的存储目录,那么默认的会保存在hdfs上的/user/用户/book 目录中,默认的字段的分隔符逗号。
#指定导入路径和分割符
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username hadoop \
--password root \
--table book \
--target-dir /user/hadoop/book \
--fields-terminated-by '\t' \
-m 1
#导入where的结果
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username hadoop \
--password root \
--where "bid>2" \
--table book \
--target-dir /user/hadoop/book1 \
-m 1
ps:where后的条件,用双引号,如果条件的字段为string则里面使用单引号
#导入query结果数据
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username hadoop \
--password root \
--target-dir /user/hadoop/book3 \
--query 'select * from book where 1=1 and $CONDITIONS' \
--split-by bid \ #指定maptask切分的列,列的值.hashcode/maptask的个数
--fields-terminated-by '\t' \
-m 1
ps:
1.query外层使用单引号,SQL 语句当中的条件使用双引号,否则会报错;
2.在使用query时,必须有where子句,并且必须加入 and $CONDITIONS ,否则会报错
3.--query不能和--where、--columns一起使用的
4.--query sql语句,放入双引号中需要加转义
MySQL ---> hive
Sqoop导入关系型数据到hive,的过程是先导入hdfs中,然后在load到hive。
#普通导入
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username hadoop \
--password root \
--table book \
--hive-import \
-m 1
ps:导入数据到hive表中时,默认在default库下,表名和MySQL导入的表名一样。,默认采用'\u0001'分隔。
#全量集
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username hadoop \
--password root \
--table book \
--fields-terminated-by '\t' \ #列分割符
--lines-terminated-by '\n' \ #行分隔符 ,默认也是\n
--hive-import \
--hive-overwrite \ #覆盖导入
--create-hive-table \ #创建表(默认也会自动创建表)
--hive-table test.book \ #hive的表名
--delete-target-dir #删除中间存放的临时目录
ps:表会自动创建,但是库不会,所以在执行语句前,一定要保证hive的数据库存在,否则会把报错。
#增量导入,增量数据导入仅导入新添加的行
#它需要添加 'incremental' , 'check-column', 和 'last-value' 选项来执行增量导入
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username hadoop \
--password root \
--table book \
--target-dir /user/hadoop/book \
--incremental append \ #指定是增量导入
--check-column bid \ #指定增量的列
--last-value 500 \ #指定上一次的结束的列的值,(是从>500开始)一直到末尾
-m 1
ps:
1.--incremental有两个值,append必须指定增量的列,指定使用--check-column(一般是MySQL的主键);lastmodified,最后一次修改表的时间
2.增量备份如果想要导入hive中,只能指定--target-dir,导入到存放表的目录下,默认的hive不支持增量导入(即不能添加--hive-import)
MySQL ---> hbase
#sqoop import \
--connect jdbc:mysql://hadoop02:3306/mysql \
--username root \
--password root \
--table help_keyword \
--hbase-table new_help_keyword \
--column-family person \
--hbase-row-key help_keyword_id
#字段解释
--connect jdbc:mysql://hadoop04:3306/mysql 表示远程或者本地 Mysql 服务的 URI
--hbase-create-table 表示在 HBase 中建立表。
--hbase-table new_help_keyword 表示在 HBase 中建立表 new_help_keyword。
--hbase-row-key help_keyword_id 表示hbase表的rowkey是mysql表的help_keyword_id
字段。
--column-family person 表示在表 new_help_keyword 中建立列族 person。
--username 'root' 表示使用用户 root 连接 mysql。
--password 'root' 连接 mysql 的用户密码
--table help_keyword 表示导出 mysql 数据库的 help_keyword 表。
3.sqoop的数据导出
语法:sqoop export (generic-args) (export-args)
常用参数:
--direct 快速导入
--export-dir HDFS 导出数据的目录
-m,--num-mappers 都少个 map 线程
--table 导出哪个表
--call 存储过程
--update-key 通过哪个字段来判断更新
--update-mode 插入模式,默认是只更新,可以设置为 allowinsert.
--input-null-string 字符类型 null 处理
--input-null-non-string 非字符类型 null 处理
--staging-table 临时表
--clear-staging-table 清空临时表
--batch 批量模式
HDFS ---> MySQL
sqoop export \
--connect jdbc:mysql://hadoop01:3306/test \
--username hadoop \
--password root \
--table book \
--export-dir /sqoopdata \
--fields-terminated-by ','
hive----> MySQL
sqoop export \
--connect jdbc:mysql://hadoop01:3306/test \
--username hadoop \
--password root \
--table book \
--export-dir /user/hive/warehouse/uv/dt=2011-08-03 \
--input-fileds-terminated-by '\t'
hbase---->MySQL
默认的没有命令直接将hbase中的数据导入到MySQL,因为在hbase中的表数据量通常比较大,如果一次性导入到MySQL,可能导致MySQL直接崩溃。
但是可以用别的办法进行导入:
- 将 Hbase 数据,扁平化成 HDFS 文件,然后再由 sqoop 导入
- 将 Hbase 数据导入 Hive 表中,然后再导入 mysql
- 直接使用 Hbase 的 Java API 读取表数据,直接向 mysql 导入,不需要使用 sqoop
推荐阅读
-
spring cloud zuul修改请求url的方法
-
写一个宏,计算结构体中某变量相对于首地址的偏移和写一个宏,可以将一个整数字的奇数位和偶数位交换
-
MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)
-
sqoop的常用命令
-
Android可循环显示图像的Android Gallery组件用法实例
-
Java Swing中的工具栏(JToolBar)和分割面版(JSplitPane)组件使用案例
-
通过Sqoop将关系型数据库表(MySQL)导入Hive
-
全面解析Android中对EditText输入实现监听的方法
-
详解SpringMVC 自动封装枚举类的方法
-
Java中避免空指针异常的方法