《Hadoop技术原理》课件-13.Hadoop核心数据库_第1页
《Hadoop技术原理》课件-13.Hadoop核心数据库_第2页
《Hadoop技术原理》课件-13.Hadoop核心数据库_第3页
《Hadoop技术原理》课件-13.Hadoop核心数据库_第4页
《Hadoop技术原理》课件-13.Hadoop核心数据库_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Hadoop技术原理1.Hbase表设计Hbase表设计01HBase表设计01RowKey的设计建表预分区列簇设计(包括列簇属性设计)HBase表设计02设计表需要解决的问题1.行键结构应该是什么,应该包含什么?2.该表应有多少列族?3.哪些数据进入哪个列族?4.每个列族中有多少列?5.列名应该是什么?尽管在创建表时不需要定义列名,但是在写入或读取数据时需要知道它们。6.什么信息应该进入单元?7.每个单元应存储多少个版本?RowKey的设计03热点现象:某个小的时段内,对HBase的读写请求集中到极少数的Region上,导致这些Region所在的RegionServer处理请求量骤增,负载量明显偏大,而其他的RegionServer明显空闲。热点现象出现的原因,往往就是因为HBase表设计时,RowKey设计不合理造成的热点现象解决办法:RowKey的随机散列+创表预分区RowKey的设计04RowKey设计原则总的原则:避免热点现象,提高读写性能长度原则:最大长度64KB,开发通常10~100个字节,建议不超过16字节(hbase每个单元格以keyvalue进行存储的,因此都会存储rowkey)散列原则:将时间上连续产生的rowkey散列化,以避免集中到极少数Region上唯一原则:必须在设计上保证rowkey的唯一性RowKey设计结合业务在满足rowkey设计原则的基础上,往往需要将经常用于查询的字段整合到rowkey上,以提高检索查询效率列簇属性05目的创建HBase时,就预先根据可能的RowKey划分出多个Region而不是默认的一个,从而可以将后续的读写操作负载均衡到不同的Region上,避免热点现象原则:HBase表的预分区需要紧密结合业务场景来选择分区的key值,每个region都有一个startKey和一个endKey来表示该region存储的rowKey范围。列簇属性06方式(四种):create'ns1:t1','f1',SPLITS=>['10','20','30','40']create't1','f1',SPLITS_FILE=>'splits.txt',OWNER=>'johndoe'其中splits.txt文件内容是每行一个rowkey值create't1','f1',{NUMREGIONS=>15,SPLITALGO=>'HexStringSplit'}JavaAPI列簇属性07列簇属性08可配置的数据块大小BLOCKSIZE数据块缓存BLOCKCACHEIN_MEMORY缓存布隆过滤器BLOOMFILTERTTL单元格存活时间多版本VERSIONScreate'ns1:t1',{NAME=>'f1',VERSIONS=>5}压缩SNAPPY压缩配置COMPRESSION多列簇09create't1',{NAME=>'f1'},{NAME=>'f2'},{NAME=>'f3'}可对每个列簇单独设置各种属性值create't1','f1','f2','f3'启用SNAPPY压缩10给hadoop集群正确安装snappy压缩拷贝hadoop/lib下的native下的所有so文件和hadoop-snappy-0.0.1-SNAPSHOT.jar到hbase/lib下面如果有多台机器,每台机器都要拷贝分发拷贝完成后,重启hbase集群执行命令验证snappy是否验证成功,如果打印succes,即安装成功启用SNAPPY压缩11$bin/hbaseorg.apache.hadoop.hbase.util.CompressionTest/home/ibeifeng/zookeeper.outsnappy启用SNAPPY压缩12$exportHBASE_HOME=/opt/modules/hbase-0.98.6-cdh5.3.6$exportHADOOP_SNAPPY_HOME=/opt/modules/hadoop-snappy-0.0.1-SNAPSHOT$exportHADOOP_HOME=/opt/modules/hadoop-2.5.0-cdh5.3.6$

cp$HADOOP_SNAPPY_HOME/lib/hadoop-snappy-0.0.1-SNAPSHOT.jar$HBASE_HOME/lib$

mkdir-plib/native/Linux-amd64-64$

ln-s$HADOOP_HOME/lib/native/*

$HBASE_HOME/lib/native/Linux-amd64-64RestartHBaseCluster启用SNAPPY压缩13启用SNAPPY压缩14Hadoop技术原理2.Hbase优化Hbase优化01垃圾回收参数配置01堆内存:新生代、老生代,新生代空间大小一般为128~512M,老生代可达几GB,数据在新生代停留时间过长,就会转移到老生代中主要需要调节的是RegionServer节点的的JVM垃圾回收参数垃圾回收策略:ParrallelNewCollector垃圾回收策略、并行标记回收器(ConcurrentMark-SweepCollector),避免GC停顿exportHBASE_REGIONSERVER_OPTS=”-Xmx8g-Xms8G-Xmn128m-XX:UseParNewGC-XX:UseConcMarkSweepGC-XX:CMSInitiatingOccupancyFraction=70-verbose:gc-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-Xloggc:$HBASE_HOME/logs/gc-${hostname}-hbase.log”垃圾回收参数配置02Memstore&BlockCacheHBase上Regionserver的内存分为两个部分,一部分作为Memstore,主要用来写;另外一部分作为BlockCache,主要用于读。写请求会先写入Memstore,Regionserver会给每个region提供一个Memstore,当Memstore满128MB(hbase.hregion.memstore.flush.size)以后,会启动flush刷新到磁盘。当Memstore的总大小超过限制时(heapsize*hbase.regionserver.global.memstore.upperLimit*0.9),会强行启动flush进程,从最大的Memstore开始flush直到低于限制。读请求先到Memstore中查数据,查不到就到BlockCache中查,再查不到就会到磁盘上读,并把读的结果放入BlockCache。由于BlockCache采用的是LRU策略,因此BlockCache达到上限(heapsize*hfile.block.cache.size*0.85)后,会启动淘汰机制,淘汰掉最老的一批数据。在注重读响应时间的应用场景下,可以将BlockCache设置大些,Memstore设置小些,以加大缓存的命中率。HBase内存管理03Memstore&BlockCacheHBase内存管理04BlockCache将Cache分级思想的好处在于:首先,通过inMemory类型Cache,可以有选择地将in-memory的columnfamilies放到RegionServer内存中,例如Meta元数据信息;通过区分Single和Multi类型Cache,可以防止由于Scan操作带来的Cache频繁颠簸,将最少使用的Block加入到淘汰算法中。HBase内存管理05BlockCache默认配置下,对于整个BlockCache的内存,又按照以下百分比分配给Single、Multi、InMemory使用:0.25、0.50和0.25。其中InMemory队列用于保存HBaseMeta表元数据信息,因此如果将数据量很大的用户表设置为InMemory的话,可能会导致Meta表缓存失效,进而对整个集群的性能产生影响。HBase内存管理06本地MemStore缓存MemStore刷写数据到磁盘,造成RegionServer内存碎片增多,当生存时间较长的数据从堆的老生代空间刷写到磁盘,就会产生内存孔洞。由于碎片过多导致没有足够大的连续内存空间,JVM就会暂停工作进程,进行垃圾回收,导致HBase的RegionServer对外服务停顿本地MemStore缓存机制:启用本地memstore分配缓存区(Memstore-LocalAllocationBuffers,MSLAB),也就是允许从堆中分配相同大小的对象,一旦这些对象分配并且最终被回收,就会在堆中留下固定大小的孔洞,这些孔洞可被重复利用,GC就无需使应用程序进程停顿来进行回收内存空间,配置参数hbase.hregion.memstore.mslab.enabled,默认为true启用SNAPPY压缩07Compact和SplitHRegoinServer上的storefile文件是被后台线程监控的,以确保这些文件保持在可控状态。磁盘上的storefile的数量会随着越来越多的memstore被刷新而变等于越来越多——每次刷新都会生成一个storefile文件。当storefile数量满足一定条件时(可以通过配置参数类调整),会触发文件合并操作——minorcompaction,将多个比较小的storefile合并成一个大的storefile文件,直到合并的文件大到超过单个文件配置允许的最大值时会触发一次region的自动分割,即regionsplit操作,将一个region平分成2个。启用SNAPPY压缩08Compactionminorcompaction,轻量级将符合条件的最早生成的几个storefile合并生成一个大的storefile文件,它不会删除被标记为“删除”的数据和以过期的数据,并且执行过一次minor合并操作后还会有多个storefile文件。majorcompaction,重量级把所有的storefile合并成一个单一的storefile文件,在文件合并期间系统会删除标记为"删除"标记的数据和过期失效的数据,同时会block所有客户端对该操作所属的region的请求直到合并完毕,最后删除已合并的storefile文件。预创建Region09HBase二级索引协处理器:将部分处理逻辑移到服务端进行执行,充分利用分布式并发优势Observer类协处理器,类似于关系型数据库的触发器Endpoint类协处理器,类似于关系型数据库中的存储过程二级索引概念使用Phoenix实现HBase表的二级索引预创建Region10HBase二级索引介绍HBase提供了检索数据的功能,不过原有系统仅提供了通过rowkey检索数据的功能,过于单一,不灵活,一旦查询条件改变了往往设计到要全表扫面过滤,极大浪费机器物理资源,又达不到实时的一个效果。HBase二级索引功能解决了原有HBase系统中仅能够通过rowkey检索数据的问题,使得用户能够指定多种条件,在HBase表中进行数据的实时检索与统计。它提供了强大的数据检索功能。HBase只提供了一个基于字典排序的主键索引,在查询中你只能通过行键查询或扫描全表来获取数据HBase基于rowkey的全局索引:Zookeeper的znode节点/hbase/meta-region-server-->hbase:mata预创建Region11HBase二级索引实现思路预创建Region12HBase二级索引实现的方案一使用HBase的coprocessorCoProcessor相当于HBase的Observer+hook,目前支持MasterObserver、RegionObserver和WALObserver,基本上对于HBaseTable的管理、数据的Put、Delete、Get等操作都可以找到对应的pre***和post***。这样如果需要对于某一项Column建立SecondaryIndexing,就可以在Put、Delete的时候,将其信息更新到另外一张索引表中。对于Indexing里面的value值是否存储的问题,可以根据需要进行控制,如果value的空间开销不大,逆向的检索又比较频繁,可以直接存储在IndexingTable中,反之则避免这种情况。预创建Region13HBase二级索引实现的方案一预创建Region14HBase二级索引实现的方案二由客户端发起对于主表和索引表的Put、Delete操作的双重操作它具体的做法总结起来有:设置主表的TTL(TimeToLive)比索引表小一点,让其略早一点消亡。不要在IndexingTable存储Value值。Put操作时,对于操作的主表的所有列,使用同一的LocalTimeStamp的值,更新到IndexingTable,然后使用该TimeStamp插入主表数据。Delete操作时,首先操作主表的数据,然后再去更新IndexingTable的数据。Hadoop技术原理3.使用HBasePhoenix运行SQL操作HBasePhoenix运行SQL操作01Phoenix简介01SQLONHBase构建在ApacheHBase(列式大数据存储)之上的一个SQL中间层,实现SQL访问HBase表数据,实现HBase表多条件查询不同于HiveonHBase的方式,Phoenix将QueryPlan直接使用HBaseAPI实现,目的是规避MapReduce框架,减少查询的时间延迟;Phoenix中SQLQueryPlan的执行,基本上是通过构建一系列的Hbasescan来完成Phoenix安装部署使用02版本选择下载Phoenix-4.2.2源码/dist/phoenix/phoenix-4.2.2/src/上传源码包到服务器,解压,编译安装关联HBasePhoenix安装部署使用03版本选择官方已编译好的Phoenix安装包,其中Phoenix-4.2.2对应hbase-0.98.4,Phoenix-4.3.0对应hbase-0.98.9,而我们使用的hbase版本是0.98.6,则需要基于Phoenix-4.2.2源码重新编译。Phoenix安装部署使用04编译使用maven编译前,修改项目的pom.xml文件,指定hadoop、hbase版本,然后执行mvncleanpackage-DskipTestsPhoenix安装部署使用05如果依赖cdh版本的hadoop和hbase,则修改相应的版本为:还需要在pom.xml中添加cdh的源编译Phoenix安装部署使用06安装编译好后,在解压编译目录下,找到Phoenix-assembly子目录,找到phoenix的tar包将该tar包解压到/opt/modules目录下$tar-zxvfphoenix-4.2.2.tar.gz-C/opt/modules/Phoenix安装部署使用07关联HBase在安装目录下找到phoenix-4.2.2-client.jar和lib/phoenix-core.4.2.2.jar依赖包,拷贝到HBase的每个RegionServer节点的lib目录下,然后重启hbase,注意hbase集群是否能够正常重启拷贝HBase中的hbase-site.xml文件里面的内容到phoenix安装目录的bin目录下的hbase-site.xml文件中PhoenixShell08Phoenix连接HBase,执行bin/sqlline.pybin/sqlline.pyzookeeper_host:2181访问hbase加载数据到HBase表中bin/psql.pybin/psql.py-texample:2181~/example.csvPhoenixShell09Phoenix映射HBase原有的表安装好phoenix后对于HBase中已经存在的数据表不会自动进行映射,所以想要再phoenix中操作HBase已有数据表就需要手动进行配置HBase数据表默认主键列名是ROW案例:先在hbase上创建一张表create'phoenix','info'插入几行记录:

put'phoenix','row001','info:name','phoenix'put'phoenix','row002','info:name','hbase'createtable"phoenix"(ROWvarcharprimarykey,"info"."name"varchar);这里一定要注意的是表名和列族以及列名需要用双引号括起来,因为HBase是区分大小写的,如果不用双引号括起来的话Phoenix在创建表的时候会自动将小写转换为大写字母,这样HBase中会创建另外一张表PHOENIXPhoenixShell10PhoenixShell创建表createtabletest.test1(idbigintprimarykey,namevarchar);插入数据upsertintotest.test1(id,name)values(1,'aaaa');删除数据deletefromtest.test1;删除表droptabletest.test1;Phoenix语法:http://forcedotcom.github.io/phoenix/PhoenixShell11PhoenixShell常见问题一警告原因:依赖的hadoop-common-2.2.jar包中core-default.xml没有配置fs.hdfs.impl的属性解决办法PhoenixShell12PhoenixShell常见问题二缺失servletjar包(cdh版本编译)解决办法:将javax.servlet依赖包下载到,加到phoenix的lib目录下PhoenixShell13PhoenixJavaAPI创建maven项目到重新编译好的Phoenix目录下,将phoenix-4.2.2-client.jar和phoenix-core-4.2.2.jar添加到项目的classpath中Java以jdbc方式访问步骤加载驱动类Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");获取连接对象使用连接对象,执行sql语句处理查询结果关闭连接Hadoop技术原理4.使用HBasePhoenix运行SQL操作HBasePhoenix运行SQL操作01创建HBase表二级索引01为什么需要HBase二级索引?

HBase里面只有rowkey作为一级索引,如果要对库里的非rowkey字段进行数据检索和查询,往往要通过MapReduce/Spark等分布式计算框架进行,硬件资源消耗和时间延迟都会比较高。 为了HBase的数据查询更高效、适应更多的场景,诸如使用非rowkey字段检索也能做到秒级响应,或者支持各个字段进行模糊查询和多字段组合查询等,因此需要在HBase上面构建二级索引,以满足现实中更复杂多样的业务需求。使用Phoenix提供的二级索引,可以避免HBase在查询数据时全表扫描,提高查过性能,提升查询效率创建HBase表二级索引02配置HBase以支持SecondaryIndex在每一个RegionServer的hbase-site.xml中加入如下的属性:在每一个Master的hbase-site.xml中加入如下的属性:创建HBase表二级索引03联通营业厅通话详单查询项目案例表:call-detail通话详单表tel-net-flow上网流量表tel-net-detail手机上网记录call-detail通话详单表04CREATETABLEcall_detail(telPhoneNovarcharnotnull,

telTimestampvarcharnotnull,

varchar,

user.birthvarchar,

user.sexchar(1), info.addrvarchar,

info.callTypevarchar,

info.othervarchar,

info.durationdouble,

info.telTypevarchar, info.moneydoubleCONSTRAINTPKPRIMARYKEY(telPhoneNo,telTimestamp));详单表el-net-flow上网流量表05CREATETABLEtel_net_flow(telPhoneNovarchar, telTimestampvarchar, varchar, user.birthvarchar, user.sexvarchar, info.addrvarchar, info.telTypevarchar, info.chargeTypevarchar, info.isDirectvarchar,info.totalFlowAmtdouble, info.telMoneydoubleCONSTRAINTPKPRIMARYKEY(telPhoneNo,telTimestamp));上网流量表el-net-flow上网流量表06CREATETABLEtel_net_detail(telPhoneNovarchar,

telTimestampvarchar,

varchar,

user.birthvarchar,

user.sexvarchar,

info.buziTypevarchar,

info.flowTypevarchar,Addrvarchar,

NamevarchaCONSTRAINTPKPRIMARYKEY(telPhoneNo,telTimestamp));上网记录创建HBase表二级索引07CoveredIndexes(覆盖索引)Functionalindexes(函数索引)Globalindexes(全局索引)Localindexes(本地索引)索引类型创建HBase表二级索引08覆盖索引:只需要通过索引就能返回所要查询的数据,所以索引的列必须包含所需查询的列(SELECT的列和WHRER的列)实例:call-detail通话详单表创建基于info.callType的覆盖索引并绑定info.addr列上的数据CREATEINDEXCALLDETAILINDEXONcall_detail(info.callType)INCLUDE(info.addr)创建HBase表二级索引09从Phoeinx4.3以上就支持函数索引,其索引不局限于列,可以合适任意的表达式来创建索引,当在查询时用到了这些表达式时就直接返回表达式结果示例:使用UPPER函数创建函数索引使查询出的USERID和URL里字母都是大写的创建函数索引CREATEINDEXUPPERINDEXONCSVTABLES(UPPER(USERID||''||URL))函数索引创建HBase表二级索引10全局索引适用于多读少写的场景,在写操作上会给性能带来极大的开销,因为所有的更新和写操作(DELETE,UPSERTVALUES和UPSERTSELECT)都会引起索引的更新,在读数据时,Phoenix将通过索引表来达到快速查询的目的在用使用全局索引之前需要在每个RegionServer上的hbase-site.xml添加如下属性:全局索引创建HBase表二级索引11创建全局索引:CREATEINDEXcall_detail_globalindexoncall_detail(,telPhoneNo);全局索引创建HBase表二级索引12本地索引适用于写多读少,空间有限的场景,和全局索引一样,Phoneix在查询时会自动选择是否使用本地索引,使用本地索引,为避免进行写操作所带来的网络开销,索引数据和表数据都存放在相同的服务器中,当查询的字段不完全是索引字段时本地索引也会被使用,与全局索引不同的是,所有的本地索引都单独存储在同一张共享表中,由于无法预先确定region的位置,所以在读取数据时会检查每个region上的数据因而带来一定性能开销。在使用本地索引需要在Master的hbase-site.xml添加以下属性本地索引创建HBase表二级索引13创建本地索引CREATELOCALINDEXcall_detail_localindexONcall_detail();本地索引Hadoop技术原理5.HBase存储设计HBase存储设计01LSM存储思想01LSM存储思想LSM是日志合并树mysql使用的B+树LSM树存储引擎和B+树存储引擎一样,通过批量存储技术规避磁盘随机写入问题。LSM树和B+树对比,牺牲了部分读性能,用来大幅提供写性能LSM树核心思想就是放弃部分的读性能,换取写的最大化能力HBaseRegion解析02什么是region?hbase将数据分布在各个节点的regionserver上,每一个regionserver节点又将数据存储在各自的region上,从用户的角度看region就是hbase存储数据的基本单元每一个region都会存储在一个确定的regionserver上,不会同一个region出现在两个regionserver上,region的数据之间是一种互斥关系HBaseRegion解析03hbase表在行键的方向上分割为多个region,region是hbase分布式存储和负载均衡的最小单元用户不断向hbase表插入数据,当数据到达某个阈值时,hbase表就会进行水平拆分region在regionserver的运行中可能会发生移动1.master的负载均衡策略2.或者某一个regionserver挂了每一个region都有3个信息标识它自己:TableName,StartRowkey,CreateTimeHBaseRegion解析04region是hbase分布式存储和负载均衡的最小单元注意:region是负载均衡的最小单元,并不是存储的最小单元(最小存储单元是HFile)region的数量过多,会造成查询效率降低,因为去寻找某一行数据的时候,需要寻找的文件数量偏多region特点05region的数量太少,会妨碍可扩展性,降低并行处理能力比如:有3台服务器,所有的region都存储在这一台服务器上,那么这一台服务器的压力过大,导致性能下降建议:region的数量不要低于集群中节点的数量region特点06region的拆分操作是自动完成的,对外不可见,region的拆分是由regionserver完成的,并且master不会参与其中regionserver拆分region的步骤是:先将region下线,然后对其拆分将拆分的子region信息写入meta表再将这些子region加入到regionserver上最后把信息同步到master上,使其知道这件事region的拆分策略07什么是Compaction?Compaction会从一个Region的Store中,选择一些StoreFile文件进行合并。合并的原理很简单,先从待合并的数据中读出KeyValue数据,再按照由小到大排列后写入一个新的文件里边,最后这个新生成的文件就会取代之前所有待合并的文件对外提供服务region的拆分策略08为什么要有Compaction操作?随着系统不停的刷写,会导致存储目录中保存有过多的数据文件。文件太多会导致维护困难,而且不利于数据查找,会急速的降低数据查询的效率。所以,需要有一个这样的机制,将文件由多变少HBaseCompaction解析09举个例子:假如,我们有一堆数据文件,假设是10个数据文件。现在我们需要查询一条数据的话,要对这10个文件打开关闭打开关闭,每一次对文件进行I/O的时候其实效率是非常低的。特别是在打开文件,获得文件句柄的时候,效率非常非常低。而且,10个文件在文件命名以及文件管理方面都会成为瓶颈。那假如我们现在有一个合并操作,将10个小文件合并成1个大文件。我们再去查询数据的时候,只需要对这一个大文件进行打开,然后查找,再关闭。这样的话,效率会提升很多。因为查找的效率是很高的,而打开和关闭非常耗时,非常消耗系统资源。而且,我们只有一个文件,管理将会非常方便HBaseCompaction解析10Compaction分类Compaction分为两类:第一类叫MinorCompaction,也叫作小合并;第二类叫MajorCompaction,叫作大合并MinorCompaction,选取一些小的、相邻的StoreFile将它们合并成更大的StoreFileMajorCompaction,是指将所有的StoreFile合并成一个大的StoreFile。这个过程会清理三类没有意义的数据HBaseCompaction解析11第一类是被删除的数据,就是KeyType类型为Delete、DeleteColumn、DeleteFamily的数据第二类TTL过期的数据,就是,你的列族数据如果设置了TTL的话,如果在合并的过程中发现它过期了,那么也会被随之删除第三类,版本号超过了设定版本号的数据。比如,你的列族设置的版本号是3,当你对一个列连续存储了4次数据之后,最先存储的那个数据就会被删除掉注意:一般来说,Major

Compaction的时间持续比较长,整个过程会消耗大量的系统资源,对上层业务有比较大的影响。因此,线上业务都会将自动触发的MajorCompaction任务关闭掉。改为手动在业务低峰期的时候触发,同时,这也是一个非常重要的系统优化点HBaseCompaction解析12Compaction触发时机,有三种因素:第一种叫MemStoreFlush。应该说compaction的源头就来自于flush操作。flush指的就是内存中的数据刷新到硬盘上。MemStoreflush会产生HFile文件,那么文件越来越多就需要compaction。因此,在每次执行完flush操作之后,都会对当前Store中的文件进行判断。一旦,文件的数量超过阈值,就会触发一个compaction;需要说明的是,compaction都是以Store为单位进行的,而在Flush触发条件下,整个Region的所有Store都会执行compaction,所以会在短时间内执行多次compaction;HBaseCompaction解析13第二种是后台线程周期性的检查。后台的线程叫作CompactionChecker,它会定期的触发检查,是否需要执行compaction。该线程优先检查文件数是否超过阈值,一旦满足就会触发compaction。如果不满足,它会接着检查是否满足majorcompaction条件。规则是,如果当前Store中HFile的最早更新时间<mcTime值,就会触发majorcompaction。mcTime是一个浮动值,浮动区间默认为[7-7*0.2,7+7*0.2]。其中,7是hbase.hregion.majorcompaction属性决定的,0.2是hbase.hregion.majorcompaction.jitter属性决定的。可见,默认7天左右就会执行一次majorcompaction。用户如果想禁用majorcompaction,只需要将属性hbase.hregion.majorcompaction设置为0HBaseCompaction解析第三种是手动触发。一般来讲,手动触发compaction通常是为了执行majorcompaction,原因有三个:很多业务会担心自动的majorcompaction会影响读写性能。因此,会选择在低峰期手动完成触发可能用户执行完了alter修改了数据表结构之后,希望立刻生效,执行下手动触发major

compaction让数据清理和合并一下,让整个业务重新生效一次HBase管理员发现硬盘容量不够的情况下,会手动触发major

compaction。这样会删除大量的hbase过期数据14Hadoop技术原理6.HBase与Hive的集成HBase与Hive的集成01如何集成Hbase与Hive011、原因:hbase不支持sql语句的查询 2、集成步骤修改hive-site.xml文件 <!--配置zookeeper所在的节点的主机名--> <property> <name>hbase.zookeeper.quorum</name> <value>bd-server1</value> </property>将相关的hbase的jar包拷贝到hive的lib目录下(已经整理成了hbase2hive.tar.gz) tar-zxvfhbase2hive-jar.tar.gz-C/opt/cdh5/hive-1.1.0-cdh5.14.2/lib/如何集成Hbase与Hive3、hbase到hive的映射表注意:创建表的操作都是在hive中完成的在hiveshell命令行创建stu_info表 createexternaltablestu_info( uidint, namestring, agestring, genderstring, citystring )02如何集成Hbase与HiveSTOREDBY'org.apache.hadoop.hive.hbase.HBaseStorageHandler'WITHSERDEPROPERTIES("hbase.columns.mapping"=":key,info:name,info:age,info:gender,contact:city")TBLPROPERTIES(""="school:stu_info");注意事项: hbase映射表如果没有值,那么在hive端select出来的是NULL hive需要创建外部表 hive建表的时候,不需要把hbase所有列都包含进去,需要哪一列就写哪一列 在hive中删除stu_info表,不会对hbase的school:stu_info表造成任何影响03如何集成Hbase与Hive4、hive到hbase的映射表在hiveshell命令行创建hive2hbase_emp表 createtablehive2hbase_emp(

empnoint, enamestring, jobstring, mgrint, hiredatestring, saldouble, commdouble, deptnoint )04如何集成Hbase与HiveSTOREDBY'org.apache.hadoop.hive.hbase.HBaseStorageHandler'WITHSERDEPROPERTIES("hbase.columns.mapping"=":key,info:name,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno")TBLPROPERTIES(""="emp");05如何集成Hbase与Hive向hive2hbase_emp表加载数据insertintohive2hbase_empselect*fromemp;#注意:不能使用loaddata加载数据了在hbaseshell命令行查看emp表的数据scan'emp'在hiveshell命令行删除hive2hbase_emp表droptablehive2hbase_emp;在hbaseshell命令行查看emp表,会发现已经被删除了list06Hbase与Hive集成的原理Hive与HBase利用两者本身对外的API来实现整合主要是靠HBaseStorageHandler进行通信,利用HBaseStorageHandlerHive可以获取到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()来获取数据07Hbase与Hive集成的原理08Hbase与Hive集成的应用场景通过Hive把数据加载到HBase中,数据源可以是文件也可以是Hive中的表。通过整合,让HBase支持JOIN、GROUP等SQL查询语法。通过整合,不仅可完成HBase的数据实时查询,也可以使用Hive查询HBase中的数据完成复杂的数据分析。09Hbase与Hive集成的应用场景将ETL操作的数据存入Hbase10Hbase与Hive集成的应用场景HBase作为Hive的数据源11Hbase与Hive集成的应用场景构建低延时的数据仓库12Hadoop技术原理7.HBase导入工具HBase导入工具01importTSV01运行importtsv工具,查看使用帮助信息可以将文本文件导入到hbase表中,要求文件的分隔符为制表符创建测试文件test.tsv,内容如下: row-1001 xiaozhang 24 row-1002 xiaoli 22 row-1003 xiaowang 20 #注意:列使用制表符分隔importTSV把test.tsv文件上传到hdfs上bin/hdfsdfs-put/opt/datas/test.tsv/使用importtsv工具把test.tsv数据导入到hbase的school:stu_test表中bin/yarnjar/opt/cdh5/hbase-1.2.0-cdh5.14.2/lib/hbase-server-1.2.0-cdh5.14.2.jarimporttsv-Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:ageschool:stu_test/test.tsv扩展:importtsv不仅仅可以导制表符分隔的数据,还可以导入csv格式的文件(指用逗号分隔的文件)02importTSV创建测试文件test2.csv,内容如下: row-2001,xiaodu,19 row-2002,xiaozhao,20 row-2003,xiaochen,21把test2.csv上传到hdfs执行命令

bin/yarnjar/opt/cdh5/hbase-1.2.0-cdh5.14.2/lib/hbase-server-1.2.0-cdh5.14.2.jarimporttsv-

Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age-Dimporttsv.separator=,school:stu_test/test2.csv03completebulkload功能:只能将HFile格式的文件导入到hbase表中演示completebulkload导入数据首先,使用importtsv工具把tsv文件转换为HFile然后,使用completebulkload把转换后的HFile文件导入hbase表中创建测试文件bulkload_test.tsv,内容如下:rowkey-1 zhangsan 18rowkey-2 lisi 20rowkey-3 wangwu 1804completebulkload把bulkload_test.tsv上传到hdfs根目录下bin/hdfsdfs-put/opt/datas/bulkload_test.tsv/使用importtsv工具把bulkload_test.tsv文件转换为HFile文件,-Dimporttsv.bulk.outputbin/yarnjar/opt/cdh5/hbase-1.2.0-cdh5.14.2/lib/hbase-server-1.2.0-cdh5.14.2.jarimporttsv-

Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age-Dimporttsv.bulk.output=/hfile

school:stu_test/bulkload_test.tsv到hdfs的/hfile目录下查看是否转换为HFile文件使用completebulkload把转换后的HFile文件导入到school:stu_test表中bin/yarnjar/opt/cdh5/hbase-1.2.0-cdh5.14.2/lib/hbase-server-1.2.0-cdh5.14.2.jar

completebulkload/hfileschool:stu_test05CopyTableCopyTable是Hbase提供的一个数据同步工具

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论