千家信息网

sqoop的常用命令

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,1. 基础命令列出MySQL中有那些数据库sqoop list-databases \ --connect jdbc:mysql://hadoop01:3306/ \--username hadoo
千家信息网最后更新 2024年11月22日sqoop的常用命令

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 1ps: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 1ps: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 1ps:导入数据到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 1ps: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直接崩溃。
但是可以用别的办法进行导入:

  1. 将 Hbase 数据,扁平化成 HDFS 文件,然后再由 sqoop 导入
  2. 将 Hbase 数据导入 Hive 表中,然后再导入 mysql
  3. 直接使用 Hbase 的 Java API 读取表数据,直接向 mysql 导入,不需要使用 sqoop
0