50字范文,内容丰富有趣,生活中的好帮手!
50字范文 > 大数据学习心得--hadoop框架

大数据学习心得--hadoop框架

时间:2019-05-30 01:05:22

相关推荐

大数据学习心得--hadoop框架

前言

这是本人第一次写博客,技术不够,不敢妄谈一些太过前沿的技术的东西,想简单写写自己学过的东西,就当温故而知新了。本篇便以hadoop框架为主题来写点东西。众所周知,hadoop框架出现已久,hadoop主要由三个部分组成:hdfs、yarn、mapreduce。

诚然,作为早期的分布式开源框架,MapReduce实际应用能力和现在的spark、storm、flink相比有点捉襟见肘,但依旧可以拿来解决一部分的大数据问题,而其分布式文件系统hdfs还有资源管理yarn估计在很长的时间里都不会被淘汰。

本文就不再叙述hadoop如何安装,如果有需要可以参考官网:hadoop环境搭建 。毕竟现在实际环境大多都是由cm框架来搭建,用云服务器的连搭建都可以省略,即便搭建伪分布式也不是很难,况且搭建步骤应该再也没有比官网要更详细的准确的了所以在此便不再浪费笔墨。

hdfs

hdfs是hadoop的基石,即分布式文件存储系统。他的理念就是分而治之,通过一个主节点namenode和多个从节点DataNode来搭建的集群来协作工作。它的原理是先将大文件拆分成多个小的块文件(默认为128m,可以调整,不够的就作为一个块,由此可见hadoop并不适合处理多个的小的文件,而更适合处理少量的大的文件),然后由多个datanode节点分别储存,为了防止数据的丢失每个块默认都会有3个副本,为了更加快速地识别块文件是否完整,hdfs为此引入了校验和的概念,即通过特定的算法将数据的相关内容生成一个校验和,而每次调用块文件的时候都会计算当前块文件的校验和然后和其他节点上的块文件的校验和进行比对,以此来保证数据的安全性。

而集群的安全性则需要心跳机制来保证——默认情况下每3秒DataNode会想主节点namenode进行报告,证明自己还活着,当超过一定时间没有报告namenode会认为此节点挂掉,为了保证数据安全,namenode会将此节点的丢失的副本copy到其他节点。所以对于集群来说时间同步显得尤为重要。

而namenode的安全则需要配合zookeeper而搭建的高可用集群来保证,这里不再叙述。

另外值得一提的是在namenode上操作数据,namenode往往不会将直接操作数据,而是将进行的操作保存为编辑日志文件。因此每次集群启动的时候namenode都会先加载镜像文件,然后再加载对编辑日志文件。但当一定时间,编辑日志文件会变得冗余,这个时候就需要secondarynamenode来对镜像文件和编辑日志文件进行合并。

yarn

yarn是hadoop的任务调度和资源管理器,在早期版本的hadoop当中是没有yarn的。yarn的出现使得集群在做任务能够有序的执行。这一块没有什么好讲的,需要记住的就是提交任务的命令(hadoop当前目录下):bin/yarn jar (jar包路径) (可选参数)。

mapreduce

mapredeuce是hadoop当中唯一的分布式计算框架,它包含了两个算子,map和reduce。虽然在目前看来mapreduce计算框架是有点捉襟见肘了(算子太少,要进行复杂的计算就必须重写大量的代码),但是其实现原理还是不会过时的。

mapper端首先会对切片按行进行读取,形成<(偏移量),(值)>的键值对。这个时候mapper端可以对值调用.split()根据数据之间的分隔符来对读取的数据进行分割,返回一个字符串数组,这个时候可以先把不必要的脏数据过滤一下(对于大量的数据来说,脏数据是很常见的,某些业务需求是需要了解脏数据的比例需要统计),之后再对需要进行下一步操作的数据进行输出。

接下来会进入到shuffle阶段。值得注意的是,MapReduce当中并没有明确的说明有这个shuffle过程,是为了方便理解把从map端输出到redeuce端之间的过程统称为shuffle。数据从mapper端输出后会进入内存当中的环形缓冲区,当数据达到默认值100m的80%会发生溢写操作,数据根据reduce端的个数进行分区排序,然后被写成细小的文件到磁盘中。

最后reduce端拉取数据进行数据的合并,并输出最终结果。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。