Hadoop整合分布式文件系统上数据,保证分析和处理数据高效?

Hadoop整合分布式文件系统上数据,保证分析和处理数据高效?

 

谈到对Hadoop分布式文件系统(HDFS)数据整合与分析处理,首先要说到的就是存储模式了:(一)HDFS的存储模式不同于关系型或文档型数据库,它没有索引,由于索引的目的是方便随机读写,每次读写的过程,都是对索引的查找和更新,例如关系型数据库的B树索引每次插入或删除数据都要考虑索引树的扩展,对于频繁的插入数据情况,就会导致性能下降。因此HDFS只是采用顺序的写入文件,读取文件方式,就最大化提升提升了批量数据写入,批量数据读取的I/O性能。但牺牲的就是随机查找和更新了,不过这个问题一般由Hadoop生态中的HBase来解决

(二)HDFS定义的是块存储的概念,没有文件存储的概念,这种抽象的概念就屏蔽了文件类型的复杂问题,方便数据块在分布式系统不同datanode间的传递。HDFS2.x之后的一个数据块的大小默认是128M,定义一个如此大的数据块,就是为了减少过小的文件,频繁进行文件的打开、关闭的句柄操作,也减少了小文件在网络传输中的反复请求响应。一个数据块存储在HDFS,默认有三个副本,除了可靠性之外,也为计算读取提供了优化方案——最近距离读取

好,先简单说了下HDFS的定义基础,那我们再来看看你提出的问题,就是Hadoop是怎么通过对HDFS的数据整合来保证分析和处理数据的高效?

(三)MapReduce数据计算来讲,主要提高效率的办法就是计算处理任务充分的并行起来,例如有10个datanode机器,就并行10个mapreduce任务,那这10个任务从HDFS中取数据,也就变成了把预处理的HDFS数据块分成10个分片来读取,这就带来了两层优化,(1)每个任务领取自己范围的数据块,类似于多点下载了(2)每个任务找离自己最近的数据块副本,先考虑本地有没有(甚至short-circuit缓存机制可以实现磁盘零拷贝),再考虑机架内的副本,跨机架的副本。总之就是网络距离的就近读区,极大提升了并行读区性能

(四)HDFS的分区目录,注意哦,不是MapReduce的分区机制。例如:销售公司若要分析一个历史几个亿的订单数据文件,那么在HDFS当中就会成为一个很大的数据集。可以将每天作为一个分区存放在HDFS当中,表现形式就是分目录,orders/data=20201101/xxxxxx.parquet。这种形式非常有利于按时间段进行分析,而不需要一次加载销售记录的所有数据集

好了,Hadopp还有很多办法,尤其是Hive这些工具,可以多多了解。总之一句话,大数据的批量分析处理的本质——最大限度的增加并行计算,减少IO操作。

    THE END
    喜欢就支持一下吧
    点赞15 分享
    评论 抢沙发
    头像
    欢迎您留下宝贵的见解!
    提交
    头像

    昵称

    取消
    昵称表情代码图片

      暂无评论内容