数据如何写入到HBase
TableMapReduceUtil.initTableReducerJob是用来向外输出的,传递的参数之一,就是tableName。该方法做的最主要的事,就是设置输出格式化类、配置表。
//设置输出格式化类job.setOutputFormatClass(TableOutputFormat.class);if (reducer != null) job.setReducerClass(reducer);//输出到table中,table就是传进来的表名conf.set(TableOutputFormat.OUTPUT_TABLE, table);
数据如何按照TableOutputFormat对外输出呢?TableOutputFormat —> TableRecordWriter —> write()方法
这个write()方法就是Reduce执行context.write()走的。抽象write方法就是实现的TableRecordWriter:
@Override
public void write(KEY key, Mutation value)
throws IOException {if (value instanceof Put) this.table.put(new Put((Put)value));else if (value instanceof Delete) this.table.delete(new Delete((Delete)value));else throw new IOException("Pass a Delete or a Put");
}
在write方法中,未用到key所以用的时候传null就行。如果value是Put类型,就走table.put方法,创建Put对象。如果value是Delete类型,就走table.delete方法,创建Delete对象。
这个table来自静态内部类TableRecordWriter:
private HTable table;//构造方法进行了table赋值
public TableRecordWriter(HTable table) {this.table = table;
}
构造进行了赋值操作,且被getRecordWriter调用:
@Override
public RecordWriter<KEY, Mutation> getRecordWriter(TaskAttemptContext context)
throws IOException, InterruptedException {//调构造方法,传了this.table,即TableInputFormat中的tablereturn new TableRecordWriter<KEY>(this.table);
}
setConf方法会为table赋值:
this.table = new HTable(this.conf,tableName);
这个表名是从conf配置文件中取出来的:
String tableName = this.conf.get(OUTPUT_TABLE);
于是就关联起来了:
//输出到table中,table就是传进来的表名
conf.set(TableOutputFormat.OUTPUT_TABLE, table);
我们传了表名进来,它会写到配置中。用的时候就会从配置中读,得到表名。等对外输出write的时候回判断Put、Delete类型,并调用table的对应方法。如此,数据就自然写入到HBase表中了。
数据如何写入到HBase相关推荐
- 大数据_Hbase-(数据写入流程)---Hbase工作笔记0009
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 上一节咱们详细的说了,hbase如何去读数据,读数据的原理. 咱们知道hbase,不能实现即席查询 ...
- 大数据高级开发工程师——HBase学习笔记(2)
文章目录 大数据数据库之HBase HBase架构原理 HBase的数据存储原理 HBase读数据流程 HBase写数据流程 HBase的flush.compact机制 Flush触发条件 1. Me ...
- 向HBase中导入数据3:使用MapReduce从HDFS或本地文件中读取数据并写入HBase(增加使用Reduce批量插入)
前面我们介绍了: 向HBase中导入数据1:查询Hive后写入 向HBase中导入数据2:使用MapReduce从HDFS或本地文件中读取数据并写入HBase(只使用Map逐条查询) 为了提高插入效率 ...
- 大数据-NoSQL数据库:HBase【基于Zookeeper/HDFS的分布式、高并发、可扩展的NoSQL数据库;支持“十亿行”ד百万列”海量数据的实时随机读写;仅支持单表查询;不擅长数据分析】
HBase适合场景:单表超千万,上亿,且高并发! HBase不适合场景:主要需求是数据分析,比如做报表.数据量规模不大,对实时性要求高! HBase的查询工具有很多,如:Hive.Tez.Impala ...
- python爬取新闻并归数据库_Python爬取数据并写入MySQL数据库操作示例
Python爬取数据并写入MySQL数据库的实例 首先我们来爬取 http://html-color-codes.info/color-names/ 的一些数据. 按 F12 或 ctrl+u 审查元 ...
- 计算机ROM的数据可以写入吗,计算机ROM存贮器中的内容只能读出,不能写入。()
相关题目与解析 计算机存储器中的ROM()A.只能读出数据不能写入数据B.只能写入数据不能读出数据C.不能写入数据 关于计算机内存储器的描述,下列说法中不正确的有().A.ROM中的数据在使用时只能写 ...
- Apache POI和EasyExcel 第三集:Apache POI的Excel大数据量写入(分为03版的xls、07版的xlsx、升级版SXSSF)
Apache POI和EasyExcel 第三集:Apache POI的Excel大数据量写入(分为03版的xls.07版的xlsx.升级版SXSSF) 一.结果 我的03跑了1.204秒,07跑了5 ...
- python爬取mysql数据_Python爬取数据并写入MySQL数据库的实例
Python爬取数据并写入MySQL数据库的实例 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: Python爬取数据并写入MySQL数据库的实例.txt ] (友 ...
- 《从0到1学习Flink》—— Flink 读取 Kafka 数据批量写入到 MySQL
<!-- more --> 前言 之前其实在 <从0到1学习Flink>-- 如何自定义 Data Sink ? 文章中其实已经写了点将数据写入到 MySQL,但是一些配置化的 ...
最新文章
- 主题:CS0016: 未能写入输出文件“c:#92;WINDOWS#92;Microsoft.NET#92;***.dll”错误处理...
- RMAN的rman: can't open target错误
- 这才是最好的程序语言,不服来辩
- ubuntu清除mac缓存
- 【Keras】学习笔记(二)
- k8s API编程:kubebuilder实战案例sidecarset
- mysql update n_mysql修改记录时update操作 字段=字段+字符串
- Redis与Memcache的区别
- valueOf()和toString()详解
- SequenceFile文件的读取
- .eslintrc.js相关配置
- 【嵌入式算法】CRC校验算法
- 2018厦门大学计算机考研分数,2018年厦门大学考研复试分数线【已公布】
- windows控制台命令: 快捷键大集合
- ABC162 D RGB Triplets
- 2个鸡蛋,100层楼问题;
- 无语的index hint:手工分配哈希区,5小时不出结果,优化后20分钟
- 云台和华为p30pro_除了拍月亮 华为P30 Pro还拍出了首部轻科幻CG短片
- 怎么跨网段用计算机名访问,如何在不同的网段上互相访问
- 微擎we7模块和模板安装方法
热门文章
- solidworks经典实例网盘下载_Solidworks自学视频教程(附源文件)讲解详细到位,成就设计高手...
- Java中有关Null的9件事
- Linux 中文件管理常用的工具
- CocoaPods公有库的创建
- 旋转遍历矩阵 Spiral Matrix
- 【C语言入门教程】3.4 循环控制语句
- 安装asp.net mvc4后mvc3项目编译报错
- 天地图,js 4.0 api,简单调用,高手请绕行
- vue 保留两位小数 不能直接用toFixed(2) ?
- 关于极光IM设置昵称不生效的解决办法