我想使用 sqoop将包含 blob 字段的表从oracle导入 hbase 。 我用下面的命令:
sqoop import --connect jdbc:oracle:thin:@10.2.152.241:1521:QASOURCE
--username devsrc --table fnd_lobs --password devsrc --hbase-table fndlobs
--column-family cf --hbase-row-key file_id --columns file_id,file_name,file_data,upload_date,expiration_date,program_name
--hbase-create-table --as-sequencefile --verbose -m1
此处file_data
是 blob 列。
查询正在执行,但 hbase 的输出不会显示file_data
字段。
hbase的输出:
238883 column=cf:program_name, timestamp=1386805999370, value=PER_ADDR_gb_UK.pdf
238883 column=cf:upload_date, timestamp=1386805999370, value=2004-07-01 04:33:40.0
238884 column=cf:file_name, timestamp=1386805999370, value=/appltop/115/per/11.5.0/patch/115/publisher/tem
plates/PER_WS1_gb_UK.pdf
238884 column=cf:program_name, timestamp=1386805999370, value=PER_WS1_gb_UK.pdf
238884 column=cf:upload_date, timestamp=1386805999370, value=2004-07-01 04:33:41.0
238885 column=cf:file_name, timestamp=1386805999370, value=/appltop/115/per/11.5.0/patch/115/publisher/tem
plates/PER_WS3_gb_UK.pdf
238885 column=cf:program_name, timestamp=1386805999370, value=PER_WS3_gb_UK.pdf
238885 column=cf:upload_date, timestamp=1386805999370, value=2004-07-01 04:33:49.0
238886 column=cf:file_name, timestamp=1386805999370, value=/appltop/115/per/11.5.0/patch/115/publisher/tem
plates/PER_WS4_gb_UK.pdf
输出未显示file_data
字段。如何纠正这个问题?
答案 0 :(得分:1)
在Sqoop中我们有像--hbase-bulkload选项这样的选项,它可以进行批量加载。
下面是sqoop批量加载的命令
sqoop import -Dsqoop.hbase.add.row.key = true --connect jdbc:oracle:thin:@ipaddress:portnumber:DBName --username username --table fnd_lobs_dupl --password pwd --hbase-table blobs --column-family cf --columns file_id,file_name,file_data,upload_date --hbase-row-key file_id --hbase-create-table --inline-lob-limit 0 --hbase-bulkload --as-sequencefile - m1
答案 1 :(得分:0)
这取决于您使用的sqoop版本。目前,在1.4.4版本中,您无法将blob导入hbase。
Sqoop的直接模式不支持导入BLOB,CLOB或LONGVARBINARY列。
但是如果你在https://github.com/apache/sqoop/blob/trunk/COMPILING.txt
之后从主干编译它Apache Sqoop Trunk:https://github.com/apache/sqoop/tree/trunk
有一项新功能。由于loadLargeObjects(lobLoader);
HBaseBulkImportMapper.java
,它会有效
--hbase-bulkload Enables bulk loading
为减少hbase的负载,Sqoop可以进行批量加载而不是直接写入。要使用批量加载,请使用--hbase-bulkload。
启用它
同样,1.4.4没有这个论点。