sqoop语句

导入指定输出路径、指定数据分隔符
sqoop import --connect jdbc:mysql://hadoop01:3306/test --username root --password root --table temp --target-dir ‘/123’ --fields-terminated-by ‘\t’(mysql必须要设置主键才能成功,123不能存在)

指定Map数量 -m
sqoop import --connect jdbc:mysql://192.168.1.101:3306/test --username root --password root --table temp --target-dir ‘/sqoop/table/1’ --fields-terminated-by ‘\t’ -m 2
增加where条件
sqoop import --connect jdbc:mysql://192.168.1.137:3306/test --username root --password root --table temp --where ‘age>20’ --target-dir ‘/123456’//将年龄大于20的放入到123465目录下并且每条数据分区

使用query语句
sqoop import --connect jdbc:mysql://192.168.1.137:3306/test --username root --password root --query ‘SELECT * FROM temp where age > 20 AND $CONDITIONS’ --split-by temp.age --target-dir ‘/111’

增量导入
根据字段id
sqoop import --connect jdbc:mysql://hadoop01:3306/test --username root --password root --table temp --target-dir ‘/sqoop/table/2’ --incremental append --check-column id --last-value 0 -m 1
–incremental append选项使用append模式,
–check-column id 使用id字段来做增量
–last-value为0,从MySQL表中主键id>0开始同步。
根据时间戳
sqoop import --connect jdbc:mysql://hadoop01:3306/test --username root --password root --table temp --target-dir ‘/sqoop/table/1’ --incremental lastmodified --check-column last_update --last-value ‘2017-03-20 11:00:00’

导出(不会)
sqoop export --connect jdbc:mysql://192.168.1.137:3306/test --username root --password root --export-dir ‘/sqoop/table/1’ --table temp -m 1 --fields-terminated-by ‘\t’(从hafs往本地导出,注:ERROR tool.ExportTool: Error during export:
Export job failed!具体问题是数据中有中文,而数据库表编码不支持
解决方案如下:
将表的数据导出,删除表后重新创建表,指定编码DEFAULT CHARSET=utf8
)

sqoop导入导出(hive)
创建hive表
sqoop create-hive-table --connect jdbc:mysql://hadoop01:3306/test --username root --password root --table temp --hive-table temp123 --fields-terminated-by “\t”

指定hive表名、指定数据分隔符(从mysql到hive注:流程是先从mysql的数据到hdfs上 系统会自动创建临时文件,然后将hdfs的文件导入到hive中)
sqoop import --connect jdbc:mysql://hadoop01:3306/test --username root --password root --table temp --hive-import --hive-table temp123 --fields-terminated-by ‘\t’
通过create-hive-table创建表
sqoop import --connect jdbc:mysql://hadoop01:3306/test --username root --password root --table temp --hive-import --create-hive-table --hive-table temp1234 --fields-terminated-by ‘\t’
可以通过 --create-hive-table 创建表,如果表已经存在则会执行失败
如果提示目录已存在,可以在导入脚本后面追加:–delete-target-dir
覆盖hive表的内容
sqoop import --connect jdbc:mysql://hadoop01:3306/test --username root --password root --table temp --hive-import --hive-overwrite --hive-table temp123 --fields-terminated-by ‘\t’//把mysql表中的内容覆盖了hive表中的temp123
增加where条件
sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password root --table user --where ‘age>20’ --hive-import --hive-table user123 --fields-terminated-by ‘\t’

指定编码格式
sqoop import --connect jdbc:mysql://hadoop01:3306/test --username root --password root --table temp --where ‘age>20’ --hive-import --hive-table user123 --fields-terminated-by ‘\t’ --default-character-set=utf-8

使用query语句
sqoop import --connect jdbc:mysql://hadoop01:3306/test --username root --password root --query ‘select * from user where age>30 and $CONDITIONS’ --hive-import --hive-table user123 --fields-terminated-by ‘\t’ --target-dir ‘/sqoop/user123’ --split-by user.age
使用query语句必须指定split-by和—target-dir

增量导入
1、根据id
sqoop import --connect jdbc:mysql://hadoop01:3306/test --username root --password root --table temp --hive-import --hive-table temp123 --incremental append --check-column id --last-value 1 --fields-terminated-by ‘\t’//从id为1往后开始导入
2、根据时间戳
通过时间戳来增量导入的脚本:
–incremental lastmodified --check-column last_update --last-value ‘2017-03-20 11:00:00’
//从最后的跟新时间 update2017- 03-20 11:00:00开始导入 注:在建立表的时候必须增加该列 last_update

导出(不会)
sqoop export --connect jdbc:mysql://hadoop01:3306/test-username root --password root --export-dir ‘/sqoop/table/2/part-m-00000’ --table temp -m 1 --fields-terminated-by ‘\t’

  1. sqoop job指令
    5.1. 相关命令:
    bin/sqoop job
    bin/sqoop-job
    5.2. 基本用法:
    bin/sqoop job --create
    创建job
    bin/sqoop job --delete
    删除job
    bin/sqoop job --exec
    执行job
    bin/sqoop job --show
    显示job
    bin/sqoop job --list
    列出job

5.3. 创建和执行job
创建job(注意:-- import之间需要空格)
sqoop job --create synuser – import --connect jdbc:mysql://localhost:3306/test --username root -P --table user --target-dir ‘/sqoop/ d2’ -m 1
创建了job,id为“synuser”,它是将MySQL数据库test中的user表同步hdfs中。然后我们根据这个job的id去查询job详细配置情况:
bin/sqoop job --show synuser
我们可以通过job的id来执行job:
bin/sqoop job --exec synuser
5.4. 安全配置
默认情况下,创建的每个job在运行的时候都不会进行安全的认证。如果我们希望限制指定的sqoop job的执行,只有经过认证以后才能执行,这时候可以使用sqoop job的安全选项。Sqoop安装目录下,通过修改配置文件conf/sqoop-site.xml可以对job进行更高级的配置。实际上,我们使用了Sqoop的metastore工具,它能够对Sqoop进行细粒度的配置。
我们要将MySQL数据库中的数据同步到Hive表,每次执行sqoop job都需要输入访问MySQL数据库的连接账号信息,可以设置sqoop.metastore.client.record.password的值为true。如果在conf/sqoop-site.xml中增加如下配置,会将连接账号信息存储到Sqoop的metastore中:

  1. sqoop.metastore.client.record.password
  2. true
  3. If true, allow saved passwords in the metastore.

5.5. 定时任务
在实际开发运维过程,我们常常要定时执行导入脚本,可以使用crontab来制作定时任务:
crontab -e
0 */1 * * * sqoop job --exec synuser > sqoop_synuser.log 2>&1 &

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值