Mapreduce操做HBase

這個操做和普通的Mapreduce還不太同樣,好比普通的Mapreduce輸入能夠是txt文件等,Mapreduce能夠直接讀取Hive中的表的數據(可以看見是以相似txt文件形式),但Mapreduce操做Hbase卻和前兩者不同html

它有專門的Mapper 這個叫TableMapper,這個Mapper繼承自Mapper,普通的Mapper有4個輸入泛型,但這裏的TableMapper卻只有兩個,經過源碼能夠看到TableMapper的KEYIN,VALUEIN分別設置爲ImmutableBytesWriteable和Result類型(這個Result類型就是Hbase查詢的結果數據)因此只須要實現KEYOUT、VALUEOUT便可app

這裏的TableMapper類徹底是爲了從HBase中讀取數據而設置的,也就是說,這個TableMapper是專爲HBase定義的抽象類。

實例參考:spa

1.https://www.cnblogs.com/liangzh/archive/2012/04/19/2457703.html.net

2. MapReduce從Hbase中讀取多個表:code

 List<Scan> scans = new ArrayList<Scan>();//hbase多表輸入
        /*Scan scan1 = new Scan();
        scan1.setAttribute(Scan.SCAN_ATTRIBUTES_TABLE_NAME, Bytes.toBytes("r_data_curr2019030101"));
        scans.add(scan1);
        Scan scan2 = new Scan();
        scan2.setAttribute(Scan.SCAN_ATTRIBUTES_TABLE_NAME, Bytes.toBytes("r_data_curr2019030102"));
        scans.add(scan2);*/
        for(int i =3;i<=23;i++){
            Scan scan = new Scan();
            if(i<=9){
                scan.setAttribute(Scan.SCAN_ATTRIBUTES_TABLE_NAME, Bytes.toBytes("r_data_curr201903010"+i));
            }else{
                scan.setAttribute(Scan.SCAN_ATTRIBUTES_TABLE_NAME, Bytes.toBytes("r_data_curr20190301"+i));
            }
            scans.add(scan);
        }
        TableMapReduceUtil.initTableMapperJob(scans, HourDataMapper.class, Text.class, Text.class, job,
                false);

        // 設置reducer相關,reducer往hbase輸出
        // 本地環境,並且fs.defaultFS爲集羣模式的時候,需呀設置addDependencyJars參數爲false。
        TableMapReduceUtil.initTableReducerJob("r_his_data_hour", HourDataReducer.class, job, null, null, null, null, false);

 3.Mapreduce計算環比差值或同比差值htm

https://www.cnblogs.com/sharpxiajun/p/5205496.htmlblog

4. Hbase MapReduce 多表輸入,輸出到多表,輸入的表指定開始遍歷的起始和結束行繼承

https://blog.csdn.net/u014034934/article/details/74003049源碼

相關文章
相關標籤/搜索