使用SQOOP导入数据到HBase

时间:2020-02-23 14:33:32  来源:igfitidea点击:

SQOOP可用于将关系数据库模式转换为HBase模式。
当然,这里的主要目标是演示SQOOP如何将数据从RDBMS或者数据仓库导入HBase,但它总是更好地看到如何在上下文中使用工具与它在抽象中使用的方式。

该图显示了在将服务订单数据库转换为HBase模式之后如何关注。

对于此特定导入示例,我们希望将CustomErDontActInfo表直接导入HBase表,以准备构建HBase服务订单数据库模式。
要完成HBase模式,我们必须执行与导入ProductInfo表的相同步骤,然后可以使用Java MapReduce应用程序构建服务表。

SQOOP现在不允许我们同时导入关系表,直接进入具有多个列族的HBase表。
要解决此限制,请先创建HBase表,然后执行三个SQOP导入操作以完成任务。
列表显示创建表的任务。

hbase(main):017:0> create 'customercontactinfo', 'CustomerName', 
hbase(main):018:0*        'ContactInfo', 'ProductNums'
0 row(s) in 1.0680 seconds

在下列列表中,对于每个SQOOP Import命令,请注意,列族CLA指定的目标HBase列族和列CLA指定的相应MySQL列以粗体。
Customernum主键也变为HBase-Row-Key CLA指定的HBASE行密钥。

$sqoop import 
    --connect jdbc:mysql://localhost/serviceorderdb 
    --username root -P 
    --table customercontactinfo 
    --columns "customernum,customername" 
    --hbase-table customercontactinfo 
    --column-family CustomerName 
    --hbase-row-key customernum -m 1
Enter password:
...
13/08/17 16:53:01 INFO mapreduce.ImportJobBase: Retrieved 5 records.
$sqoop import 
    --connect jdbc:mysql://localhost/serviceorderdb 
    --username root -P 
    --table customercontactinfo 
    --columns "customernum,contactinfo" 
    --hbase-table customercontactinfo 
    --column-family ContactInfo 
    --hbase-row-key customernum -m 1
Enter password:
...
13/08/17 17:00:59 INFO mapreduce.ImportJobBase: Retrieved 5 records.
$sqoop import 
    --connect jdbc:mysql://localhost/serviceorderdb 
    --username root -P 
    --table customercontactinfo 
    --columns "customernum,productnums" 
    --hbase-table customercontactinfo 
    --column-family ProductNums 
    --hbase-row-key customernum -m 1
Enter password:
...
13/08/17 17:05:54 INFO mapreduce.ImportJobBase: Retrieved 5 records.

如果我们要执行新表的HBase扫描,我们将看到MySQL上的关系数据库表的导入和翻译直接进入HBase是成功。

此示例中的CustomerContactInfo表相当小,但想象我们现在拥有的电源,使用SQOOP和HBase,快速移动可能超过RDBMS或者数据仓库中容量的关系表到HBase,其中容量几乎无限,可扩展性自动的。

hbase(main):033:0> scan 'customercontactinfo'
ROW    COLUMN+CELL
 10000    column=ContactInfo:contactinfo, timestamp=1376773256317, value=1 Hadoop Lane, NY, 11111, [email protected]
 10000    column=CustomerName:customername, timestamp=1376772776684, value=John Timothy Smith
 10000    column=ProductNums:productnums, timestamp=1376773551221, value=B500
 10001    column=ContactInfo:contactinfo, timestamp=1376773256317, value=2 HBase Ave, CA, 22222
 10001    column=CustomerName:customername, timestamp=1376772776684, value=Bill Jones
 10001    column=ProductNums:productnums, timestamp=1376773551221, value=A100,A200,A300,B400,B500,C500,C600,D700
 20000    column=ContactInfo:contactinfo, timestamp=1376773256317, value=1 Expert HBase Ave, CA, 22222
 20000    column=CustomerName:customername, timestamp=1376772776684, value=Jane Ann Doe
 20000    column=ProductNums:productnums, timestamp=1376773551221, value=A100,A200,A300
 20001    column=ContactInfo:contactinfo, timestamp=1376773256317, value=1 Piglatin Ave, CO, 33333
 20001    column=CustomerName:customername, timestamp=1376772776684, value=Joe Developer
 20001    column=ProductNums:productnums, timestamp=1376773551221, value=D700
 30000    column=ContactInfo:contactinfo, timestamp=1376773256317, value=1 Statistics Lane, MA, 33333
 30000    column=CustomerName:customername, timestamp=1376772776684, value=Data Scientist
 30000    column=ProductNums:productnums, timestamp=1376773551221, value=C500
5 row(s) in 0.1120 seconds

通过SQOOP导入Hive和HBase表的现有关系数据可能会使各种新的和令人兴奋的数据分析工作流程。
如果此函数对我们感兴趣,请查看Apache SQOP文档以获取额外的Hive和HBase命令行参数和函数。