HBase框架基础(二)

HBase的基础框架,将分成几个章节对HBase进行描述,不当之处还望大家批评指正。下面是了解HBase基础架构的第二部分。

上一节我们了解了HBase的架构原理和模块组成,这一节我们先来聊一聊HBase的读写数据的过程。

HBase的读写流程及3个机制

HBase的读数据流程:

1、HRegionServer保存着meta表以及表数据,要访问表数据,首先Client先去

访问zookeeper,从zookeeper里面获取meta表所在的位置信息,即找到这个

meta表在哪个HRegionServer上保存着。

2、接着Client通过刚才获取到的HRegionServer的IP来访问Meta表所在的

HRegionServer,从而读取到Meta,进而获取到Meta表中存放的元数据。

3、Client通过元数据中存储的信息,访问对应的HRegionServer,然后扫描所

在HRegionServer的Memstore和Storefile来查询数据。

4、最后HRegionServer把查询到的数据响应给Client。

HBase写数据流程:

1、Client也是先访问zookeeper,找到Meta表,并获取Meta表元数据。

2、确定当前将要写入的数据所对应的HRegion和HRegionServer服务器。

3、Client向该HRegionServer服务器发起写入数据请求,然后HRegionServer收

到请求并响应。

4、CLient先把数据写入到HLog,以防止数据丢失。

5、然后将数据写入到Memstore

6、如果HLog和Memstore均写入成功,则这条数据写入成功

7、如果Memstore达到阈(yu)值(注意,不存在“阀值”这么一说,属于长期的误

用,在此提醒),会把Memstore中的数据flush到Storefile中。 8、当Storefile越来越多,会触发Compact合并操作,把过多的Storefile合并成一个大的Storefile。 9、当Storefile越来越大,Region也会越来越大,达到阈值后,会触发Split操作,将Region一分为二。

上述涉及到的3个机制:

1、Flush机制: 当MemStore达到阈值,将Memstore中的数据Flush进Storefile 涉及属性: hbase.hregion.memstore.flush.size:134217728 即:128M就是Memstore的默认阈值 hbase.regionserver.global.memstore.upperLimit:0.4 即:这个参数的作用是当单个HRegion内所有的Memstore大小总和超过指定值时,flush该HRegion的所有memstore。RegionServer的flush是通过将请求添加一个队列,模拟生产消费模式来异步处理的。那这里就有一个问题,当队列来不及消费,产生大量积压请求时,可能会导致内存陡增,最坏的情况是触发OOM。 hbase.regionserver.global.memstore.lowerLimit:0.38 即:当MemStore使用内存总量达到hbase.regionserver.global.memstore.upperLimit指定值时,将会有多个MemStores flush到文件中,MemStore flush 顺序是按照大小降序执行的,直到刷新到MemStore使用内存略小于hbase.regionserver.global.memstore.lowerLimit。 2、Compact机制: 把小的Memstore文件合并成大的Storefile文件。 3、Split机制 当Region达到阈值,会把过大的Region一分为二。

HBaseAPI的使用

接下来我们来尝试一下使用Java来操作一下HBase,首先我们需要配置一下开发环境。

下载maven离线依赖包:

maven本次用到的Hbase+Hadoop的Maven离线依赖包传送门: 具体文件包可上官网下载:http://maven.apache.org/download.cgi

新建Eclipse的Maven Project:

配置pom.xml的dependency如图:

HBase的相关操作:

首先,声明静态配置,用以初始化整个Hadoop以及HBase的配置,如图:

检查表是否存在:

注:由于HBase中有student表,所以执行后返回true

创建数据库表:

此处在Java的主函数中执行了该创建表的方法,表明为staff,并有两个列族,分别为info和other_info,成功后,可以远程进行验证,如图:

其余的数据库增删改查操作可以参考HBase的说明。

HBase的MapReduce调用

1、首先需要查看配置HBase的Mapreduce所依赖的Jar包,使用命令: $ bin/hbase mapredcp,然后出现如下依赖,这些依赖我们一会需要export 到classpath中: /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/hbase-common-0.98.6-cdh5.3.6.jar: /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/protobuf-java-2.5.0.jar: /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/hbase-client-0.98.6-cdh5.3.6.jar: /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/hbase-hadoop-compat-0.98.6-cdh5.3.6.jar: /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/hbase-protocol-0.98.6-cdh5.3.6.jar: /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/high-scale-lib-1.1.1.jar: /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/zookeeper-3.4.5-cdh5.3.6.jar: /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/guava-12.0.1.jar: /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/htrace-core-2.04.jar: /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib/netty-3.6.6.Final.jar 2、执行环境变量的临时导入 $ export HBASE_HOME=/opt/modules/hbase-0.98.6-hadoop2 $ export HADOOP_HOME=/opt/modules/cdh/hadoop-2.5.0-cdh5.3.6 $ export HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp` 注意:两边有反引号,表示将mapredcp命令的执行结果赋值给classpath。

3、运行官方自带的MapReduce相关的jar 案例一:统计student表有多少行数据 直接执行代码: $ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/yarn jar lib/hbase-server-0.98.6-hadoop2.jar rowcounter student 案例二:使用MapReduce任务将数据导入到HBase Step1、创建测试文件 $ vi fruit.txt,文件如图:

完事之后,我们要上传这个fruit.txt到HDFS系统中 $ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/hdfs dfs -put ./fruit.txt /input/ Step2、创建HBase表 $ bin/hbase shell hbase(main):001:0> create 'fruit','info' Step3、执行MapReduce到HBase的fruit表中 在这一步开始之前,我们先拓展一点知识: * tsv格式的文件:字段之间以制表符\t分割 * csv格式的文件:字段之间以逗号,分割(后面的数据分析我们会经常涉及到这样的格式) $ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/bin/yarn jar \ lib/hbase-server-0.98.6-hadoop2.jar importtsv \ -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:color \ fruit hdfs://mycluster/input 成功之后,我们来检查一下HBase中的数据,如图:

猜你喜欢

#大数据和云计算机技术社区#博客精选(2017)

NoSQL 还是 SQL ?这一篇讲清楚

阿里的OceanBase解密

#大数据和云计算技术#: "四有"社区介绍

大数据和云计算技术周报(第56期)

新数仓系列:Hbase周边生态梳理(1)

《大数据架构详解》第2次修订说明

简单梳理跨数据中心数据库

云观察系列:漫谈运营商公有云发展史

云观察系列:百度云的一波三折

云观察系列:阿里云战略观察

超融合方案分析系列(7)思科超融合方案分析

原文发布于微信公众号 - 大数据和云计算技术(jiezhu2007)

原文发表时间:2018-07-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

linux系统性能监控与优化(4)–IO

IO子系统一般是linux系统中最慢的部分。一个原因是它距离CPU的距离,另一个原因是它的物理结构。访问磁盘的时间与访问内存的时间是7天与7分钟的区别。linu...

405150
来自专栏Java后端技术栈

2018整理最全的50道Redis面试题!

Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到...

36000
来自专栏SDNLAB

OpenvSwitch系列之浅析main函数

通过前面几篇解析OpenvSwitch内部主要数据结构和流程,对OpenvSwitch有了相对简单的了解,由于本人不是专业搞OpenvSwitch的,纯属业余爱...

41570
来自专栏AI星球

机器学习程序猿在Linux猩球的生存指南

一个小程序猿,在一场飞行意外中,坠落到Linux猩球,与家乡Win猩球/Mac猩球的绚丽多彩不同的是:Linux猩球大部分时间都是处于黑暗之中[命令行/Shel...

14440
来自专栏Vamei实验室

Linux的内存分页管理

内存是计算机的主存储器。内存为进程开辟出进程空间,让进程在其中保存数据。我将从内存的物理特性出发,深入到内存管理的细节,特别是了解虚拟内存和内存分页的概念。

18210
来自专栏佳爷的后花媛

如何使用Thinkphp搭建商城系统(一)

由于工作需要,我要使用Thinkphp框架,但是我对php不是很了解,我觉得想要快速掌握一门语言或者一个框架,最好的方法就是做出一个小作品,只有在自己做这个作品...

1.2K20
来自专栏编程札记

tornado配合celery及rabbitmq实现web request异步非阻塞

93350
来自专栏salesforce零基础学习

salesforce零基础学习(八十五)streaming api 简单使用(接近实时获取你需要跟踪的数据的更新消息状态)

Streaming API参考链接: https://trailhead.salesforce.com/en/modules/api_basics/units/...

34880
来自专栏积累沉淀

Hbase原理、基本概念、基本架构

Hbase原理、基本概念、基本架构 概述 ? HBase是一个构建在HDFS上的分布式列存储系统; HBase是基于Google BigTable模型开发...

816100
来自专栏HansBug's Lab

win10下vagrant+centos7 rails虚拟开发机配置流程

此文写于2017.8.21 在写本文前,笔者已经尝试了多种其他的替代方法,例如wmware虚拟机安装kylin。然而发现总是还有各种问题。经大佬指点安装了vi...

31970

扫码关注云+社区

领取腾讯云代金券