- 浏览: 111906 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
土豆蛋儿:
我想读取一个外部文件,以什么方式好了? 文件内容经常编辑
flume 自定义source -
土豆蛋儿:
大神,您好。
flume 自定义source
环境配置:
hadoop-2.0.0-cdh4.3.0 (4 nodes, 24G mem/node)
hbase-0.94.6-cdh4.3.0 (4 nodes,maxHeapMB=9973/node)
hive-0.10.0-cdh4.3.0
一、查询性能比较:
query1:
select count(1) from on_hdfs;
select count(1) from on_hbase;
query2(根据key过滤)
select * from on_hdfs
where key = '13400000064_1388056783_460095106148962';
select * from on_hbase
where key = '13400000064_1388056783_460095106148962';
query3(根据value过滤)
select * from on_hdfs where value = 'XXX';
select * from on_hbase where value = 'XXX';
on_hdfs (20万记录,150M,TextFile on HDFS)
on_hbase(20万记录,160M,HFile on HDFS)
on_hdfs (2500万记录,2.7G,TextFile on HDFS)
on_hbase(2500万记录,3G,HFile on HDFS)
从上图可以看出,
对于全表扫描,hive_on_hbase查询时候如果不设置catching,性能远远不及hive_on_hdfs;
根据rowkey过滤,hive_on_hbase性能上略好于hive_on_hdfs,特别是数据量大的时候;
设置了caching之后,尽管比不设caching好很多,但还是略逊于hive_on_hdfs;
二、Hive over HBase原理
Hive与HBase利用两者本身对外的API来实现整合,主要是靠HBaseStorageHandler进行通信,利用HBaseStorageHandler,Hive可以获取到Hive表对应的HBase表名,列簇以及列,InputFormat和OutputFormat类,创建和删除HBase表等。
Hive访问HBase中表数据,实质上是通过MapReduce读取HBase表数据,其实现是在MR中,使用HiveHBaseTableInputFormat完成对HBase表的切分,获取RecordReader对象来读取数据。
对HBase表的切分原则是一个Region切分成一个Split,即表中有多少个Regions,MR中就有多少个Map;
读取HBase表数据都是通过构建Scanner,对表进行全表扫描,如果有过滤条件,则转化为Filter。当过滤条件为rowkey时,则转化为对rowkey的过滤;
Scanner通过RPC调用RegionServer的next()来获取数据;
三、性能瓶颈分析
1. Map Task
Hive读取HBase表,通过MR,最终使用HiveHBaseTableInputFormat来读取数据,在getSplit()方法中对HBase表进行切分,切分原则是根据该表对应的HRegion,将每一个Region作为一个InputSplit,即,该表有多少个Region,就有多少个Map Task;
每个Region的大小由参数hbase.hregion.max.filesize控制,默认10G,这样会使得每个map task处理的数据文件太大,map task性能自然很差;
为HBase表预分配Region,使得每个Region的大小在合理的范围;
下图是给该表预分配了15个Region,并且控制key均匀分布在每个Region上之后,查询的耗时对比,其本质上是Map数增加。
2. Scan RPC 调用:
• 在Scan中的每一次next()方法都会为每一行数据生成一个单独的RPC请求, query1和query3中,全表有2500万行记录,因此要2500万次RPC请求;
• 扫描器缓存(Scanner Caching):HBase为扫描器提供了缓存的功能,可以通过参数hbase.client.scanner.caching来设置;默认是1;缓存的原理是通过设置一个缓存的行数,当客户端通过RPC请求RegionServer获取数据时,RegionServer先将数据缓存到内存,当缓存的数据行数达到参数设置的数量时,再一起返回给客户端。这样,通过设置扫描器缓存,就可以大幅度减少客户端RPC调用RegionServer的次数;但并不是缓存设置的越大越好,如果设置的太大,每一次RPC调用将会占用更长的时间,因为要获取更多的数据并传输到客户端,如果返回给客户端的数据超出了其堆的大小,程序就会终止并跑出OOM异常;
所以,需要为少量的RPC请求次数和客户端以及服务端的内存消耗找到平衡点。
rpc.metrics.next_num_ops
未设置caching,每个RegionServer上通过next()方法调用RPC的次数峰值达到1000万:
设置了caching=2000,每个RegionServer上通过next()方法调用RPC的次数峰值只有4000:
设置了caching之后,几个RegionServer上的内存消耗明显增加:
• 扫描器批量(Scanner Batch):缓存是面向行一级的操作,而批量则是面向列一级的操作。批量可以控制每一次next()操作要取回多少列。比如,在扫描器中设置setBatch(5),则一次next()返回的Result实例会包括5列。
• RPC请求次数的计算公式如下:
RPC请求次数 =
(表行数 * 每行的列数)/ Min(每行的列数,批量大小) / 扫描器缓存
因此,在使用Hive over HBase,对HBase中的表做统计分析时候,需要特别注意以下几个方面:
1. 对HBase表进行预分配Region,根据表的数据量估算出一个合理的Region数;
2. rowkey设计上需要注意,尽量使rowkey均匀分布在预分配的N个Region上;
3. 通过set hbase.client.scanner.caching设置合理的扫描器缓存;
4. 关闭mapreduce的推测执行:
set mapred.map.tasks.speculative.execution = false;
set mapred.reduce.tasks.speculative.execution = false;
hadoop-2.0.0-cdh4.3.0 (4 nodes, 24G mem/node)
hbase-0.94.6-cdh4.3.0 (4 nodes,maxHeapMB=9973/node)
hive-0.10.0-cdh4.3.0
一、查询性能比较:
query1:
select count(1) from on_hdfs;
select count(1) from on_hbase;
query2(根据key过滤)
select * from on_hdfs
where key = '13400000064_1388056783_460095106148962';
select * from on_hbase
where key = '13400000064_1388056783_460095106148962';
query3(根据value过滤)
select * from on_hdfs where value = 'XXX';
select * from on_hbase where value = 'XXX';
on_hdfs (20万记录,150M,TextFile on HDFS)
on_hbase(20万记录,160M,HFile on HDFS)
on_hdfs (2500万记录,2.7G,TextFile on HDFS)
on_hbase(2500万记录,3G,HFile on HDFS)
从上图可以看出,
对于全表扫描,hive_on_hbase查询时候如果不设置catching,性能远远不及hive_on_hdfs;
根据rowkey过滤,hive_on_hbase性能上略好于hive_on_hdfs,特别是数据量大的时候;
设置了caching之后,尽管比不设caching好很多,但还是略逊于hive_on_hdfs;
二、Hive over HBase原理
Hive与HBase利用两者本身对外的API来实现整合,主要是靠HBaseStorageHandler进行通信,利用HBaseStorageHandler,Hive可以获取到Hive表对应的HBase表名,列簇以及列,InputFormat和OutputFormat类,创建和删除HBase表等。
Hive访问HBase中表数据,实质上是通过MapReduce读取HBase表数据,其实现是在MR中,使用HiveHBaseTableInputFormat完成对HBase表的切分,获取RecordReader对象来读取数据。
对HBase表的切分原则是一个Region切分成一个Split,即表中有多少个Regions,MR中就有多少个Map;
读取HBase表数据都是通过构建Scanner,对表进行全表扫描,如果有过滤条件,则转化为Filter。当过滤条件为rowkey时,则转化为对rowkey的过滤;
Scanner通过RPC调用RegionServer的next()来获取数据;
三、性能瓶颈分析
1. Map Task
Hive读取HBase表,通过MR,最终使用HiveHBaseTableInputFormat来读取数据,在getSplit()方法中对HBase表进行切分,切分原则是根据该表对应的HRegion,将每一个Region作为一个InputSplit,即,该表有多少个Region,就有多少个Map Task;
每个Region的大小由参数hbase.hregion.max.filesize控制,默认10G,这样会使得每个map task处理的数据文件太大,map task性能自然很差;
为HBase表预分配Region,使得每个Region的大小在合理的范围;
下图是给该表预分配了15个Region,并且控制key均匀分布在每个Region上之后,查询的耗时对比,其本质上是Map数增加。
2. Scan RPC 调用:
• 在Scan中的每一次next()方法都会为每一行数据生成一个单独的RPC请求, query1和query3中,全表有2500万行记录,因此要2500万次RPC请求;
• 扫描器缓存(Scanner Caching):HBase为扫描器提供了缓存的功能,可以通过参数hbase.client.scanner.caching来设置;默认是1;缓存的原理是通过设置一个缓存的行数,当客户端通过RPC请求RegionServer获取数据时,RegionServer先将数据缓存到内存,当缓存的数据行数达到参数设置的数量时,再一起返回给客户端。这样,通过设置扫描器缓存,就可以大幅度减少客户端RPC调用RegionServer的次数;但并不是缓存设置的越大越好,如果设置的太大,每一次RPC调用将会占用更长的时间,因为要获取更多的数据并传输到客户端,如果返回给客户端的数据超出了其堆的大小,程序就会终止并跑出OOM异常;
所以,需要为少量的RPC请求次数和客户端以及服务端的内存消耗找到平衡点。
rpc.metrics.next_num_ops
未设置caching,每个RegionServer上通过next()方法调用RPC的次数峰值达到1000万:
设置了caching=2000,每个RegionServer上通过next()方法调用RPC的次数峰值只有4000:
设置了caching之后,几个RegionServer上的内存消耗明显增加:
• 扫描器批量(Scanner Batch):缓存是面向行一级的操作,而批量则是面向列一级的操作。批量可以控制每一次next()操作要取回多少列。比如,在扫描器中设置setBatch(5),则一次next()返回的Result实例会包括5列。
• RPC请求次数的计算公式如下:
RPC请求次数 =
(表行数 * 每行的列数)/ Min(每行的列数,批量大小) / 扫描器缓存
因此,在使用Hive over HBase,对HBase中的表做统计分析时候,需要特别注意以下几个方面:
1. 对HBase表进行预分配Region,根据表的数据量估算出一个合理的Region数;
2. rowkey设计上需要注意,尽量使rowkey均匀分布在预分配的N个Region上;
3. 通过set hbase.client.scanner.caching设置合理的扫描器缓存;
4. 关闭mapreduce的推测执行:
set mapred.map.tasks.speculative.execution = false;
set mapred.reduce.tasks.speculative.execution = false;
发表评论
-
HBase Rowkey的散列与预分区设计
2015-03-03 14:51 992HBase中,表会被划分为1. ... -
hbase bluk loading
2015-03-03 11:29 813使用HBASE的BULK LOAD 一、 ... -
hbase 布隆过滤器
2014-12-23 10:48 2339布隆过滤器: 1.原理? 数据块索引提供了一个有效的方法, ... -
hbase 自定义filter
2014-12-17 17:22 663base自带的filter已经很多了,按照RK,CF,CQ过滤 ... -
HBase性能优化方法总结(四):数据计算
2014-12-12 10:57 670HBase性能优化方法总结(四):数据计算 本文主要是从HB ... -
HBase性能优化方法总结(三):读表操作
2014-12-12 10:56 646HBase性能优化方法总结(三):读表操作 本文主要是从HB ... -
HBase性能优化方法总结(二):写表操作
2014-12-12 10:55 524HBase性能优化方法总结 ... -
hbase 表设计
2014-12-12 10:54 649HBase性能优化方法总结(一):表的设计 本文主要是从HB ... -
hbase 快照
2014-12-10 15:52 503Apache HBase快照介绍 分享 ... -
hbase 日常维护
2014-12-09 10:46 493一,基本命令: ... -
hive 数据倾斜
2014-08-27 09:03 685链接:http://www.alidata.org/archi ... -
hive 分通总结
2014-08-27 08:42 574总结分析: 1. 定义了桶,但要生成桶的数据,只能是由其他表 ... -
深入了解Hive Index具体实现
2014-08-25 08:51 737索引是标准的数据库技术,hive 0.7版本之后支持索引。hi ... -
explain hive index
2014-08-24 16:44 1145设置索引: 使用聚合索引优化groupby操作 hive> ... -
Hive 中内部表与外部表的区别与创建方法
2014-08-15 17:11 761分类: Hive 2013-12-07 11:56 ... -
hive map和reduce的控制
2014-08-15 16:14 623一、 控制hive任务中的map数: 1. 通 ... -
hive 压缩策略
2014-08-15 15:16 1767Hive使用的是Hadoop的文件 ... -
hive 在mysql中创建备用数据库
2014-08-15 09:21 880修改hive-site.xml <property> ... -
HIVE 窗口及分析函数
2014-08-11 16:21 1187HIVE 窗口及分析函数 使 ... -
hive 内置函数
2014-08-11 09:06 30681.sort_array(): sort_array(arra ...
相关推荐
在大数据领域,构建一个完整的生态系统是至关重要的,其中包括多个组件,如Hadoop、Spark、Hive、HBase、Oozie、Kafka、Flume、Flink、Elasticsearch和Redash。这些组件协同工作,提供了数据存储、处理、调度、流...
毕业设计基于hadoop+hive+hbase+echarts的招聘信息大数据分析平台源码+论文PDF(高分毕设)毕业设计基于hadoop+hive+hbase+echarts的招聘信息大数据分析平台源码+论文PDF(高分毕设)毕业设计基于hadoop+hive+hbase+...
毕业设计基于hadoop+hive+hbase+echarts的招聘信息大数据分析平台源码+文档说明(高分毕设)毕业设计基于hadoop+hive+hbase+echarts的招聘信息大数据分析平台源码+文档说明(高分毕设)毕业设计基于hadoop+hive+...
### Centos+Hadoop+Hive+HBase 环境搭建详解 #### 一、Centos基础环境搭建 ##### 1.1 软件准备 为了搭建一个基于Centos的操作系统,需要准备以下软件: - **VMware-workstation-full-8.0.4-744019.exe**:这是...
毕业设计 基于hadoop+hive+hbase+echarts的招聘信息大数据分析平台源码+详细说明+全部数据资料 高分项目.毕业设计 基于hadoop+hive+hbase+echarts的招聘信息大数据分析平台源码+详细说明+全部数据资料 高分项目. ...
jdk1.8.0_131、apache-zookeeper-3.8.0、hadoop-3.3.2、hbase-2.4.12 mysql5.7.38、mysql jdbc驱动mysql-connector-java-8.0.8-dmr-bin.jar、 apache-hive-3.1.3 2.本文软件均安装在自建的目录/export/server/下 ...
spark练习2 hadoop+hive+hbase
HDFS+MapReduce+Hive+HBase十分钟快速入门.pdf
HDFS+MapReduce+Hive+HBase十分钟快速入门,包括这几个部分的简单使用
在大数据处理领域,Hadoop生态系统中的HDFS(Hadoop Distributed File System)、MapReduce、Hive和HBase是四个至关重要的组件。本资料“HDFS+MapReduce+Hive+HBase十分钟快速入门”旨在帮助初学者迅速理解这些技术...
基于Flink+ClickHouse构建的分析平台,涉及 Flink1.9.0 、ClickHouse、Hadoop、Hbase、Kafka、Hive、Jmeter、Docker 、HDFS、MapReduce 、Zookeeper 等技术
源代码主要用于学习:1. Spring Boot+Hadoop+Hive+Hbase实现数据基本操作,Hive数据源使用Alibaba DruidDataSource,以及JDBCTemplate操作数
《hadoop-HDFS+MapReduce+Hive+Hbase快速入门》,一门入门hadoop的经典书籍,相信能够给学习云计算的大家带来帮助。
标题中的“Spring Boot+Hadoop+Hive+Hbase实现数据基本操作”是一个关于大数据处理技术集成应用的项目。这个项目结合了四个重要的组件来处理和管理大规模数据: 1. **Spring Boot**: 是一个基于Java的框架,用于...
Hadoop+Hbase+Spark+Hive搭建指南 Hadoop是Apache开源的大数据处理框架,它提供了可靠的高效的数据存储和处理能力。Hbase是基于Hadoop的分布式NoSQL数据库,提供了高效的数据存储和检索能力。Spark是基于内存的数据...
### 第15章-Sqoop+Hive+Hbase+Kettle+R某技术论坛日志分析项目案例 #### 案例概述 本案例详细介绍了如何利用一系列大数据处理工具,包括Sqoop、Hive、Hbase、Kettle以及R语言,对一个技术论坛的日志数据进行分析的...
NULL 博文链接:https://ilnba.iteye.com/blog/1450909