使用sqoop将数据从mysql同步到hbase

目前机器使用的sqoop版本

1
2
3
4
5
6
7
# sqoop version
Warning: /usr/hdp/2.5.3.0-37/accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
17/12/13 22:34:23 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6.2.5.3.0-37
Sqoop 1.4.6.2.5.3.0-37
git commit id 16c017e90fdde118be73d46eff10cf2c068387e9
Compiled by jenkins on Wed Nov 30 02:29:18 UTC 2016

sqoop1.4.6文档 https://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html
Sqoop是用来在Hadoop和关系数据库或者大型机之间做数据迁移的一个工具。
可以使用Sqoop从关系型数据库管理系统如MySQL、Oracle中将数据导入到Hadoop分布式文件系统(HDFS)中,也可以从HDFS导出数据到RDBMS中。
RDBMS需要提供数据所在的schema(数据库连接和用户名密码等信息),Sqoop使用MapReduce导入和导出数据,MR提供了容错机制和并行运算。
Sqoop是Apache基金会开源的软件产品,官网http://sqoop.apache.org
Github地址 https://github.com/apache/sqoop

使用实例

1
2
3
4
5
6
7
8
9
sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \
--driver com.mysql.jdbc.Driver \
--connect jdbc:mysql://host:3306/databasename \
--username root \
--password root \
--query "select a.id, a.create_date from table_a a WHERE 1=1 AND \$CONDITIONS" \
--hbase-table test_sqoop \
--column-family 'fts' \
--hbase-row-key id --split-by create_date -m 3

7.2.13. Importing Data Into HBase
–hbase-table 指定HBase表。
每一行输入的数据都会转换为HBase的Put操作作为输出到HBase表的行。
默认情况下,Sqoop会使用–split-by的列[上面的create_date]作为rowkey。
也可以通过–hbase-row-key指定作为rowkey的列。
每一个输出行都会放在同一个列族中,必须通过–column-family指定列族。
不能使用–direct【会冲突】。
–hbase-row-key也可以指定复合行健,中间使用逗号隔开。
默认如果HBase表和列族不存在,Sqoop会直接报错退出,所以需要在Sqoop执行之前创建好HBase表和列族。
如果指定–hbase-create-table和列族,HBase表不存在则会自动创建。
Sqoop会序列化所有的值,以字符串形式转化为utf-8的字节数组存到HBase中。
Sqoop会跳过除了行健之外所有为MULL的列。
指定–hbase-bulkload可以采用大批量加载来替代直接写入HBase。

image

邵志鹏 wechat
扫一扫上面的二维码关注我的公众号
0%