架构师训练营 -week12- 学习总结
大数据技术起源
起源于Google在2004年前后发表的三篇论文,分布式文件系统GFS、大数据分布式计算框架MapReduce和NoSQL数据库系统BigTable。
ps:背景是Google想把全世界所有的网页都抓取下来,构建索引并排序。
大数据应用
三个阶段
数据仓库
数据挖掘
机器学习
应用领域
医学影像智能识别
病例大数据智能诊疗
AI外语老师
智能解题
舆情监控与分析
大数据风控
新零售
无人驾驶
HDFS
工作流程
数据存储细节
设计目标
以流式数据访问模式存储超大文件,运行于商业硬件集群上。
为了做到高可靠,创建多份数据块的备份,分别放置在服务器集群的计算节点中。
不适合HDFS的场景
低延迟的数据访问
大量的小文件(超过NameNode的处理能力)
多用户随机写入修改文件
文件结构与存储
文件切分成块(默认64M),以块为单位,每个块有多个副本存储在不同的机器上,副本数可在文件生成时指定(默认3个)
NameNode是主节点,存储文件的元数据如文件名、文件目录结构、文件属性(生成时间、副本数、文件权限),以及每个文件的块列表以及块所在的DataNode等。
DataNode在本地文件系统存储文件块数据,以及块数据的校验。可以创建、删除、移动或重命名文件,当文件创建、写入和关闭之后则不能修改文件内容。
NameNode
中心服务器,负责管理文件系统的namespace以及client对文件的访问。
NameNode只负责对文件元数据的操作,DataNode负责处理文件内容的读写请求,跟文件内容相关的数据流不经过NameNode,只会询问NameNode跟哪个DataNode联系。
副本存放在哪些DataNode上由NameNode来控制,根据全局情况做出块防止决定给,读取文件时,NameNode尽量让用户读取最近的副本,降低带块消耗和读取时延。
NameNode全权管理数据块的复制,它周期性地从集群中的每个DataNode接收心跳信号和BlockReport。接收到心跳信号表明该DataNode工作正常,BlockReport包含该DataNode上所有数据块的列表。
DataNode
数据块在DataNode以文件存储在磁盘上,包括两个文件,一个时数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。
DataNode启动后向NameNode注册,周期性(1小时)地向NameNode上报所有的快信息。
心跳是每3秒一次,心跳返回结果带由NameNode给该DataNode的命令,如复制块数据到另一台机器上,或删除某块数据。如果超过10分钟没有收到某个DataNode的心跳包,则认为该节点不可用。
高可用
一个NameNode和多个DataNode
数据复制(冗余机制)
存放的位置(机架感知策略)
故障检测
数据节点
心跳包(是否宕机)
BlockReport(安全模式下检测)
数据完整性检测(校验和比较)
NameNode节点(保留日志文件、镜像文件)
空间回收机制
MapReduce
处理海量数据,使用上百上千CPU实现并行处理。
特性
自动实现分布式并行计算
容错
提供状态监控工具
模型抽象简介,程序员易用
Map
读数据,主要用于做key的映射。
在Map中可内置一个Reduce(setCombineClass),以减少统计次数。
Map的数量由什么决定
输入文件数目
输入文件大小
配置参数:minsize,maxsize与block.size
计算公式:splitSize = Math.max(minSize, Math.min(maxSize, blockSize));
ps:如果想要自定义个数,则需要调整配置参数以达到想要的效果。
Partition
一个值,用于判断将Map输出的k-v对分发给第几个reduce。
partition值默认是通过计算key的hash值后对Reduce task的数量取模获得。
partition数由reduce的数量决定。
自定义Partitioner计算方式的情况
对reduce输出合并的数据要求全局有序:
可以用输入数据的最大值除以系统Reduce task数量的商作为分割边界
数据倾斜
自定义的key包含多个值
Shuffle
把Map的结果分发到对应Reduce的过程。
Reduce获取文件的方式
Map完整了任务后,会通过心跳包通知Application Master,Reduce会周期性地向Master询问,有没有已完成的数据要下载统计。
Reduce下载完数据后(每个Reduce默认五个并行下载任务),Map不会立即删除数据,而是等整个Job都完成了才删除。
Reduce的MergeSort
下载的数据会先放入内存缓冲区中,当使用内存达到一定量的时候,就spill到磁盘。缓冲区的大小基于JVM的heap size设置,默认使用内存量为0.7*maxHeap of reduce task。
内存到磁盘的merge阈值默认为可使用内存量的0.66(merge.percent)
merge的三种方式
memToMemMerger
inMemoryMerger
onDiskMerger
Reduce
主要用于做结果的归并、统计。
输出时没有排序的。
不一定要有这一步。
reduce的input buffer设置
默认为0,即从磁盘开始读处理数据。
大于0时,会有一定量的数据被缓存在内存并输送给reduce,当reduce计算逻辑消耗内存很小时,可以分一部分内存用来缓存数据,用以提升计算提升速度。(类Spark Cache)
适合MapReduce的计算类型
TopK
K-means
Bayes
SQL
不适合MapReduce的计算类型
Fibonacci(下一个计算的是以前一个计算结果作为输入值)
版权声明: 本文为 InfoQ 作者【晓-Michelle】的原创文章。
原文链接:【http://xie.infoq.cn/article/1cd7d2c14d22fe4fd9a882841】。未经作者许可,禁止转载。
评论 (1 条评论)