Hbase与HDFS对比
总结一下:什么时候选用Hbase,什么场景使用HDFS进行存储?
1. 对于经常需要修改原有的数据的场景使用Hbase进行存储;
2. 对于性能要求不高且只需要支持单条数据查询或者小批量数据进行查询,两者均可;
3. 对于需要经常进行全表扫描进行大批量的查询的选择HDFS;
最适合使用Hbase存储的数据是非常稀疏的数据(非结构化或者半结构化的数据)(空值不占存储空间,列集合 column families 处理机制)
Hbase不支持join查询,但你存储时可以用:parent-child tuple 的方式来变相解决。
既能满足实时的更新,又能满足大量的数据分析工作,可以使用kudu。
对于简单的结构化数据,我们在HDFS和HBASE上的传递可能只需要用框架即可完成,但是对于复杂的数据传输,特别是实际工作中,数据的收集整理并非简单的结构,因此,我们需要对数据重新整理,并进行发送。这个过程就是依赖MapReduce,通过底层对数据的拆分和重组,达到我们要传输的结构要求。
在hbase表设计中,可以将基础数据与动态数据分两个 column famlily来存储 。
小于10MB的数据一般都可以存储在HBase上;
对于小于100KB的数据,HBase的读写性能是最优的。
如果存放在HBase的数据大于100KB甚至到10MB时,插入同样个数的数据文件,其数据量很大,会导致频繁的compaction和split,占用很多CPU,磁盘IO频率很高,性能严重下降。
FusionInsight HD V100R002C70SPC200 产品描述 04HBase MOB在实际应用中,用户需要存储大大小小的数据,比如图像数据、文档。 小于10MB的数据一般都可以存储在HBase上; 对于小于100KB的数据,HBase的读写性能是最优的。 如果存放在HBase的数据大于100KB甚至到10MB时,插入同样个数的数据文件,其数据量很大,会导致频繁的compaction和split,占用很多CPU,磁盘IO频率很高,性能严重下降。 将MOB数据(即100KB到10MB大小的数据)直接以HFile的格式存储在文件系统上(例如HDFS文件系统),然后把这个文件的地址信息及大小信息作为value存储在普通HBase的store上,通过expiredMobFileCleaner和Sweeper工具集中管理这些文件。这样就可以大大降低HBase的compation和split频率,提升性能。 如图4-3所示,图中MOB模块表示存储在HRegion上的mobstore,mobstore存储的是key-value,key即为HBase中对应的key,value对应的就是存储在文件系统上的引用地址以及数据偏移量。读取数据时,mobstore会用自己的scanner,先读取mobstore中的key-value数据对象,然后通过value中的地址及数据大小信息,从文件系统中读取真正的数据。 HFSHBase文件存储模块(HBase FileStream,简称HFS)是HBase的独立模块,它作为对HBase与HDFS接口的封装,应用在FusionInsight HD的上层应用,为上层应用提供文件的存储、读取、删除等功能。 在Hadoop生态系统中,无论是HDFS,还是HBase,均在面对海量文件的存储的时候,在某些场景下,都会存在一些很难解决的问题:
HFS的出现,就是为了解决需要在Hadoop中存储海量小文件,同时也要存储一些大文件的混合的场景。简单来说,就是在HBase表中,需要存放大量的小文件(10MB以下),同时又需要存放一些比较大的文件(10MB以上)。 HFS为以上场景提供了统一的操作接口,这些操作接口与HBase的函数接口类似。 |