写点什么

架构师训练营学习总结(大数据)

用户头像
qihuajun
关注
发布于: 2020 年 09 月 02 日

大数据

HDFS

HDFS系统架构





不适合HDFS的场景

  • 低延迟的数据访问

  • 大量小文件:超过NameNode的处理能力

  • 多用户随机写入修改文件

设计目标

  1. 任何一个节点失效,不影响HDFS服务

  2. HDFS可以自动完成副本的复制

文件

文件切分成块(默认大小64M)以块为单位,每个块有多个副本存储在不同的机器上, 副本数可在文件生成时指定(默认3) Namenode是主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表以及块所在的 Datanode等等Datanode在本地文件系统存储文件块数据,以及块数据的校验和可以创建、删除、移动或重命名文件,当文件创建、写入和关闭之后不能修改文件内容。

NameNode

Namenode是一个中心服务器,负责管理文件系统的名字空间( namespace)以及客户端对文件的访问。文件操作, Namenode负责文件元数据的操作, Datanode负责处理文件内容的读写请求,跟文件内容相关的数据流不经过 Namenode,只会询问它跟那个 Datanode联系否则 Namenode会成为系统的瓶颈。副本存放在那些 Data Node上由 Name Node来控制,根据全局情况做出块放置决定读取文件时 Name Node尽量让用户先读取最近的副本,降低带块消耗和读取时延Namenode全权管理数据块的复制,它周期性地从集群中的每个 Datanode接收心跳信号和块状态报告( Blockreport)。接收到心跳信号意味着该 Datanode节点工作正常。块状态报告包含了一个该 Data Node上所有数据块的列表。

DataNode

一个数据块在 Datanode以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。Datanode启动后向 Namenode注册,通过后,周期性(1小时)的向 Namenode上报所有的块信息。心跳是每3秒一次,心跳返回结果带有 Name Node给该 Data Node的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个 Datanode的心跳, 则认为该节点不可用。集群运行中可以安全加入和退出一些机器。

高可用

  • 一个名字节点和多个数据

  • 节点数据复制(冗余机制) 存放的位置(机架感知策略) 

  • 故障检测

  • 数据节点心跳包(检测是否宕机) 块报告(安全模式下检测) 数据完整性检测(校验和比较) 

  • 名字节点(日志文件,镜像文件) 

  • 空间回收机制

文件读写

写入





使用HDFS提供的客户端开发库 Client,向远程的 Namenode发起RPC请求Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,否则会让客户端抛出异常当客户端开始写入文件的时候,开发库会将文件切分成多个 packets,并在内部以数据队列data queue"的形式管理这些 packets,并向 Namenode申请新的 blocks,获取用来存储Replicas I的合适的 datanodes列表,列表的大小根据在 Name Node中对 replication的设置而定。开始以 pipeline(管道)的形式将 packet 3写入所有的 replicas中。开发库把 packet以流的方式写入第个 datanode,该 datanode把该 packet存储之后,再将其传递给在此Pipeline中的下datanode,直到最后一个 datanode,这种写数据的方式呈流水线的形式最后一个 datanode 成功存储之后会返回一个 ack packet,在 pipeline里传递至客户端,在客户端的开发库内部维护着“ ack queue”,成功收到 datanode返回的 ack packet后会从ack queue”移除相应的 packet 如果传输过程中有某个 datanode出现了故障,那么当前的 pipeline会被关闭,出现故障的 datanode会从当前的 pipeline中移除,剩余的 block会继续剩下的 datanode中继续以pipeline的形式传输,同时 Namenode会分配一个新的 datanode,保持 replicas设定的数

读取





使用HDFS提供的客户端开发库 Client,向远程的 Namenode发起RPC请求Namenode会视情况返回文件的部分或者全部 block列表,对于每个 block, amende都会返回有该 block拷贝的 Datanode地址客户端开发库Client会选取离客户端最接近的 Data Node来读取 block;如果客户端本身就是 Datanode,那么将从本地直接获取数据。读取完当前 block的数据后,关闭与当前的 Datanode连接,并为读取下ー个 block 寻找最佳的 Datanode; 当读完列表的block后,且文件读取还没有结束,客户端开发库会继续向 Namenode 获取下一批的 block列表读取完一个 block都会进行 checksum验证,如果读取 Data Node时出现错误,客户会通知 Name Node,然后再从下一个拥有该 block拷贝的 Datanode继续读。

节点失效

Datanode中的磁盘挂了怎么办? 

Datanode正常服务,坏掉的磁盘上的数据尽快通知 Namenode,由NameNode安排数据复制

Datanode所在机器挂了怎么办? 

Datanode每3秒钟向 Name Node发送心跳,如果10分钟 Datanode没有向Namenode发送心跳,则 Namenode认为该 Datanode已经dead, Name Node将取出该 Datanode上对应的 block,对其进行复制。

Namenode挂了怎么办? 

持久化元数据

  • 操作日志( edit log) 记录文件创建,删除,修改文件属性等操作

  • FSImage包含完整的命名空间File-> Block的映射关系文件的属性(ACL, quota,修改时间等)





Client挂了怎么办?

HDFS一致性模型

文件创建以后,不保证在 Name Node立即可见,即使文件刷新并存储,文件长度依然可能为0 当写入数据超过一个块后,新的 reader 可以看见第一个块, reader不能看见当前正在写入的块; HDFS提供 synco方法强制缓存与数据节点同步,sync()调用成功后,当前写入数据对所有 reader可见且一致调用sync()会导致额外的开销

MapReduce

它由称为map和 reduce的两部分用户程序组成,然后利用框架在计算机集群上面根据需求运行多个程序实例来处理各个子任务,然后再对结果进行归并。

  • 自动实现分布式并行计算

  • 容错

  • 提供状态监控工具

  • 模型抽象简洁,程序员易用

WordCount













适合的任务类型:

TopK

K-means

Bayes

SQL

InputFormat

验证作业的输入的正确性将输入文件切分成逻辑的 InputSplits,一个 Inputsplit将被分配给一个单独的 Mapper task 提供 RecordReader的实现,这个 Record Reader会从 Inputsplit I中正确读出一条一条的K-V对供 Mapper使用。

OutputFormat

Outputformt接口決定了在哪里以及怎样持久化作业结果。默认的 Outputformat就是 Textoutputformat,它是一种以行分隔,包含制表符界定的键值对的文本文件格式

Partitioner

Mapreduce通过 Partitioner对Key进行分区,进而把数据按我们自己的需求来分发。

调度方法

  • 单队列调度

  • 容量调度

  • 公平调度

JobTracker

作业控制作业抽象成三层:作业监控层(JP),任务控制层(TIP),任务执行层。任务可能会被尝试多次执行,每个任务实例被称作 Task Attempt(TA) TA成功,TIP会标注该任务成功,所有TIP成功,JIP成功

资源管理根据 Task tracker状态信息进行任务分配

容错

JobTracker容错

Job Tracker失败,那么未完成Job失败; 通过Job日志,Job可部分恢复。

TaskTracker容错

超时Tasktracker10分钟( mapred tasktracker expiry. interval)末汇报心跳,则将其从集群移灰名单,黑名单Tasktracker上部署性能监控脚本如果性能表现太差,被 Jobtracker暂停调度

Task失败

运行部分Task失败Task由TIP监控,失败任务多次尝试,慢任务启动备份任务

Record容错

跳过导致Task失败的坏记录

YARN

通用的运行时框架,用户可以编写自己的计算框架,在该运行环境中运行。





Yarn包括两个部分一个是资源管理器( Resource Manager),-个是节点管理器( Node Manager) 这也是Yarn的两种主要进程:

Resourcemanager

Resourcemanager进程负责整个集群的资源调度管理, 通常部署在独立的服务器上; 

调度器

调度器其实就是一个资源分配算法,根据应用程序( Client)提交的资源申请和当前服务器集群的资源状况进行资源分配。Yarn内置了几种资源调度算法,包括 Fair Scheduler Capacity Scheduler等,你也可以开发自己的资源调度算法供Yarn调用。Yarn进行资源分配的单位是容器( Container),每个容器包含了一定量的内存、CPU 等计算资源,默认配置下,每个容器包含一个CPU核心。容器由 Nodemanager进程启动和管理, Nodemanger进程会监控本节点上容器的运行状况并向 Resourcemanger 进程汇报。

应用程序管理器

应用程序管理器负责应用程序的提交、监控应用程序运行状态等。应用程序启动后需要在集群中运行一个 Applicationmaster, Applicationmaster也需要运行在容器里面。每个应用程序启动后都会先启动自己的 Application Master,由 Applicationmaster根据应用程序的资源需求进一步向 Resourcemanager进程申请容器资源,得到容器以后就会分发自己的应用程序代码到容器上启动,进而开始分布式计算。

Nodemanager

Nodemanager进程负责具体服务器上的资源和任务管理, 在集群的每一台计算服务器上都会启动,基本上跟HDFS的 Data Node进程一起出现。

HIVE

架构





Spark

特点:DAG切分的多阶段计算过程更快速使用内存存储中间计算结果更高效RDD的编程模型更简单

作为编程模型的RDD

Spark则直接针对数据进行编程,将大规模数据集合抽象成一个RDD对象,然后在这个RDD上进行各种计算处理,得到一个新的RDD,继续计算处理,直到得到最后的结果数据。所以 Spark可以理解成是面向对象的大数据计算。我们在进行5park编程的时候,思考的是一个RDD对象需要经过什么样的操作,转换成另一个RDD对象,思者的重心和落脚点都在RDD

流计算

实时计算系统

  • 低延迟

  • 高性能

  • 分布式

  • 可伸缩

  • 高可用

Storm

Nimbus:负责资源分配和任务调度。Supervisor:负责接受 Nimbus分配的任务,启动和停止属于自己管理的 Worker进程。Worker:运行具体处理组件逻辑的进程。Task: Worker中每一个 Spout/Bolt 的线程称为ー个Task

Spark Streaming





Flink

MPP

Impala



机器学习

网页排名算法 Pagerank

Pagerank通过网络浩瀚的超链接關係来确定一个页面的等级。 Google把从A页面到B页面的链接解释为A页面给B页面投票,Goge根据投票来源(甚至来源的来源, 即链接到A页面的页面)和投票目标的等级来决定新的等级。简单的说,一个高等级的贞面可以使其他低等级页面的等级提升。一个页面的「得票数」由所有链向它的页面的重要性來决定,到一个页面的超链接相当于对该页投一票。一个页面的 Pagerank是由所有链向它的页面(「链入页面」)的重要性经过算法得到的。一个有較多链入的页面会有較高的等级,相反如果一个页面没有任何链入页面,那么它没有等级。

KNN 分类算法

KNN算法,也叫K近邻( K Nearest Neighbour)算法对于ー个需要分类的数据,将其和一组已经分类标注好的样本集合进行比较,得到距离最近的K个样本,K个样本最多归属的类别,就是这个需要分类数据的类别。

TF-IDF算法

贝叶斯分类算法

K-means聚类算法

推荐引擎算法

机器学习系统

系统架构





样本

样本就是通常我们常说的“训练数据”,包括输入和结果两部分。比如我们要做一个自动化新闻分类的机器学习系统,对于采集的每一篇新闻,能够自动发送到对应新闻分类频道里面,比如体育、军事、财经等。这时候我们就需要批量的新闻和其对应的分类类别作为训练数据。通常随机选取一批现成的新闻素材就可以,但是分类需要人手工进行示注,也就是需要有人阅读每篇新闻,根据其内容打上对应的分类标签。

模型

模型就是映射样本输入与样本结果的函数,可能是一个条件概率分布,也可能是一个決策函数。

算法

算法就是要从模型的假设空间中寻找一个最优的函数,使得样本空间的输入X经过该函数的映射得到的f(X),和真实的Y值之间的距离最小。这个最优的函数通常没办法直携计算得到,即没有解析解,需要用数值计算的方法不断送代求解。因此如何寻找到f函数的全局最优解,以及使寻找过程尽量高效,就构成了机器学习的算法。



用户头像

qihuajun

关注

还未添加个人签名 2009.05.15 加入

还未添加个人简介

评论 (1 条评论)

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