Hadoop 基础知识 -- 知乎

知乎

Unix与类Unix系统的区别是开源免费还是闭源收费

Hadoop MapReduce框架的目标

处理PB级别的数据,具有高可用,目标明确,编程模型简单易用等特点。MapReduce提供了多种以HBase为数据源或目标数据库执行的方法。

MapReduce被设计为在可扩展的方式下解决超过TB级数据处理过程中的问题。应当有一种方法可以建立一个性能随机器数增加而线性提升的系统,这既是MapReduce努力要做到的。它遵守分治原则,通过将数据拆分到分布式文件系统中的不同机器上,让服务器(CPU或新式内核)能尽快直接访问和处理数据。这种方法的问题是用户最终需要合并全局结果。同样,MapReduce为解决这个问题将其内置了。

 

 

HBase和Hadoop都是Java编写的。

HBase过滤器的目的

HBase过滤器本来的目的是为了筛掉无用的信息,被过滤掉的信息不会被传送到客户端。过滤器不能用来指定用户需要哪些信息,而是在读取数据的过程中不返回用户不想要的信息。

 

HBase如何与Hadoop文件系统协作完成数据存储的?

HBase如何透明地操作存储在HDFS上文件的概览。

从这张图可以看出HBase主要处理两种文件:一种是预写日志(Write-Ahead Log,WAL),另一种是实际的数据文件。这两种文件主要有HRegionServer管理。在某些情况下,HMaster也可以进行一些底层的文件操作。当存储数据到HDFS中时,用户可能注意到实际的数据文件会被切分成更小的块。也正是这一点,用户可以配置系统来更好地处理较大或较小的文件。

一个基本的流程是客户端首先联系Zookeeper子集群(quorum)(一个由Zookeeper节点组成的单独集群)查找行键。上述过程是通过Zookeeper获取含有-ROOT的rgion服务器名(主机名)来完成的。通过含有-ROOT的region服务器可以查询到含有.META.表中对应的region服务器名,其中包含请求的行键信息。这两处的主要内容都被缓存下来了,并且都只查询一次。最终,通过查询.META.服务器来获取客户端查询的行键数据所在region的服务器名。

一旦知道了数据的实际位置,即region的位置,HBase会缓存这次查询的信息,同时直接联系管理实际数据的HRegionServer。所以,之后客户端可以通过缓存信息很好地定位所需的数据位置,而不用在此查找.META.表。

启动HBase时,HMaster负责将所有region分配到每个HRegionServer上,其中也包括特别的-ROOT-和.META.表。

HRegionServer负责打开region,并创建对应的HRegion实例。当HRegion被打开后,它会为每个表的HColumnFamily创建一个Store实例,这些列族是用户之前创建表时定义的。每个Store实例包含一个或多个StoreFile实例,它们是实际数据存储文件HFile的轻量级封装。每个Store还有其对应的一个MemStore,一个HRegionServer分享了一个HLog实例。

HBase的写路径

当用户向HRegionServer发起HTable.put(Put)请求时,其会将请求交给对应的HRegion实例来处理。第一步是决定数据是否需要写到由HLog类实现的预写日志中。WAL是标准的Hadoop SequenceFile,并且存储了HLogKey实例。这些键包括序列号和实际数据,所有在服务器崩溃时可以回滚还没有持久化的数据。

一旦数据被写入到WAL中,数据就会被放到MemStore中。同时还会检查memstore是否已经满了,如果满了,就会被请求刷写到磁盘中去。刷鞋请求由另外一个HRegionServer的线程处理,它会把数据写成HDFS中的一个新HFile。同时也会保存最后写入的序号,系统就知道哪些数据现在被持久化了。

关闭前预刷写

Memstore被刷写到磁盘的第二个理由是:预刷写,当region服务器被要求关闭时,会数先检查memstore,任何大于配置值hbase.hregion.preclose.flush.size(默认值为5MB)的memstore会刷写到磁盘,然后在最后一轮阻塞正常访问的刷写后关闭region。

另一方面,关闭region服务器会强制所有的memstore被刷写到磁盘,而不会关系memstore是否达到了配置的最大值,可以使用配置项hbase.hregion.memstore.flush.size(默认值为64MB)或者通过创建表来进行设置。一旦所有的memstore都被刷写到了磁盘,region会被关闭,且在转移到其他region服务器时不会重做WAL。

HBase存储文件的块与Hadoop的块之间是否有匹配关系?

在HDFS中,文件的默认块大小是64MB,这个是HFile默认块大小的1024倍。因此,HBase存储文件的块与Hadoop的块之间没有匹配关系。事实上,这两种块之间根本没有相关性。HBase把它的文件透明地存储到文件系统中,而HDFS也使用块切分文件仅仅是一个巧合,并且HDFS不知道HBase存储的是什么,它只能看到二进制文件。

 

HBase中日志是用来做什么的?          

日志是用来保证数据安全的。

 

什么是高表和宽表?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值