亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何讀取hbase數據給reduce?

如何讀取hbase數據給reduce?

RISEBY 2018-12-18 18:14:16
如何讀取hbase數據給reduce
查看完整描述

1 回答

?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

WordCountHbaseReaderMapper類繼承了TableMapper< Text,Text>抽象類,TableMapper類專門用于完成MapReduce中Map過程與Hbase表之間的操作。此時的map(ImmutableBytesWritable key,Result value,Context context)方法,第一個參數key為Hbase表的rowkey主鍵,第二個參數value為key主鍵對應的記錄集合,此處的map核心實現是遍歷key主鍵對應的記錄集合value,將其組合成一條記錄通過contentx.write(key,value)填充到< key,value>鍵值對中。
詳細源碼請參考:WordCountHbaseReader\src\com\zonesion\hbase\WordCountHbaseReader.java
public static class WordCountHbaseReaderMapper extends
TableMapper<Text,Text>{

@Override
protected void map(ImmutableBytesWritable key,Result value,Context context)
throws IOException, InterruptedException {
StringBuffer sb = new StringBuffer("");
for(Entry<byte[],byte[]> entry:value.getFamilyMap("content".getBytes()).entrySet()){
String str = new String(entry.getValue());
//將字節數組轉換為String類型
if(str != null){
sb.append(new String(entry.getKey()));
sb.append(":");
sb.append(str);
}
context.write(new Text(key.get()), new Text(new String(sb)));
}
}
}

3、 Reducer函數實現
此處的WordCountHbaseReaderReduce實現了直接輸出Map輸出的< key,value>鍵值對,沒有對其做任何處理。詳細源碼請參考:WordCountHbaseReader\src\com\zonesion\hbase\WordCountHbaseReader.java
public static class WordCountHbaseReaderReduce extends Reducer<Text,Text,Text,Text>{
private Text result = new Text();
@Override
protected void reduce(Text key, Iterable<Text> values,Context context)
throws IOException, InterruptedException {
for(Text val:values){
result.set(val);
context.write(key, result);
}
}
}

4、 驅動函數實現
與WordCount的驅動類不同,在Job配置的時候沒有配置job.setMapperClass(),而是用以下方法執行Mapper類: TableMapReduceUtil.initTableMapperJob(tablename,scan,WordCountHbaseReaderMapper.class, Text.class, Text.class, job);
該方法指明了在執行job的Map過程時,數據輸入源是hbase的tablename表,通過掃描讀入對象scan對表進行全表掃描,為Map過程提供數據源輸入,通過WordCountHbaseReaderMapper.class執行Map過程,Map過程的輸出key/value類型是 Text.class與Text.class,最后一個參數是作業對象。特別注意:這里聲明的是一個最簡單的掃描讀入對象scan,進行表掃描讀取數據,其中scan可以配置參數,這里為了例子簡單不再詳述,用戶可自行嘗試。
詳細源碼請參考:WordCountHbaseReader\src\com\zonesion\hbase\WordCountHbaseReader.java
public static void main(String[] args) throws Exception {
String tablename = "wordcount";
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "Master");
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 1) {
System.err.println("Usage: WordCountHbaseReader <out>");
System.exit(2);
}
Job job = new Job(conf, "WordCountHbaseReader");
job.setJarByClass(WordCountHbaseReader.class);
//設置任務數據的輸出路徑;
FileOutputFormat.setOutputPath(job, new Path(otherArgs[0]));
job.setReducerClass(WordCountHbaseReaderReduce.class);
Scan scan = new Scan();
TableMapReduceUtil.initTableMapperJob(tablename,scan,WordCountHbaseReaderMapper.class, Text.class, Text.class, job);
//調用job.waitForCompletion(true) 執行任務,執行成功后退出;
System.exit(job.waitForCompletion(true) ? 0 : 1);

}

5、部署運行
1)啟動Hadoop集群和Hbase服務
[hadoop@K-Master ~]$ start-dfs.sh #啟動hadoop HDFS文件管理系統
[hadoop@K-Master ~]$ start-mapred.sh #啟動hadoop MapReduce分布式計算服務
[hadoop@K-Master ~]$ start-hbase.sh #啟動Hbase
[hadoop@K-Master ~]$ jps #查看進程
22003 HMaster
10611 SecondaryNameNode
22226 Jps
21938 HQuorumPeer
10709 JobTracker
22154 HRegionServer
20277 Main
10432 NameNode



查看完整回答
反對 回復 2019-01-19
  • 1 回答
  • 0 關注
  • 730 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號