大数据Hbase 面试题

hbase 的特色是什么

 

 (1) Hbase一个分布式的基于列式存储的数据库,基于Hadoop的hdfs存储,zookeeper进行管理。html

(2) Hbase适合存储半结构化或非结构化数据,对于数据结构字段不够肯定或者杂乱无章很难按一个概念去抽取的数据。数据库

(3) Hbase为null的记录不会被存储.apache

(4)基于的表包含rowkey,时间戳,和列族。新写入数据时,时间戳更新,同时能够查询到之前的版本.缓存

(5) hbase是主从架构。hmaster做为主节点,hregionserver做为从节点。服务器

Hbase和hive 有什么区别

 

 

Hive和Hbase是两种基于Hadoop的不一样技术--Hive是一种类SQL 的引擎,而且运行MapReduce 任务,Hbase 是一种在Hadoop之上的NoSQL的Key/vale数据库。固然,这两种工具是能够同时使用的。就像用Google 来搜索,用FaceBook 进行社交同样,Hive 能够用来进行统计查询,HBase 能够用来进行实时查询,数据也能够从Hive 写到Hbase,设置再从Hbase 写回Hive。数据结构

 

Hive是一个构建在Hadoop 基础之上的数据仓库。经过Hive可使用HQL语言查询存放在HDFS 上的数据。架构

HQL是一种类SQL语言,这种语言最终被转化为Map/Reduce. 虽然Hive提供了SQL查询功能,可是Hive 不可以进行交互查询,由于它只可以在Haoop上批量的执行Hadoop。负载均衡

Hive 被分区为表格,表格又被进一步分割为列簇。列簇必须使用schema 定义,列簇将某一类型列集合起来(列不要求schema定义)。分布式

限制 :工具

Hive 目前不支持更新操做。

另外,因为hive在hadoop上运行批量操做,它须要花费很长的时间,一般是几分钟到几个小时才能够获取到查询的结果。

Hive 适合用来对一段时间内的数据进行分析查询,例如,用来计算趋势或者网站的日志。

Hive 不该该用来进行实时的查询。由于它须要很长时间才能够返回结果。

 

 

 

HBase 查询是经过特定的语言来编写的,这种语言须要从新学习。类SQL 的功能能够经过Apache Phonenix 实现,但这是以必须提供schema 为代价的。另外,Hbase 也并非兼容全部的ACID 特性,虽然它支持某些特性。最后但不是最重要的--为了运行Hbase,Zookeeper是必须的,zookeeper 是一个用来进行分布式协调的服务,这些服务包括配置服务,维护元信息和命名空间服务。

Hbase很是适合用来进行大数据的实时查询。Facebook用Hbase 进行消息和实时的分析。它也能够用来统计Facebook的链接数。

HBase 是一种Key/Value 系统,它运行在HDFS 之上。和Hive 不同,Hbase 的可以在

它的数据库上实时运行,而不是运行MapReduce 任务。

 

 

参考网址:http://www.cnblogs.com/justinzhang/p/4273470.html

 

描述Hbase的rowKey的设计原则.

 

Rowkey长度原则

Rowkey 是一个二进制码流,Rowkey 的长度被不少开发者建议说设计在10~100 个字节,

不过建议是越短越好,不要超过16 个字节。

缘由以下:

(1)数据的持久化文件HFile 中是按照KeyValue 存储的,若是Rowkey 过长好比100 个

字节,1000 万列数据光Rowkey 就要占用100*1000 万=10 亿个字节,将近1G 数据,这会极

大影响HFile 的存储效率;

(2)MemStore 将缓存部分数据到内存,若是Rowkey 字段过长内存的有效利用率会降

低,系统将没法缓存更多的数据,这会下降检索效率。所以Rowkey 的字节长度越短越好。

(3)目前操做系统是都是64 位系统,内存8 字节对齐。控制在16 个字节,8 字节的

整数倍利用操做系统的最佳特性。

Rowkey散列原则

若是Rowkey 是按时间戳的方式递增,不要将时间放在二进制码的前面,建议将Rowkey

的高位做为散列字段,由程序循环生成,低位放时间字段,这样将提升数据均衡分布在每一个

Regionserver 实现负载均衡的概率。若是没有散列字段,首字段直接是时间信息将产生全部

新数据都在一个 RegionServer 上堆积的热点现象,这样在作数据检索的时候负载将会集中

在个别RegionServer,下降查询效率。

Rowkey惟一原则

必须在设计上保证其惟一性。

 

描述Hbase中scan和get的功能以及实现的异同.

 

HBase的查询实现只提供两种方式:

一、按指定RowKey 获取惟一一条记录,get方法(org.apache.hadoop.hbase.client.Get)

Get 的方法处理分两种 : 设置了ClosestRowBefore 和没有设置的rowlock .主要是用来保证行的事务性,即每一个get 是以一个row 来标记的.一个row中能够有不少family 和column.

二、按指定的条件获取一批记录,scan方法(org.apache.Hadoop.hbase.client.Scan)实现条件查询功能使用的就是scan 方式.

1)scan 能够经过setCaching 与setBatch 方法提升速度(以空间换时间);

2)scan 能够经过setStartRow 与setEndRow 来限定范围([start,end)start 是闭区间,

end 是开区间)。范围越小,性能越高。

3)、scan 能够经过setFilter 方法添加过滤器,这也是分页、多条件查询的基础。

 

请描述Hbase中scan对象的setCache和setBatch 方法的使用.

为设置获取记录的列个数,默认无限制,也就是返回全部的列.每次从服务器端读取的行数,默认为配置文件中设置的值.

23 请详细描述Hbase中一个Cell 的结构

HBase 中经过row 和columns 肯定的为一个存贮单元称为cell。

Cell:由{row key, column(=<family> + <label>), version}惟一肯定的单元。cell 中的数

据是没有类型的,所有是字节码形式存贮。

 

 

请描述如何解决Hbase中region过小和region太大带来的冲突.

Region过大会发生屡次compaction,将数据读一遍并重写一遍到hdfs 上,占用io,region太小会形成屡次split,region 会下线,影响访问服务,调整hbase.hregion.max.filesize 为256m.


以 start-hbase.sh 为起点,Hbase 启动的流程是什么?

 

start-hbase.sh 的流程以下:

1.运行 hbase-config.sh

hbase-config.sh的做用:

1>.装载相关配置,如HBASE_HOME目录,conf目录,regionserver机器列表,JAVA_HOME 目录等,它会调用$HBASE_HOME/conf/hbase-env.sh .

2>.解析参数(0.96 版本及之后才能够带惟一参数 autorestart,做用就是重启)

3>.调用 hbase-daemon.sh 来启动 master.

4>.调用 hbase-daemons.sh 来启动 regionserver zookeeper master-backup.

2.hbase-env.sh 的做用:

主要是配置 JVM 及其 GC 参数,还能够配置 log 目录及参数,配置是否须要 hbase 管

理 ZK,配置进程 id 目录等.

3.hbase-daemons.sh 的做用:根据须要启动的进程,

如 zookeeper,则调用 zookeepers.sh

如 regionserver,则调用 regionservers.sh

如 master-backup,则调用 master-backup.sh

4.zookeepers.sh 的做用:

若是 hbase-env.sh 中的 HBASE_MANAGES_ZK"="true",那么经过ZKServerTool这个类解析xml配置文件,获取 ZK 节点列表,而后经过 SSH 向这些节点发送远程命令执行。

5.regionservers.sh 的做用:

与 zookeepers.sh 相似,经过配置文件,获取 regionserver 机器列表,而后 SSH 向这些机器发送远程命令:

6.master-backup.sh 的做用:

经过 backup-masters 这个配置文件,获取 backup-masters 机器列表,而后 SSH 向这些机器发送远程命令。

 

 

简述 HBASE中compact用途是什么,何时触发,分为哪两种,有什么区别,有哪些相关配置参数?

 

 

在hbase中每当有memstore数据flush到磁盘以后,就造成一个storefile,当storeFile的数量达到必定程度后,就须要将 storefile 文件来进行 compaction 操做。

Compact 的做用:

1>.合并文件

2>.清除过时,多余版本的数据

3>.提升读写数据的效率

HBase 中实现了两种 compaction 的方式:minor and major. 这两种 compaction 方式的区别是:

一、Minor 操做只用来作部分文件的合并操做以及包括 minVersion=0 而且设置 ttl 的过

期版本清理,不作任何删除数据、多版本数据的清理工做。

二、Major 操做是对 Region 下的HStore下的全部StoreFile执行合并操做,最终的结果是整理合并出一个文件。

 

相关配置举例: