sqoop总结

sqoop参数含义解释:

sqoop import -D sqoop.hbase.add.row.key=true --connect jdbc:mysql://master:3306/test --username hadoop --password hadoop --table test
 --hbase-table test --column-family info --columns uid,name,age  --hbase-row-key "uid,age" --hbase-create-table  -m 1

MySQL相关参数说明:

-D sqoop.hbase.add.row.key=true 是否将rowkey相关字段写入列族中,默认为false,默认情况下你将在列族中看不到任何row key中的字段。注意,该参数必须放在import之后。

--connect 数据库连接字符串

--username –password  mysql数据库的用户名密码

--P:交互式输入密码

--table Test_Goods 表名

--where    导入是mysql表的where条件,写法和sql中一样

--split-by CREATE_TIME   默认情况下sqoop使用4个并发执行任务,需要制订split的列,如果不想使用并发,可以用参数 --m 1

--------------------- 

HBase相关参数说明:
--hbase-table:hbase中接收数据的表名
--hbase-create-table:如果指定的接收数据表在hbase中不存在,则新建表
--column-family:列族名称,所有源表的字段都进入该列族
--hbase-row-key:如果不指定则采用源表的key作为hbase的row key。可以指定一个字段作为row key,或者指定组合行键,当指定组合行键时,用双引号包含多个字段,各字段用逗号分隔

--table:表名
--split-by:并行导入过程中,各个map task根据哪个字段来划分数据段,该参数最好指定一个能相对均匀划分数据的字段,比如创建时间、递增的ID

异常解决

作为组合行键的几个字段都不能有null值,否则会报错,请执行该语句前先确认;
过程中遇到报错:
Error: java.io.IOException: Could not insert row with null value for row-key column: OPERATE_TIME
        at org.apache.sqoop.hbase.ToStringPutTransformer.getPutCommand(ToStringPutTransformer.java:125)
        at org.apache.sqoop.hbase.HBasePutProcessor.accept(HBasePutProcessor.java:142)
        at org.apache.sqoop.mapreduce.DelegatingOutputFormat$DelegatingRecordWriter.write(DelegatingOutputFormat.java:128)
        at org.apache.sqoop.mapreduce.DelegatingOutputFormat$DelegatingRecordWriter.write(DelegatingOutputFormat.java:92)
        at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.write(MapTask.java:634)
        at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:89)
        at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.write(WrappedMapper.java:112)
        at org.apache.sqoop.mapreduce.HBaseImportMapper.map(HBaseImportMapper.java:38)
        at org.apache.sqoop.mapreduce.HBaseImportMapper.map(HBaseImportMapper.java:31)
        at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
        at org.apache.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:64)
        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:763)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:339)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157)

 

原因:
1、sqoop不会导入值为null的字段。
2、重复导入
 

知识拓展,定时增量导入

1、Sqoop增量导入

 
sqoop import -D sqoop.hbase.add.row.key=true --connect 
jdbc:mysql://master:3306/test --username root --password root 
--table test --columns ID,GOODS_NAME,GOODS_PRICE 
--hbase-create-table --hbase-table test --column-family cf 
--hbase-row-key ID --incremental lastmodified --check-column U_DATE 
--last-value '2017-06-27' --split-by U_DATE
 

--incremental lastmodified 增量导入支持两种模式 append 递增的列;lastmodified时间戳。

--check-column 增量导入时参考的列

--last-value 最小值,这个例子中表示导入2017-06-27到今天的值

 

2、Sqoop job (未测试):

sqoop job --create testjob01 --import --connect 
jdbc:mysql://master:3306/test --username root --password root 
--table test--columns ID,GOODS_NAME,GOODS_PRICE 
--hbase-create-table --hbase-table test --column-family cf 
--hbase-row-key ID -m 1

设置定时执行以上sqoop job

使用linux定时器:crontab -e

例如每天执行

0 0 * * * /opt/local/sqoop-1.4.6/bin/sqoop job ….

--exec testjob01

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值