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相关推荐

  1. 大数据_Hbase-(数据写入流程)---Hbase工作笔记0009

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 上一节咱们详细的说了,hbase如何去读数据,读数据的原理. 咱们知道hbase,不能实现即席查询 ...

  2. 大数据高级开发工程师——HBase学习笔记(2)

    文章目录 大数据数据库之HBase HBase架构原理 HBase的数据存储原理 HBase读数据流程 HBase写数据流程 HBase的flush.compact机制 Flush触发条件 1. Me ...

  3. 向HBase中导入数据3:使用MapReduce从HDFS或本地文件中读取数据并写入HBase(增加使用Reduce批量插入)

    前面我们介绍了: 向HBase中导入数据1:查询Hive后写入 向HBase中导入数据2:使用MapReduce从HDFS或本地文件中读取数据并写入HBase(只使用Map逐条查询) 为了提高插入效率 ...

  4. 大数据-NoSQL数据库:HBase【基于Zookeeper/HDFS的分布式、高并发、可扩展的NoSQL数据库;支持“十亿行”ד百万列”海量数据的实时随机读写;仅支持单表查询;不擅长数据分析】

    HBase适合场景:单表超千万,上亿,且高并发! HBase不适合场景:主要需求是数据分析,比如做报表.数据量规模不大,对实时性要求高! HBase的查询工具有很多,如:Hive.Tez.Impala ...

  5. python爬取新闻并归数据库_Python爬取数据并写入MySQL数据库操作示例

    Python爬取数据并写入MySQL数据库的实例 首先我们来爬取 http://html-color-codes.info/color-names/ 的一些数据. 按 F12 或 ctrl+u 审查元 ...

  6. 计算机ROM的数据可以写入吗,计算机ROM存贮器中的内容只能读出,不能写入。()

    相关题目与解析 计算机存储器中的ROM()A.只能读出数据不能写入数据B.只能写入数据不能读出数据C.不能写入数据 关于计算机内存储器的描述,下列说法中不正确的有().A.ROM中的数据在使用时只能写 ...

  7. 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 ...

  8. python爬取mysql数据_Python爬取数据并写入MySQL数据库的实例

    Python爬取数据并写入MySQL数据库的实例 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Python爬取数据并写入MySQL数据库的实例.txt ] (友 ...

  9. 《从0到1学习Flink》—— Flink 读取 Kafka 数据批量写入到 MySQL

    <!-- more --> 前言 之前其实在 <从0到1学习Flink>-- 如何自定义 Data Sink ? 文章中其实已经写了点将数据写入到 MySQL,但是一些配置化的 ...

最新文章

  1. 主题:CS0016: 未能写入输出文件“c:#92;WINDOWS#92;Microsoft.NET#92;***.dll”错误处理...
  2. RMAN的rman: can't open target错误
  3. 这才是最好的程序语言,不服来辩
  4. ubuntu清除mac缓存
  5. 【Keras】学习笔记(二)
  6. k8s API编程:kubebuilder实战案例sidecarset
  7. mysql update n_mysql修改记录时update操作 字段=字段+字符串
  8. Redis与Memcache的区别
  9. valueOf()和toString()详解
  10. SequenceFile文件的读取
  11. .eslintrc.js相关配置
  12. 【嵌入式算法】CRC校验算法
  13. 2018厦门大学计算机考研分数,2018年厦门大学考研复试分数线【已公布】
  14. windows控制台命令: 快捷键大集合
  15. ABC162 D RGB Triplets
  16. 2个鸡蛋,100层楼问题;
  17. 无语的index hint:手工分配哈希区,5小时不出结果,优化后20分钟
  18. 云台和华为p30pro_除了拍月亮 华为P30 Pro还拍出了首部轻科幻CG短片
  19. 怎么跨网段用计算机名访问,如何在不同的网段上互相访问
  20. 微擎we7模块和模板安装方法

热门文章

  1. solidworks经典实例网盘下载_Solidworks自学视频教程(附源文件)讲解详细到位,成就设计高手...
  2. Java中有关Null的9件事
  3. Linux 中文件管理常用的工具
  4. CocoaPods公有库的创建
  5. 旋转遍历矩阵 Spiral Matrix
  6. 【C语言入门教程】3.4 循环控制语句
  7. 安装asp.net mvc4后mvc3项目编译报错
  8. 天地图,js 4.0 api,简单调用,高手请绕行
  9. vue 保留两位小数 不能直接用toFixed(2) ?
  10. 关于极光IM设置昵称不生效的解决办法