MapReduce 原理
客户端任务到jobTracker, jobTracker分发任务到map和reduce。
map从datasplit 中获取数据区,根据客户端的相关业务逻辑生成(K,V)对,数据先缓存到环形缓冲区,直到达到设定上限(默认为80%),然后会写入到磁盘上。写入磁盘之前,会进行分区排序。
reduce 会根据各自分区copy自己所需要的数据,先进行合并,排序,然后执行reduce的逻辑,接着会将结果输出的HDFS上part-...-00000
shuffle相关原理,以及参数相关优化
shuffle 在hadoop中表示从map到reduce之间的网络传输数据操作
首先map将得到的(k,v)键值对存储到一个环形缓存区,该缓冲区在达到80%时,会将数据写到磁盘上(spill to disk),写入到磁盘上之前会对先执行分组(partitoner)和排序(fast sort)。
这边有几个参数可以调整修改以提高性能,缓冲区大小设置(如果能够估算出map输出的大小可以直接设置防止缓冲区溢出),缓冲区门限设置,partitioner分区设置(分区方式最好能够防止数据倾斜现象)
上面说到,数据存到磁盘上面,reduce分别从map端溢出的文件,copy自己分区所需要的数据,如果数据超过10个(默认)会进行combine操作(类似reduce的操作,为了降低输入reduce的数据量),同样,这边还会进行一个合并和排序,然后输入reduce。
优化参数包括,默认最大合并文件数可以设定的大一些等等,如果有combiner可以将最小combine的数量设定为3,如果数据量很大的话可以使用压缩编码,编码方式可以不用默认的zip编码采用lzo方式
HDFS相关原理
主要包括两种角色,namenode,secondarynamenode,datanode
namenode主要负责数据,记录数据的上传下载修改,保存数据块的位置信息。
secondarynamenode,主要负责日志的合并
datanode实际上的数据存储位置,会通过heartbeat和namenode进行,并汇报block信息
补充: 之前的有一个项目弹幕采集,在接收端使用朴素贝叶斯算法,通过分词器可以分析弹幕中的情绪。
原文地址:https://www.cnblogs.com/yeyangplus/p/9416337.html