日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HBase常用功能和HBase+MapReduce使用总结

發(fā)布時間:2025/6/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HBase常用功能和HBase+MapReduce使用总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • 1.HBase如果加了列限定,如果該列不存在時返回的結(jié)果為empty.
  • 2.HBase在scan時指定的StartRow里面不能加-
  • 3.HBase在scan時過濾掉指定列不存在的記錄
  • 4.利用MapReduce導(dǎo)出hbase數(shù)據(jù)
  • 5.利用mapReduce插入數(shù)據(jù)到HBase

1.HBase如果加了列限定,如果該列不存在時返回的結(jié)果為empty.

????? ? 看下面的代碼:

????????

?
1 2 ??Get get = new Get(Bytes.toBytes("100")); ??? get.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"));

這里加入了列限定,也就是只返回列族info下面的name字段。但是如果name字段根本不存在,返回的Result在調(diào)用result.isEmpty()時則返回為true,也就是說就算其他字段存在,也什么都沒返回來,包括rowkey也沒有返回來。當(dāng)然,如果是限定多個列,只要一個列存在就可以正常返回。所以需要注意。

2.HBase在scan時指定的StartRow里面不能加-

看下面的代碼:


?
1 2 3 4 Scan scan = new Scan(); ?scan.setStartRow(Bytes.toBytes("3136947-")); ?scan.setStopRow(Bytes.toBytes("3136947-" + 1));
我的本意是查詢rowkey以 3136947- 開頭的行,但是因為我的里面有一個-(“杠”),所以什么都沒返回,去掉-后正常。這說明這里是不能使用-,-也并不是轉(zhuǎn)義字符,轉(zhuǎn)義后也還是scan不出來的。不知道其他字符是不是也不行,沒有測試。?所以需要注意。


3.HBase在scan時過濾掉指定列不存在的記錄

如果想返回某個字段必須存在的行,不存在該字段的記錄過濾掉不返回,方法如下:

?
1 2 3 4 5 6 7 8 9 10 11 12 Scan scan = new Scan(); ????????scan.setStartRow(Bytes.toBytes("3136947")); ????????scan.setStopRow(Bytes.toBytes("3136947" + 1)); ????????scan.addColumn(Bytes.toBytes("info"), ????????????????Bytes.toBytes("name")); ????????SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes("info"), ????????????????Bytes.toBytes("name"), ????????????????CompareFilter.CompareOp.NOT_EQUAL, Bytes.toBytes("0")); ????????filter.setFilterIfMissing(true); ????????scan.setFilter(filter);



注意:如果是判斷某個列是否存在,必須在addColumn里面加上該列,也就是必須返回的字段里面必須包含該列,否則也不會返回,因為在處理的時候是調(diào)用addColumn然后才會調(diào)用過濾器。

這里的過濾器里面指定該列的字段值必須不等于0(當(dāng)然,如果你的name里有等于0的當(dāng)然不能使用0),并且設(shè)置setFilterIfMissing為true,也就是設(shè)置為如果該列不存在就過濾掉這條數(shù)據(jù),默認(rèn)為false。

4.利用MapReduce導(dǎo)出hbase數(shù)據(jù)

如果hbase作為數(shù)據(jù)的輸出,job設(shè)置如下:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 Configuration conf = HBaseConfiguration.create(); ????????Scan scan = new Scan(); ????????scan.setStartRow(Bytes.toBytes("3136947")); ????????scan.setStopRow(Bytes.toBytes("3136947" + 1)); ????????scan.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name")); ????????scan.addFamily(UserStoreHelper.FAMILY_INFO); ????????scan.addColumn(UserStoreHelper.FAMILY_INFO, UserStoreHelper.USER_ID); ????????scan.addColumn(UserStoreHelper.FAMILY_INFO, UserStoreHelper.FRIENDS); ????????scan.addColumn(UserStoreHelper.FAMILY_INFO, UserStoreHelper.LEVEL_CODE); ????????final Job job = new Job(conf, "exportHBaseUser"); ????????job.setJarByClass(TestJobCreator.class); ????????job.setOutputFormatClass(TextOutputFormat.class); ????????FileOutputFormat.setOutputPath(job, new Path("test1")); ???????// job.setReducerClass(HbaseExportReduce.class); ???????// job.setPartitionerClass(UserPartitioner.class); ???????// job.setNumReduceTasks(14); ????????TableMapReduceUtil.initTableMapperJob(Bytes.toBytes("usertable"), ????????????????scan, ????????????????TestMapper.class, ????????????????Text.class, ????????????????NullWritable.class, ????????????????job);



在initTableMapperJob里面設(shè)置的map必須繼承org.apache.hadoop.hbase.mapreduce.TableMapper,并且最后兩個設(shè)置的參數(shù)是自己定義的map的輸出時的key和value的類型。

5.利用mapReduce插入數(shù)據(jù)到HBase

如果hbase作為數(shù)據(jù)的輸入。代碼如下:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 final Configuration conf = HBaseConfiguration.create(); ?final Job job = new Job(conf, "Sync-To-HBase"); ?job.setJarByClass(PostStoreExportHBaseJobCreator.class); ???//我這里是以mongodb為輸入???? ??job.setInputFormatClass(MongoInputFormat.class); ???TableMapReduceUtil.initTableReducerJob("usertable", null, job); ????//把數(shù)據(jù)轉(zhuǎn)換為hbase表格式的map ???job.setMapperClass(TestMapper.class); ????//直接入hbase庫不需要reduce???? ????job.setNumReduceTasks(0);



這里map的輸出必須是key為ImmutableBytesWritable,value為 Put

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的HBase常用功能和HBase+MapReduce使用总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。