2015-08-28 81 views
0

難道我們可以創建一個Hbase表作爲hbase查詢的輸出嗎?假設我有一個巨大的hbase表,然後使用過濾器查詢hbase表。我想將結果存回Hbase表。可能嗎?來自HBase的Hbase表查詢

+0

所以第一個表格的結果應該存儲在一個新的hbase表格中 - 所有這些細節應該以單鏡頭完成? – Ramzy

+0

@Ramzy是的..我想將結果存儲到另一個Hbase表中。或者HFile。不一定一槍。 – DebD

回答

0

您可以使用hbase作爲源和匯的地圖縮小。我希望this會幫助你。請參閱7.2.4部分。既然你會寫作並行輸出,時間也會得到優化。

+0

感謝您的想法。但是我的要求是我可以使用特定版本的列查詢hbase表,然後將結果存儲到hbase表中。 – DebD

+0

好的,什麼是阻止你設置最大版本到掃描,第一張表。您可以使用scan.setmaxVersions()並獲取所有版本。 – Ramzy

+0

要求是我需要從表中選擇一個特定的版本,然後通過配置單元查詢它。所以我需要將結果存儲回hbase表以便通過配置單元進行查詢 – DebD

0

您可以編寫一個作業,從第一個表中讀取keyValue對,然後將其保存在第二個表中。

如果您關注性能?那麼你可以寫一個地圖減少工作來做到這一點。

0

您不能直接查詢hbase並在其中創建另一個包含您的輸出的表,但您可以編寫map reduce來執行相同操作。除了map reduce以外,如果你使用Apache Phoenix來完成這項工作,你將能夠編寫一個查詢來選擇數據並將其存儲到hbase表中。

1

您可以拍攝正在運行的Hbase表的快照並將其導出到HDFS。 編寫Mapreduce以在文件中按需獲取數據,然後批量加載到新的Hbase表。 您也可以直接將數據寫入Hbase表。 這樣,在快照上運行MapReduce也不會影響實際的Hbase表。 這是你如何能做到的所有步驟下面提到

創建快照

snapshot 'HbaseTable','HbaseTableSnapshot' 

導出快照當地HDFS

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot HbaseTableSnapshot-copy-to /tmp -mappers 16 

司機的工作配置朗姆酒的MapReduce對HBase的快照

String snapshotName="HbaseTableSnapshot"; 
    Path restoreDir = new Path("hdfs://quickstart.cloudera:8020/tmp"); 
    String hbaseRootDir = "hdfs://quickstart.cloudera:8020/hbase"; 

TableMapReduceUtil.initTableSnapshotMapperJob(snapshotName, // Snapshot name 
        scan, // Scan instance to control CF and attribute selection 
        DefaultMapper.class, // mapper class 
        NullWritable.class, // mapper output key 
        Text.class, // mapper output value 
        job, 
        true, 
        restoreDir); 

同時在Hbase快照上運行mapreduce將sk在Hbase表上進行IP掃描,也不會對區域服務器產生影響。

0

聰明和漂亮的想法...

你可以做到這一點使用HappyBase這是一個Python前端我們在生產服務使用。

但是,如果你的字面意思是說100萬加上返回值 - 我不會推薦這個。高達10-20萬條記錄可以獲得良好的吞吐量(我們平均每秒插入8k條記錄,停機時間爲0.5M/min)。