我如何将blob和clob导入hbase

时间:2013-12-12 12:34:25

标签: hbase hive sqoop

我想使用 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字段。如何纠正这个问题?

2 个答案:

答案 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没有这个论点。