這篇文章主要介紹“HBase And MapReduce舉例分析”,在日常操作中,相信很多人在HBase And MapReduce舉例分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”HBase And MapReduce舉例分析”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供??谄髽I(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、H5建站、小程序制作等業(yè)務(wù)。10年已為海口眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
在HDFS某目錄文件下有多個文件內(nèi)容,將這些多個文件內(nèi)容中的數(shù)據(jù)通過倒排索引后將結(jié)果寫入到HBase某張表中,代碼如下:
1.InvertedIndexMapper
public class InvertedIndexMapper extends Mapper
2.InvertedIndexCombiner
public class InvertedIndexCombiner extends Reducer{ private Text info = new Text(); @Override protected void reduce(Text key, Iterable values, Reducer .Context context) throws IOException, InterruptedException { //統(tǒng)計詞頻 int sum = 0; for (Text value : values) { sum += Integer.parseInt(value.toString() ); } int splitIndex = key.toString().indexOf(":"); //重新設(shè)置value值由URI和詞頻組成 info.set( key.toString().substring( splitIndex + 1) +":"+sum ); //重新設(shè)置key值為單詞 key.set( key.toString().substring(0,splitIndex)); context.write(key, info); } }
3.InvertedIndexReducer
public class InvertedIndexReducer extends Reducer{ private Text result = new Text(); @Override protected void reduce(Text key, Iterable values, Reducer .Context context) throws IOException, InterruptedException { //生成文檔列表 String fileList = new String(); for (Text value : values) { fileList += value.toString()+";"; } result.set(fileList); context.write(key, result); } }
4.HBaseAndInvertedIndex
public class HBaseAndInvertedIndex { private static Path outPath; public static void main(String[] args) throws Exception { run(); System.out.println( "\n\n************************"); runHBase(); } public static void run() throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf,"Hadoop-InvertedIndex"); job.setJarByClass(HBaseAndInvertedIndex.class); //實現(xiàn)map函數(shù),根據(jù)輸入的對生成中間結(jié)果。 job.setMapperClass(InvertedIndexMapper.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(Text.class); job.setCombinerClass(InvertedIndexCombiner.class); job.setReducerClass(InvertedIndexReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); FileInputFormat.addInputPath(job, new Path("hdfs://192.168.226.129:9000/txt/invertedindex/")); DateFormat df = new SimpleDateFormat( "yyyyMMddHHmmssS" ); String filename = df.format( new Date() ); outPath = new Path("hdfs://192.168.226.129:9000/rootdir/invertedindexhbase/result/"+filename+"/"); FileOutputFormat.setOutputPath(job, outPath); int result = job.waitForCompletion(true) ? 0 : 1; } public static void runHBase() throws Exception { Configuration conf = new Configuration(); conf = HBaseConfiguration.create(conf); conf.set("hbase.zookeeper.quorum", "192.168.226.129"); Job job = Job.getInstance(conf, "HBase-InvertedIndex"); job.setJarByClass(HBaseAndInvertedIndex.class); job.setInputFormatClass(KeyValueTextInputFormat.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(Text.class); // 把數(shù)據(jù)寫入Hbase數(shù)據(jù)庫 FileInputFormat.addInputPath(job, new Path(outPath.toString()+"/part-r-00000") ); System.out.println( "path---> "+ outPath.toString() ); TableMapReduceUtil.initTableReducerJob("invertedindex",InvertedIndexHBaseReducer.class, job); //將數(shù)據(jù)寫入HBase數(shù)據(jù)庫 //首先先檢查表是否存在 checkTable(conf); System.exit( job.waitForCompletion(true) ? 0 : 1 ); } private static void checkTable(Configuration conf) throws Exception { Connection con = ConnectionFactory.createConnection(conf); Admin admin = con.getAdmin(); TableName tn = TableName.valueOf("invertedindex"); if (!admin.tableExists(tn)){ HTableDescriptor htd = new HTableDescriptor(tn); HColumnDescriptor hcd = new HColumnDescriptor("indexKey"); htd.addFamily(hcd); admin.createTable(htd); System.out.println("表不存在,新創(chuàng)建表成功...."); } } /** * 1. 因為map是從hdfs中取數(shù)據(jù),因此沒有太大變化;而reduce需要輸出結(jié)果到hbase中, * 所以這里繼承了TableReduce ,這里沒有valueout, * 但是規(guī)定TableReduce的valueout必須是Put或者Delete實例 * * 2.ImmutableBytesWritable:它是一個可以用作key或value類型的字節(jié)序列, * */ public static class InvertedIndexHBaseReducer extends TableReducer { @Override protected void reduce( Text key, Iterable values, Reducer .Context context) throws IOException, InterruptedException { System.out.println( "key---> " + key.toString() ); //注意行健參數(shù)的書寫。 Put put = new Put(key.toString().getBytes()); put.addColumn(Bytes.toBytes( "indexKey" ), Bytes.toBytes("indexUrlWeight"),values.iterator().next().getBytes()); context.write(new ImmutableBytesWritable(key.getBytes()), put); } } }
///原數(shù)據(jù)目錄文件:
invertedindex1.txt
Hello I will Learning Hadoop HDFS MapReduce Other I will Learning HBase
invertedindex2.txt :
Hello HBase MapReduce HDFS
查看結(jié)果:scan:
hbase(main):002:0> scan 'invertedindex' ROW COLUMN+CELL HBase column=indexKey:indexUrlWeight, timestamp=1463578091308, value=hdfs://192.168.226.129:900 0/txt/invertedindex/invertedindex2.txt:1;hdfs://192.168.226.129:9000/txt/invertedindex/in vertedindex1.txt:1; HDFS column=indexKey:indexUrlWeight, timestamp=1463578091308, value=hdfs://192.168.226.129:900 0/txt/invertedindex/invertedindex1.txt:1;hdfs://192.168.226.129:9000/txt/invertedindex/in vertedindex2.txt:1; Hadoop column=indexKey:indexUrlWeight, timestamp=1463578091308, value=hdfs://192.168.226.129:900 0/txt/invertedindex/invertedindex1.txt:1;hdfs://192.168.226.129:9000/txt/invertedindex/in vertedindex2.txt:1; Hello column=indexKey:indexUrlWeight, timestamp=1463578091308, value=hdfs://192.168.226.129:900 0/txt/invertedindex/invertedindex1.txt:1;hdfs://192.168.226.129:9000/txt/invertedindex/in vertedindex2.txt:1; I column=indexKey:indexUrlWeight, timestamp=1463578091308, value=hdfs://192.168.226.129:900 0/txt/invertedindex/invertedindex1.txt:2;hdfs://192.168.226.129:9000/txt/invertedindex/in vertedindex2.txt:1; Learning column=indexKey:indexUrlWeight, timestamp=1463578091308, value=hdfs://192.168.226.129:900 0/txt/invertedindex/invertedindex1.txt:2;hdfs://192.168.226.129:9000/txt/invertedindex/in vertedindex2.txt:1; MapReduce column=indexKey:indexUrlWeight, timestamp=1463578091308, value=hdfs://192.168.226.129:900 0/txt/invertedindex/invertedindex1.txt:1;hdfs://192.168.226.129:9000/txt/invertedindex/in vertedindex2.txt:1; Other column=indexKey:indexUrlWeight, timestamp=1463578091308, value=hdfs://192.168.226.129:900 0/txt/invertedindex/invertedindex1.txt:1;hdfs://192.168.226.129:9000/txt/invertedindex/in vertedindex2.txt:1; will column=indexKey:indexUrlWeight, timestamp=1463578091308, value=hdfs://192.168.226.129:900 0/txt/invertedindex/invertedindex1.txt:2;hdfs://192.168.226.129:9000/txt/invertedindex/in vertedindex2.txt:1; 9 row(s) in 0.2240 seconds
到此,關(guān)于“HBase And MapReduce舉例分析”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
當(dāng)前名稱:HBaseAndMapReduce舉例分析
文章鏈接:http://weahome.cn/article/pcdijh.html