MapReduce、Hbase接口API实践
读取hdfs中文件并做处理,取出卡号,通过卡号连接hbase查询出对应客户号,写入redis,因为不用输出,所以不调用context.write方法,整个操作在一个map中便可完成
protected HTable connect
//setup方法被MapReduce框架仅且执行一次,在执行Map任务前,进行相关变量或者资源的集中初始化工作。若是将资源初始化工作放在方法map()中,导致Mapper任务在解析每一行输入时都会进行资源初始化工作,导致重复,程序运行效率不高!
protected void setup(Context context) throws IOExcption,InterruptedException{
super.setup(context)
String jobName = context.getJobName();
//文件索引值
cartNoIndex = conf.get(jobName + "source.key","7");
//创建hbase连接,hbase-site.xml配置文件需要在jar包中
Configuration config = HBaseConfiguration.create();
connect = new HTable(config,"tableName")
} protected void map(writable key,Text value,Context context){
if(value == null || value.toString().trim().isEmpty()){
//计数器,记录处理的条数
context.getCounter(....).increment(1);
}else{
String[] values = Utils.split(value,separator,true);
//业务逻辑处理
int i = Integer.parseInt(cartNoIndex);
if(i<values.length){
cardNo = values[i];
}else{
logger.error("cardNo cannot find");
} //从hbase中查询出对应客户号
String rowkey = HTableManager.generatRowkey(cardNo);
Get getResult = new Get(rowkey.getBytes());
Result rs = connect.get(getResult);
String curNo = Bytes.toString(rs.getValue("f1".getBytes(),"column_name".getBtes());
RedisClient.getRedisClient().zincrbyset("spending:rank",countNum,custNo); protected void cleanup(context context)throws IOException,InterruptedException{
super.cleanup(context);
connect.close();
}
public static String[] split(String value,String separator,boolean trimSpace){
String[] rtn = split(value.separator);
if(trimSpace && rtn != null){
for(int i=0;i<rtn.length;i++){
rtn[i] = rtn[i].trim();
}
}
return rtn;
}
public static String[] split(String value,String separator){
String[] rtn = null;
if(value != null){
boolean endBlank = false;
if(value.endsWith(separator)){
value +=" ";
endBlank = true;
}
separator = escapeExprSpecialWord(deparator);
if(endBlank){
rtn(rtn.length-1) = "";
}
}
return rtn;
}
public static String escapeExprSpecialWord(String keyWord){
if(keyword != null && !keyword.isEmpty()){
String[] fbsArr = {"\\","|","(",")"};
for(String key : fbsArr){
if(keyword.contains(key){
keyword = keyword.replace(key,"\\"+key);
}
}
}
return keyword;
}
MapReduce、Hbase接口API实践的更多相关文章
- hbase rest api接口链接管理【golang语言版】
# go-hbase-resthbase rest api接口链接管理[golang语言版]关于hbase的rest接口的详细信息可以到官网查看[http://hbase.apache.org/boo ...
- 3、大型项目的接口自动化实践记录----开放API练习
开始做实际项目前,先拿个网上的简单API练下手 一.API说明: 接口信息 接口名:京东获取单个商品价格 地址:http://p.3.cn/prices/mgets 入参:skuids=J_商品ID& ...
- Hbase客户端API基础小结笔记(未完)
客户端API:基础 HBase的主要客户端接口是由org.apache.hadoop.hbase.client包中的HTable类提供的,通过这个类,用户可以完成向HBase存储和检索数据,以及删除无 ...
- MapReduce/Hbase进阶提升(原理剖析、实战演练)
什么是MapReduce? MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约)",和他们 ...
- 【原创 Hadoop&Spark 动手实践 3】Hadoop2.7.3 MapReduce理论与动手实践
开始聊MapReduce,MapReduce是Hadoop的计算框架,我学Hadoop是从Hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...
- HBase学习与实践
Photo by bealach verse on Unsplash 参考书籍:<HBase 权威指南> -- Lars George著. 文章为个人从零开始学习记录,如有错误,还请不吝赐 ...
- HBase伪分布式环境下,HBase的API操作,遇到的问题
在hadoop2.5.2伪分布式上,安装了hbase1.0.1.1的伪分布式 利用HBase的API创建个testapi的表时,提示 Exception in thread "main&q ...
- ASP.NET Web API实践系列04,通过Route等特性设置路由
ASP.NET Web API路由,简单来说,就是把客户端请求映射到对应的Action上的过程.在"ASP.NET Web API实践系列03,路由模版, 路由惯例, 路由设置"一 ...
- (转载)Linux系统调用及用户编程接口(API)
(转载)http://www.farsight.com.cn/news/emb167.htm 1 Linux系统调用 所谓系统调用是指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组 ...
随机推荐
- 使用Git进行代码管理的心得
使用GitHub进行代码托管的方法 我是直接下载 Github for Windows ,这个软件自带一个 Github 客户端 和一个 Git shell,其中Github是图形化界面,对初学者来说 ...
- 【堆栈应用一】一个数divided=几个最小质因数的乘积(时间复杂度On)
此算法由LQD提供
- IIS7配置asp网站
An error occurred on the server when processing the URL. Please contact the system administrator. If ...
- mssqlserver 分日志(日志文件过大)
ALTER DATABASE HexStudyDB3Reader SET RECOVERY SIMPLE WITH NO_WAIT ALTER DATABASE HexStudyDB3Reader S ...
- 做办公用品、文具方面的 B2C 是否有前景呢?
企乐买现在正在做这方面的事,从市场角度来说需求是有的,客单价和重复购买率都还可以,但是也存在几个致命问题使得施展不开举步维艰: 1.中国特有的市场环境:在美国企业办公用品一般都是网上采购,避免灰色的东 ...
- 用Handler图片轮播练习
XML代码 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:andr ...
- C++ Daily 《3》----构造函数可否是虚函数
C++ 中构造函数可否是虚函数? 绝不要!! 而且,在构造函数中调用虚函数也是不提倡的行为,因为会引发预想不到的结果. 因为,在 derived class 对象构造的过程中,首先调用的是基类的构造函 ...
- 浏览器兼容 copyToClipboard("拷贝内容")
function copyToClipboard(txt) { if (window.clipboardData) { window.clipboardData.clearData(); clipbo ...
- BZOJ 4326 树链剖分+二分+差分+记忆化
去年NOIP的时候我还不会树链剖分! 还是被UOJ 的数据卡了一组. 差分的思想还是很神啊! #include <iostream> #include <cstring> #i ...
- python模块之logging
在现实生活中,记录日志非常重要.银行转账时会有转账记录:飞机飞行过程中,会有黑盒子(飞行数据记录器)记录飞行过程中的一切.如果有出现什么问题,人们可以通过日志数据来搞清楚到底发生了什么.对于系统开发. ...