写点什么

架构师训练营 -week12- 学习总结

发布于: 2020 年 09 月 02 日
架构师训练营-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(下一个计算的是以前一个计算结果作为输入值)

发布于: 2020 年 09 月 02 日阅读数: 49
用户头像

还未添加个人签名 2020.05.30 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
作业请添加“极客大学架构师训练营”标签,便于分类
2020 年 09 月 03 日 10:25
回复
没有更多了
架构师训练营-week12-学习总结