6-druid源码分析之 Hadoop-index 过程
来源:互联网 发布:视频数据采集 编辑:程序博客网 时间:2024/05/29 17:10
druid 中数据批处理生成segment是通过 hadoop_index 方式来完成的.
hadoop_index 主要划分成两个过程,由两个 job 来分别完成.
hadoop-index 过程有两个 MR , 但是它们 Map 操作都是依赖于同一个抽象类HadoopDruidIndexerMapper.
这个类主要实现了 map 的前半段过程。
主要功能是 :
- 解析每一行数据,得到 timestamp, demenssion, metric 列。
- 将不在获取时间范围内的数据剔除掉
估算数据量
实现类
io.druid.indexer.DetermineHashedPartitionsJob
主要工作
DetermineHashedPartitionsJob 的工作主要是分析数据量并为数据转segment过程分配合理的桶的数量,每个桶有一个 reduce 去执行,
这样使得每个 reduce 的操作数据不至于过大。
- map 的操作:
map 的数量通过文件数量来决定, 每一个map对应一个文件.
map 中主要有一个 hyperLogLogs 对象, 这个对象在 setup 中创建, 它使用segment(interval)作为key, 然后一个类似 list 的结构作为value,
list 中的每一个值都具有唯一性,hyperLogLogs 是一个基数估计器,用来计算大量数据中不同元素的个数, 我们将 map 的时间戳跟维度列散列计算后,放到相对应的segment 中。
最终,我们通过计算hyperLogLogs 中每个segment 的元素个数,就确定去大致有多少条数据了。
map 中主要的操作如下 :
- map 从文件中读取的每一行数据,将时间戳在时间范围之外的数据排除掉, 然后将时间戳按照查询粒度进行规整,与维度列一起构成groupKey,groupKey 作为元素的计数标准, 求出每一个文件中每个segment中总共有的记录数量.
- 解析每一条数据,根据时间戳确定数据所属segment,然后将 groupKey 进行散列获取一个字节序列,将这个值add到 按照 segment 作为 key 的 hyperLogLogs 中。
- 当map的所有的数据解析完成后,遍历这个 hyperLogLogs 的所有的 key(segment), 将每一个 key 对应的值转字节数组后发送到对应的 reduce 中去。
数据从 map 中出来后就确定 reduce , 在DetermineHashedPartitionsJob中的partition 过程是依据 segment(interval) 的,及每个 segment 对应一个reduce.
reduce 中主要操作如下:
- reduce 端汇总指定的 segment 中的所有的hyperLogLogs 的输出数据,分析出总的记录条数写入文件。
当 job 运行完后, 我们便可以直到每个segment 中有多少条数据,然后我们可以根据配置,将每个 segment 划分桶
桶的数量 = 总的数量/maxPartitionSize[配置属性]
这样我们就分配好了当真正执行 segment 转换时需要多少个 reduce .
- 6-druid源码分析之 Hadoop-index 过程
- Hadoop源码分析之_NameNode regular过程分析1
- Hadoop源码分析之_NameNode regular过程分析2
- Hadoop源码分析(三)--------------job提交过程分析(3)之job的split过程
- CodeIgniter源码分析之index.php
- CodeIgniter源码分析之index.php
- jQuery源码分析之$.index函数
- Hadoop源码分析之开篇
- Hadoop源码分析之Configuration
- Hadoop源码分析之FileSystem
- Hadoop源码分析之DistributedFileSystem
- Hadoop源码分析之Configuration
- Hadoop之JobTracker源码分析
- hadoop之WordCount源码分析
- hadoop之BlockPoolManager源码分析
- Hadoop中Mapper过程的源码分析
- Hadoop读写过程的源码分析
- Druid源码分析--整体结构
- SLAM浅析
- Android 使GridView横向水平滚动的实现方式
- jvm
- 解决VMware中Ubuntu无法联网的问题
- json前台的组装
- 6-druid源码分析之 Hadoop-index 过程
- 【转载】谈SCI、EI、ISTP三大索引收录号的检索
- 分布式开放消息系统(RocketMQ)的原理与实践
- 【原创】Ubuntu Server中的root用户
- echart,柱状图多列的展示
- 【原创】VirtualBox下的Ubuntu Server与本地系统的网络设置
- Android4.4之后休眠状态下Alarm不准时的问题
- 党史上的今天——2008年 奥运火炬接力启动
- 看变量jsp中包了几层从debug看