hadoop实战随笔_170814

group By操作

map端部分聚合。并不是所有的聚合操作都需要在reduce部分进行,很多聚合操作都可以先在map端进行部分聚合,然后在reduce端得出最终结果。

hive.map.aggr=true,用于设定是否在map端进行聚合,默认为True。hive.groupby.mapaggr.checkinterval=100000,用于设定在map端进行聚合操作的条目数。

有数据倾斜(数据分布不均匀)时进行负载均衡。此处需要设定hive.groupby.skewindata,当选项设定为true时,生成的查询计划会有两个MapReduce任务。在第一个MapReduce中,map的输出结果集合会随机分布到reduce中,每个reduce做部分聚合操作,并输出结果。这样处理的结果是,相同的额Group By Key有可能被分发到不同的reduce中,从而达到负载均衡的目的;第二个MapReduce任务再根据预处理的数据结果按照Group By Key分布到reduce中(这个过程可以保证相同的Group By Key分布到同一个Reduce中),最后完成最终的聚合操作。

HBase详解

HBase是Apache Hadoop的数据,能够对大型数据提供随机、实时的读写访问。HBase的运行依赖于其他文件系统,它模仿并提供基于Google文件系统的大表(bigtable)数据库的所有功能。

HBase的目标是存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列组成的大型数据。

HBase是一个开源的、分布式的、多版本的、面向列的存储模型。它可以直接使用本地文件系统,也可以使用Hadoop的HDFS文件存储系统。不过,为了提高数据的可靠性和系统的健壮性,并且发挥HBase处理大型数据的能力,还是使用HDFS作为文件存储系统更为稳妥。

HBase Shell

HBase为用户提供了一个非常方便的使用方式,我们称之为HBase Shell。

HBase Shell提供了大多数的HBase命令,通过HBase Shell用户可以方便地创建、删除及修改表,还可以向表中添加数据、列出表中的相关信息等。

在启动HBase之后,用户可以通过下面的命令进入HBase Shell中,代码:hbase shell

HBase配置

如果要对HBase进行配置,修改conf/hbase-default.xml文件或conf/hbase-site.xml文件中的property节点即可。

hbase.client.write.buffer

通过此参数设置写入缓冲区的数据大小,以字节为单位,默认写入缓冲区的数据大小为2MB。服务器通过此缓冲区可以加快处理速度,但是此值如果设置得过大势必加重服务器的负担,因此一定要根据实际情况设置。

hbase.master.meta.thread.rescanfrequency

HMaster会扫描ROOT和META表的时间间隔,以毫秒为单位。默认值为60000毫秒。此值不宜设置得过小,尤其是当存储数据过多的时候,否则频繁地扫描ROOT和META表将严重影响系统的性能。

hbase.regionserver.handler.count

客户端向服务器请求服务时,服务器现将客户端的请求连接放入一个队列中。然后服务器通过轮询的方式对其进行处理。这样每一个请求就会产生一个线程。此值要根据实际情况来设置,建议设置得大一些。在服务器端由于写数据缓存所消耗的大小为:habse.client.write.buffer * hbase.regionsever.handler.count

hbase.hregion.max.filesize

通过此参数可以设置HRegion中HstoreFile文件的最大值,以字节为单位。当表中的列族超过此值时,它将被分割。其默认大小为256MB。

hfile.block.cache.size

HFile/StoreFile缓存所占Java虚拟机堆大小的百分比,默认值为0.2,即20%。将其值设置为0表示禁用此选项

hbase.regionserver.global.memstore.upperLimit

在Region服务器中所有的memstore所占用Java虚拟机比例的最大值。默认值为0.4,即40%。当memstore所占用的空间超过此值时,更新操作将被阻塞,并且所有的内容将被强制写出。

hbase.hregion.memstore.flush.size

如果memstore缓存的内容大小超过此参数所设置的值,那么它将被写到磁盘上。默认值为64MB。

另外,在配置文件中还有很多关于zookeeper配置的参数。

HBase体系结构

HBase的服务器体系结构遵从简单的主从服务器架构,它由HRegion服务器(HRegion Server)群和HBase Master服务器负责管理所有的HRegion服务器,而HBase中所有的服务器都是通过Zookeeper来进行协调并处理HBase服务器运行期间可能遇到的错误的。HBase Master Server本身并不存储HBase中的任何数据,HBase逻辑上的表可能被划分成多个HRegion,然后存储到HRegion Server群中。HBase Master Server中存储的是从数据到HRegion Server的映射。

HRegion

当表的大小超过设置值的时候,HBase会自动地将表划分为不同的区域,每个区域包含所有行的一个子集。对用户来说,每个表是一堆数据的集合,靠主键来区分。从物理上来说,一张表被拆分成了多块,每一块就是一个HRegion。我们用表名+开始/结束主键,来区分每一个HRegion,一个HRegion会保存一个表里面某段连续的数据,从开始主键到结束主键,一张完整的表格是保存在多个HRegion上面的。

HRegion服务器

所有的数据库数据一般是保存在Hadoop分布式文件系统上面的,用户通过一系列HRegion服务器获取这些数据,一台机器上面一般只运行一个HRegion服务器,且每一个区段的HRegion也只会被一个HRegion服务器维护。

当用户更新数据的时候,他会被分配到对应的HRegion服务器上提交修改,这些修改先是被写到Hmemcache缓存和服务器的Hlog文件里面,在操作写入Hlog之后,commit()调用才会将其返回给客户端。

在读取数据的时候,HRegion服务器会先访问Hmemcache缓存,如果缓存里面没有该数据,才会回到Hstores磁盘上面寻找,每一个列族都会有一个Hstore集合,每个Hstore集合包含很多具体的HstoreFile文件,这些文件都是B树结构的,方便快速读取。

系统会定期调用HRegion.flushcache()把缓存里面的内容写到文件中,一般这会增加一个新的HstoreFile文件,而此时高速缓存就会被清空,并且会写一个标记到Hlog上,这表示上面的内容已经被写入到文件中保存。

时间: 2024-10-07 17:15:45

hadoop实战随笔_170814的相关文章

Hadoop实战视频教程完整版 完整的Hadoop大数据视频教程

分享一套迪伦老师的完整的Hadoop实战视频教程,教程从学习Hadoop需要的数据库.Java和Linux基础讲起,非常适合零基础的学员,课程最后结合了实战项目演练,理论结合实战,深入浅出,绝对是当前最为完整.实战的Hadoop教程. <Hadoop大数据零基础高端实战培训系列配文本挖掘项目(七大亮点.十大目标)> 课程讲师:迪伦 课程分类:大数据 适合人群:初级 课时数量:230课时 用到技术:部署Hadoop集群 涉及项目:京东商城.百度.阿里巴巴 咨询QQ:1337192913(小公子)

升级版:深入浅出Hadoop实战开发(云存储、MapReduce、HBase实战微博、Hive应用、Storm应用)

      Hadoop是一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储.Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上.而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序

Hadoop实战实例

Hadoop实战实例 Hadoop 是Google MapReduce的一个Java实现.MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行.就如同java程序员可以不考虑内存泄露一样, MapReduce的run-time系统会解决输入数据的分布细节,跨越机器集群的程序执行调度,处理机器的失效,并且管理机器之间的通讯请求.这样的模式允许程序员可以不需要有什么并发处理或者分布式系统的经验,就可以处理超大的分布式系统得资源. 一.概论 作为Hado

Hadoop实战 Hadoop Pipes运行C++程序问题解决

说明:我使用的是hadoop-1.2.1,开发环境是OpenSuSE12.3 x64. Hadoop安装在/usr/lib/hadoop下.并且我的hadoop的相关指令已经加入到了系统的path中. 下面四篇有我解决问题时,所主要参考的文档: 1.http://www.cnblogs.com/lanxuezaipiao/p/3648853.html 该博客指出64位的libhadooppipes.a和   libhadooputils.a这两个库应该由我们自己编译,官方提供的是32位的库. 2

Hadoop实战之三~ Hello World

前言 本文介绍的是在Ubuntu下安装用三台PC安装完成Hadoop集群并运行好第一个Hello World的过程,软硬件信息如下: Ubuntu:12.04 LTS Master: 1.5G RAM,奔腾处理器. Slave1.Slave2:4G RAM,I3处理器. 开始 1 安装Ubuntu : http://cdimage.ubuntu.com/releases/12.04/release/,Ubuntu的安装过程网上有很多,这里不再赘述了,安装之前一定要对Linux的目录树和Mount

Hadoop实战视频教程下载

Hadoop大数据零基础高端实战培训系列配文本挖掘项目 大数据Hadoop实战视频教程就从最基础的Java语法.数据库.Linux讲起到深入Hadoop大数据技术所必须的所有知识,设计Hadoop生态圈所有常用组件,包括但不限于:Greenplum数据库.HBase.Hive.Pig.ZooKeeper.Chukwa.Hadoop 2.0架构.部署以及YARN.Spark.Storm和Tez.MapReduce和HBase.Sqoop.Flume.Avro.Mahout的Hadoop重要子项目以

Hadoop on Mac with IntelliJ IDEA - 10 陆喜恒. Hadoop实战(第2版)6.4.1(Shuffle和排序)Map端 内容整理

下午对着源码看陆喜恒. Hadoop实战(第2版)6.4.1  (Shuffle和排序)Map端,发现与Hadoop 1.2.1的源码有些出入.下面作个简单的记录,方便起见,引用自书本的语句都用斜体表示. 依书本,从MapTask.java开始.这个类有多个内部类: 从书的描述可知,collect()并不在MapTask类,而在MapOutputBuffer类,其函数功能是 1.定义输出内存缓冲区为环形结构2.定义输出内存缓冲区内容到磁盘的操作 在collect函数中将缓冲区的内容写出时会调用s

深入浅出Hadoop实战开发实例视频教程

Hadoop实例视频教程-深入浅出Hadoop实战开发Hadoop是什么,为什么要学习Hadoop?Hadoop是一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储.Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上.而且它提供高传输率(high throughput

深入浅出Hadoop实战开发教程

升级版深入浅出Hadoop实战开发(云存储.MapReduce.HBase实战微博.Hive应用.Storm应用)http://www.ibeifeng.com/goods-488.html咨询QQ2110053820课程讲师:明义(robby) 课程分类:Hadoop适合人群:初级课时数量:35课时用到技术:hadoop.MapReduce.hbase.hive涉及项目:云存储.微博应用等 课程简介:Hadoop 是一个能够对大量数据进行分布式处理的软件框架.但是 Hadoop 是以一种可靠.