HBaseのテーブルデータは、内容を書き換えます

表の挿入停止を続行

HBaseのシェル>無効 'TBNAME'

スナップショット
のHBaseシェル>スナップショット'TBNAME'、 'tbsnap'

新しい名前のクローニングスナップショット
のHBaseシェル> clone_snapshot「tbsnap」、 「newtb」

スナップショットの削除
のHBaseシェル> delete_snapshot「tableSnapshot」を

データ変換プログラムを書きます

輸入java.util.HashMapを;
輸入はjava.util.List;
輸入java.util.Map; 

輸入org.apache.commons.lang.StringUtils。
輸入org.apache.hadoop.hbase.Cell;
輸入org.apache.hadoop.hbase.CellUtil;
輸入org.apache.hadoop.hbase.HBaseConfiguration。
輸入org.apache.hadoop.hbase.client.HTableInterface。
輸入org.apache.hadoop.hbase.client.Put;
輸入org.apache.hadoop.hbase.client.Result;
輸入org.apache.hadoop.hbase.client.ResultScanner。
輸入org.apache.hadoop.hbase.client.Scan;
インポートorg.apache.hadoop.hbase.filter.FilterList;
輸入org.apache.hadoop.hbase.util.Bytes。
輸入org.springframework.data.hadoop.hbase.HbaseTemplate。

輸入com.alibaba.fastjson.JSONObject。

輸入lombok.extern.slf4j.Slf4j。

@ SLF4J 
パブリック クラスHbaseUtil { 
    
    公共の 静的な 無効saveTemperature2hbase(文字列のTBNAME、文字列のrowKey、文字列のV 
            、HbaseTemplate hbaseTemplate){ 
        hbaseTemplate.execute(TBNAME、(表) - > { 
            入れ置く = 新しいのPut(Bytes.toBytes(のrowKey)); 
            put.addColumn(Bytes.toBytes("XXX")、Bytes.toBytes( "XXX" )、Bytes.toBytes(V))。
            table.put(置きます)。
            返す ; 
        }); 
    } 
    
       パブリック 静的地図<文字列リスト<地図<文字列オブジェクト>>> getColumnDataFromHbase(文字列テーブル
               、文字列ファミリー、文字列、HbaseTemplate hbaseTemplate){ 

            戻り hbaseTemplate.execute(テーブル、hTableInterface - > { 
                スキャンスキャン = 新しいスキャン() ; 
                scan.setCacheBlocks(); 
                scan.setCaching( 30000 ); 
                scan.setBatch( 300); 

                scan.addColumn(family.getBytes()、column.getBytes())。

                FilterList filterList = 新しいFilterList(); 


                scan.setFilter(filterList)。
                地図 <文字列、リスト<地図<文字列、オブジェクト>>> TempDataを= 新しいのHashMap <> (); 

                ResultScannerスキャナ = NULL ; 

                試す{ 
                    スキャナ = hTableInterface.getScanner(スキャン)。

                    (結果結果:スキャナ){
                         バイト []行= result.getRow()。
                        文字列のrowKey= Bytes.toString(行)。

                        リスト <細胞>細胞=のresult.listCells()。
                        (セルセル:セル){ 
                            マップの<string、オブジェクト>データ= 新しい HashMapの<> (); 
                            文字列ID = Bytes.toString(CellUtil.cloneQualifier(セル))。
                            文字列値 = Bytes.toString(CellUtil.cloneValue(セル))。
                            
                            log.info( "のrowKey:{}、カラム:{}、値:{}" のrowKey、ID、値)。
                            
                            JSONObject JSON = 新しいJSONObject();
                            
                            // 填写のJSON 
                            
                            文字列JSTR = json.toJSONString()。
                            log.info(JSTR)。
                            
                            saveTemperature2hbase( "XXX" のrowKey、JSTR、hbaseTemplate)。
                        } 
                    } 
                } 最後に{
                     場合NULL!= スキャナ)
                        scanner.close(); 
                } 
                戻りTempDataをします。
            }); 
        } 
       
       公共の 静的な 無効メイン(文字列[]引数){ 
            HbaseTemplate hbaseTemplate = 新しいHbaseTemplate()。
            org.apache.hadoop.conf.Configuration CONF = HBaseConfiguration.create()。
            conf.set( "hbase.zookeeper.quorum"、 "127.0.0.1" ); 
            conf.set( "hbase.zookeeper.port"、 "2181" ); 
            hbaseTemplate.setConfiguration(CONF)。
            hbaseTemplate.setAutoFlush(真の); 
            
            getColumnDataFromHbase( "XXX"、 "XXX"、 "XXX" 、hbaseTemplate)。
       } 
}                

元のテーブルの削除
のHBaseシェルを>「tableNameの」を削除

おすすめ

転載: www.cnblogs.com/m2492565210/p/11343879.html