IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 大数据秋招学习笔记1 -> 正文阅读

[大数据]大数据秋招学习笔记1

Hadoop基础知识:
1)bigdata特点:4V,大量(volume),高速(velocity),多样性(variety),低价值密度(value)。

2)Hadoop是Apache基金会开发的分布式系统基础架构,主要用于解决海量数据的存储和分析计算问题,广义上通常指Hadoop生态圈。

3)Hadoop1.* 和 Hadoop2.* 的区别:Hadoop1.* 中的Mapreduce同时负责业务逻辑计算与资源的调度,Hadoop2.* 中增加了Yarn,Yarn负责资源调度,Mapreduce只负责运算。

4)Hadoop优势:4高,高可靠性(底层维护多个副本),高扩展性(节点扩展方便),高效性(任务并行执行),高容错性(任务失败可以自动重新分配)。

5)Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。

6)思考:为什么不能一直格式化NameNode,格式化NameNode,要注意什么?格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。所以,格式化NameNode时,一定要先删除data数据和log日志,然后再格式化NameNode。

7)服务器数据同步命令scp与rsync区别:使用rsync执行文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

8)A,B服务器免密登录原理:A生成公私密钥对,将公钥拷贝给B,利用ssh命令访问B时使用私钥加密发送的数据,B接收到数据后去授权key中查找A的公钥并解密,再用A的公钥加密后将数据返还给A,A接收到返还的数据后使用私钥解密,完成免密登录。

HDFS基础知识:
1)HDFS(Hadoop Distributed File System)是一种分布式文件管理系统,适用于一次写入,多次读出的场景,不支持文件的修改。

2)优缺点:
优点: 1.高容错性:数据自动保存多个副本,某副本丢失后,可以自动恢复。
2.适合处理大数据。
3.可构建在廉价机器上。
缺点:1.不适合低延时数据访问。
2.无法高效对大量小文件进行存储(大量小文件会占用Namenode大量内存存储文件目录和块信息,小文件的寻址时间会超过读取时间)。
3.不支持并发写入,文件随机修改,仅支持数据追加。

3)组成架构:
Namenode:1.管理HDFS的名称空间。2.配置副本策略。3.管理数据块映射信息。4.处理客户端读写请求。
Datanode:1.存储实际的数据块。2.执行数据块的读写操作。
Client:1.将文件切分成一个个block,然后上传。
2.与Namenode交互,获取文件位置信息。
3.与Datanode交互,读取或写入信息。
4.提供命令管理HDFS,如Namenode格式化。
5.使用命令访问HDFS。
Secondary Namenode:1.定期合并Fsimage和edits,并推送给Namenode。
2.紧急情况下,可辅助恢复Namenode,但并非Namenode的热备,Namenode挂掉时,不能马上进行替换并提供服务。

4)文件块大小:HDFS文件在物理上是分块存储,默认块大小为128M(寻址时间大约10ms,寻址时间为传输时间的1%最佳,磁盘传输速率普遍为100MB/s,块大小计算得100M,取整为128M)。
为什么块不能设置太大或太小?1.块设置太小,会增加寻址时间。
2.块设置太大,传输数据时间远大于寻址时间,导致程序处理块速度非常慢。
总结:HDFS块大小设置主要取决于磁盘传输速率。

5)写数据流程:1.客户端通过(DFS)分布式文件系统模块向Namenode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。
2.NameNode返回是否可以上传。
3.客户端请求第一个 Block上传到哪几个DataNode服务器上。
4.NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。
5.客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。
6.dn1、dn2、dn3逐级应答客户端。
7.客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。
8.当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)。

6)读数据流程:1.客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。
2.挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。
3.DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。
4.客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

7)HDFS写数据的过程中,NameNode会选择距离待上传数据最近距离的DataNode接收数据。那么这个最近距离怎么计算呢?节点距离:两个节点到达最近的共同祖先的距离总和。

8)机架感知(副本存储节点选择):第一个副本在Client所处的节点上,如果客户端在集群外,则随意选择。第二个副本和第一个副本位于相同机架,随机节点。第三个副本位于不同机架,随机节点。禁止将同一数据块的副本存储在相同节点上。

9)NN和2NN工作机制:
1. 第一阶段:NameNode启动
(1)第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
(2)客户端对元数据进行增删改的请求。
(3)NameNode记录操作日志,更新滚动日志。
(4)NameNode在内存中对数据进行增删改。
2. 第二阶段:Secondary NameNode工作
(1)Secondary NameNode询问NameNode是否需要CheckPoint(触发条件:1) 定时时间到。2) edits中的数据满了)。直接带回NameNode是否检查结果。
(2)Secondary NameNode请求执行CheckPoint。
(3)NameNode滚动正在写的Edits日志。
(4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。
(5)Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
(6)生成新的镜像文件fsimage.checkpoint。
(7)拷贝fsimage.checkpoint到NameNode。
(8)NameNode将fsimage.checkpoint重新命名成fsimage。

10)Datanode工作机制:
DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分30秒(默认)没有收到某个DataNode的心跳,则认为该节点不可用。

11)DataNode节点保证数据完整性
(1)当DataNode读取Block的时候,它会计算CheckSum。
(2)如果计算后的CheckSum,与Block创建时值不一样,说明Block已经损坏。
(3)Client读取其他DataNode上的Block。
(4)DataNode在其文件创建后周期验证CheckSum。
通常将原始数据进行crc计算和传输过来的crc校验位比较,看是否一致。

Mapreduce基础知识:
1)Mapreduce是一个分布式运算程序的编程框架。
2)优缺点:
优点:(1)易于编程,简单实现一些接口就可以完成一个分布式程序。
(2)良好的扩展性,可以通过简单的增加机器来扩展计算能力。
(3)高容错性,一台机器挂了可以将计算任务转移,不至于任务运行失败。
(4)适合海量数据的离线处理。
缺点:(1)不擅长实时计算。
(2)不擅长流式计算。
(3)不擅长有向图计算
3)数据切片与MapTask并行度决定机制:
(1)一个Job的Map阶段并行度由客户端在提交Job时的切片数决定。
(2)每一个切片分配一个MapTask并行实例处理。
(3)默认情况下,切片大小等于块大小。
(4)切片时不考虑数据集整体,而实逐个针对每一个文件切片。
4)Combiner:
(1)Combiner是MR程序中Mapper和Reducer之外的一种组件。
(2)Combiner组件的父类是Reducer。
(3)Combiner在每个MapTask所在的节点运行,
Reducer接收全局所有Mapper的输出结果。
(4)Combiner的意义是对每一个MapTask的输出进行局部汇总,减少网络传输量。
(5)Combiner能够应用的前提是不能影响到最终的业务逻辑,Combiner的输出kv类型应与reducer的输入kv类型对应。
5)MapTask工作机制:
(1) Read阶段:MapTask通过用户编写的RecordReader,从输入InputSplit中解析出一个个key/value。
(2) Map阶段:该节点主要是将解析出的key/value交给用户编写map()函数处理,并产生一系列新的key/value。
(3)Collect收集阶段:在用户编写map()函数中,当数据处理完成后,一般会调用OutputCollector.collect()输出结果。在该函数内部,它会将生成的key/value分区(调用Partitioner),并写入一个环形内存缓冲区中。
(4)Spill阶段:即“溢写”,当环形缓冲区满后,MapReduce会将数据写到本地磁盘上,生成一个临时文件。需要注意的是,将数据写入本地磁盘之前,先要对数据进行一次本地排序,并在必要时对数据进行合并、压缩等操作。
溢写阶段详情:
步骤1:利用快速排序算法对缓存区内的数据进行排序,排序方式是,先按照分区编号Partition进行排序,然后按照key进行排序。这样,经过排序后,数据以分区为单位聚集在一起,且同一分区内所有数据按照key有序。
步骤2:按照分区编号由小到大依次将每个分区中的数据写入任务工作目录下的临时文件output/spillN.out(N表示当前溢写次数)中。如果用户设置了Combiner,则写入文件之前,对每个分区中的数据进行一次聚集操作。
步骤3:将分区数据的元信息写到内存索引数据结构SpillRecord中,其中每个分区的元信息包括在临时文件中的偏移量、压缩前数据大小和压缩后数据大小。如果当前内存索引大小超过1MB,则将内存索引写到文件output/spillN.out.index中。
(5)Combine阶段:当所有数据处理完成后,MapTask对所有临时文件进行一次合并,以确保最终只会生成一个数据文件。
6)ReduceTask工作机制:
(1)Copy阶段:ReduceTask从各个MapTask上远程拷贝一片数据,并针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中。
(2)Merge阶段:在远程拷贝数据的同时,ReduceTask启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。
(3)Sort阶段:按照MapReduce语义,用户编写reduce()函数输入数据是按key进行聚集的一组数据。为了将key相同的数据聚在一起,Hadoop采用了基于排序的策略。由于各个MapTask已经实现对自己的处理结果进行了局部排序,因此,ReduceTask只需对所有数据进行一次归并排序即可。
(4)Reduce阶段:reduce()函数将计算结果写到HDFS上。
7)ReduceTask并行度:
ReduceTask的并行度同样影响整个Job的执行并发度和执行效率,但与MapTask的并发数由切片数决定不同,ReduceTask数量的决定是可以直接手动设置。
8)Shuffle过程详解:
(1)MapTask收集我们的map()方法输出的kv对,放到内存缓冲区中。
(2)从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件。
(3)多个溢出文件会被合并成大的溢出文件。
(4)在溢出过程及合并的过程中,都要调用Partitioner进行分区和针对key进行排序。
(5)ReduceTask根据自己的分区号,去各个MapTask机器上取相应的结果分区数据。
(6)ReduceTask会取到同一个分区的来自不同MapTask的结果文件,ReduceTask会将这些文件再进行合并(归并排序)。
(7)合并成大文件后,Shuffle的过程也就结束了,后面进入ReduceTask的逻辑运算过程(从文件中取出一个一个的键值对Group,调用用户自定义的reduce()方法)。

Yarn基础知识:
1)Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成。
2)ResourceManager:
(1)处理客户端请求。
(2)监控NodeManager。
(3)启动或监控ApplicationMaster。
(4)负责资源的分配和调度。
NodeManager:
(1)管理单个节点上的资源。
(2)处理来自ResourceManager的命令。
(3)处理来自ApplicationMaster的命令。
ApplicationMaster:
(1)负责数据的切分。
(2)为应用程序申请资源并分配给内部的任务。
(3)任务的监控与容错。
Container:
(1)Yarn中的资源抽象,封装了某个节点上的多维度资源,如内存,CPU,磁盘,网络等。
3)Yarn工作机制:
(1)MR程序提交到客户端所在的节点。
(2)YarnRunner向ResourceManager申请一个Application。
(3)RM将该应用程序的资源路径返回给YarnRunner。
(4)该程序将运行所需资源提交到HDFS上。
(5)程序资源提交完毕后,申请运行mrAppMaster。
(6)RM将用户的请求初始化成一个Task。
(7)其中一个NodeManager领取到Task任务。
(8)该NodeManager创建容器Container,并产生MRAppmaster。
(9)Container从HDFS上拷贝资源到本地。
(10)MRAppmaster向RM 申请运行MapTask资源。
(11)RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
(12)MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
(13)MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
(14)ReduceTask向MapTask获取相应分区的数据。
(15)程序运行完毕后,MR会向RM申请注销自己。
4)作业提交过程:
(1)作业提交
第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。
第2步:Client向RM申请一个作业id。
第3步:RM给Client返回该job资源的提交路径和作业id。
第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。
第5步:Client提交完资源后,向RM申请运行MrAppMaster。
(2)作业初始化
第6步:当RM收到Client的请求后,将该job添加到容量调度器中。
第7步:某一个空闲的NM领取到该Job。
第8步:该NM创建Container,并产生MRAppmaster。
第9步:下载Client提交的资源到本地。
(3)任务分配
第10步:MrAppMaster向RM申请运行多个MapTask任务资源。
第11步:RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
(4)任务运行
第12步:MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
第13步:MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
第14步:ReduceTask向MapTask获取相应分区的数据。
第15步:程序运行完毕后,MR会向RM申请注销自己。
(5)进度和状态更新
YARN中的任务将其进度和状态(包括counter)返回给应用管理器, 客户端每秒向应用管理器请求进度更新, 展示给用户。
(6)作业完成
除了向应用管理器请求作业进度外, 客户端每5秒都会通过调用waitForCompletion()来检查作业是否完成。时间间隔可以通过mapreduce.client.completion.pollinterval来设置。作业完成之后, 应用管理器和Container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。
5)MapReduce 跑的慢的原因:
(1)计算机性能:CPU,内存,磁盘健康,网络。
(2)I/O操作优化:1.数据倾斜。2.Map与reduce数设置不合理。3.Map运行时间过长,导致Reduce等待过久。4.小文件过多。5.溢写次数过多。6.大量的不可分块的超大文件7.merge次数过多
6)MapReduce优化方法:
MapReduce优化方法主要从六个方面考虑:数据输入、Map阶段、Reduce阶段、IO传输、数据倾斜问题和常用的调优参数。
数据输入:1. 采用CombineTextInputFormat作为输入,解决输入端大量小文件问题。2. 对于大量小文件 Job,可以开启 JVM 重用。
Map阶段:1. 减少溢写次数。2. 减少合并次数 。3. 在Map之后,不影响业务逻辑前提下,先进行Combine处理,减少IO。4. 增大环形缓冲区大小。5. 增大环形缓冲区溢写的比例。
Reduce阶段:1.合理设置Map和reduce数。2.设置Map,reduce共存。3.规避使用reduce。4.合理设置reduce端的buffer。
IO传输:采用数据压缩的方式,使用SequenceFile二进制文件。
数据倾斜问题: 1.采用抽样和范围分区。2.自定义分区。3.合理利用Combine 。4.采用Map join,尽量避免reduce join。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-04 11:16:50  更:2021-08-04 11:17:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 15:05:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码