這個操做和普通的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
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源碼