大数据Sqoop将mysql直接抽取至Hbase

本文介绍了如何构建HBase表,包括删除、创建和描述表的操作,并展示了使用Sqoop直接从MySQL导入数据到HBase的详细步骤,包括增量导入的方法。此外,还提到了一种借助Hive批量导入数据到HBase的常见策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在这里插入图片描述

想学习架构师构建流程请跳转:Java架构师系统架构设计

1 HBase 表设计

用户基本信息: tbl_users

-- 1、如果用户表存在先删除
hbase(main):013:0> disable 'tbl_users'
hbase(main):014:0> drop 'tbl_users'
-- 或者清空表
hbase(main):015:0> truncate 'tbl_users'
-- 2、创建用户表
hbase(main):016:0> create 'tbl_users','detail'
hbase(main):019:0> desc "tbl_users"
Table tbl_users is ENABLED
tbl_users
COLUMN FAMILIES DESCRIPTION
{NAME => 'detail', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY =>
'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL
=> 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE =>
'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
hbase(main):020:0> count "tbl_users"
950 row(s) in 0.1910 seconds

HBase表中有1个Region:
在这里插入图片描述

2 Sqoop直接导入

可以使用SQOOP将MySQL表的数据导入到HBase表中,指定 表的名称、列簇及RowKey ,范
例如下所示:

/export/servers/sqoop/bin/sqoop import \
-D sqoop.hbase.add.row.key=true \
--connect jdbc:mysql://bigdata-cdh01.itcast.cn:3306/tags_dat \
--username root \
--password 123456 \
--table tbl_users \
--hbase-create-table \
--hbase-table tbl_users \
--column-family detail \
--hbase-row-key id \
--num-mappers 2

参数含义解释:

1、-D sqoop.hbase.add.row.key=true
是否将rowkey相关字段写入列族中,默认为false,默认情况下你将在列族中看不到任何row
key中的字段。注意,该参数必须放在import之后。
2、–hbase-create-table 如果hbase中该表不存在则创建
3、–hbase-table 对应的hbase表名
4、–hbase-row-key hbase表中的rowkey,注意格式
5、–column-family hbase表的列族

知识拓展:如何使用SQOOP进行增量导入数据至HBase表,范例命令如下:

/export/servers/sqoop/bin/sqoop import \
-D sqoop.hbase.add.row.key=true \
--connect jdbc:mysql://bigdata-cdh01.itcast.cn:3306/tags_dat \
--username root \
--password 123456 \
--table tbl_logs \
--hbase-create-table \
--hbase-table tag_logs \
--column-family detail \
--hbase-row-key id \
--num-mappers 20 \
--incremental lastmodified \
--check-column log_time \
--last-value '2019-08-13 00:00:00' \ 

相关增量导入参数说明:
1、–incremental lastmodified 增量导入支持两种模式 append 递增的列;lastmodified
时间戳。
2、–check-column 增量导入时参考的列
3、–last-value 最小值,这个例子中表示导入2019-08-13 00:00:00到今天的值

注:
使用SQOOP导入数据到HBase表中,有一个限制:
需要指定RDBMs表中的某个字段作为HBase表的ROWKEY,如果HBase表的ROWKEY为多
个字段组合,就无法指定,所以此种方式有时候不能使用。

3 另一种常用思路批量导入

大数据Sqoop借助Hive将Mysql数据导入至Hbase
借助到hive生成hfile进行导入.

### SqoopHBase的数据导入导出 #### 使用SqoopMySQL数据导入至HBase 当使用特定版本组合(如sqoop1.4.6、hadoop2.6、hbase1.1以及mysql5.7),可以利用Sqoop直接MySQLHBase传输数据。此过程涉及创建映射规则以定义源表字段如何对应目标HBase列族及其限定符。 对于简单的全量导入操作,命令如下所示: ```bash sqoop import \ --connect jdbc:mysql://<host>:<port>/<database> \ --username <user> \ --password <pass> \ --column-family <cf> \ --columns "col1,col2,...,coln" \ --split-by colX \ -m 1 ``` 上述脚本指定了连接字符串、认证信息、待迁移的关系型表格名称、目的端的HBase表格名、列簇标签以及其他参数[^1]。 #### 将HBase数据导出到MySQL 由于技术限制,HBase中的记录不能被直接转移到关系型数据库中;相反,推荐的做法是借助Apache Hive作为中介桥梁完成这项工作流程——即先构建一个基于现有HBase存储之上视图化的外部表描述文件,在此基础上再转换成标准SQL可识别的形式并最终迁移到MySQL里去。 具体步骤概述为:建立指向原始键值对集合的Hive外表声明语句,并指定采用`org.apache.hadoop.hive.hbase.HBaseStorageHandler`处理器处理读写请求;接着依据业务逻辑需求调整模式设计后另存新内表;最后运用Sqoop执行抽取动作把整理好的资料集送入目的地服务器实例之中[^3]。 ```sql CREATE EXTERNAL TABLE IF NOT EXISTS hive_external ( key STRING, value STRING ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,data:value") TBLPROPERTIES ("hbase.table.name"="myhbasetable"); ``` 之后可以通过常规方式查询该临时对象并将所得结果保存下来供后续环节调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵广陆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值