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 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 0918 框架理论知识 -> 正文阅读

[大数据]0918 框架理论知识

0918 框架理论知识

mapreduce reduce

如果不设置reduce,系统会默认给定一个reduce,该reduce不进行任何数据处理,生成的文件数量等于MapTask的数量。如果不需要此默认reduce,可以将reduce数量设置为0.

conf.setNumReduceTasks(0)

mapreduce流程

当将jar程序提交到hadoop集群后,会向yarn发送资源请求,yarn分配container资源后,在指定机器上启动AM,driver也运行在该台机器。然后对driver程序进行解析执行,先根据InputPath读取输入文件,然后根据文件大小,以及hdfs块大小、设定的最大、最小块大小确定划分,划分完成一块分片对应于一个MapTask。然后根据本地化原则,在最优的机器上启动对应的MapTask,MapTask根据分配的FileSplit信息,去hdfs读取对应于当前MapTask的数据。然后逐行调用map函数进行处理。

map函数每处理完成一个数据,通过context收集结果。数据会先缓冲到kvbuffer中,当到达kvbuffer的设定比例时,开始触发溢写操作,先对kvbuffer进行分区、排序,都写入一个文件中,然后将同一分区放在连续的空间上,并使用一个单独的索引文件记录每个分区在文件中的起始和终止位置,方便在MapTask完成所有任务后进行多个spill溢写文件分区合并。当MapTask完成所有任务后,就会生成n个文件,n是触发溢写的次数,每个文件包含多个分区的数据,为了进行后续的reduce阶段,需要将这些文件的数据按照分区重新整理到对应的文件中,每个文件发往对应的结点,给reduce使用。由于分区内是有序的,只需要根据之前存储的索引文件查询对应分区,然后进行归并排序。

Reduce在某个MapTask完成计算后,就开始拉取其计算结果到对应结点,此过程就是Reduce Read。从多个MapTask上读取的数据需要合并到一起,再逐个传递给reduce函数进行处理,同一个key值的数据,会被同一个reduce函数进行处理,再通过context收集每个key处理的结果。

数据本地性

由于计算需要对应的数据和计算逻辑,可以通过移动计算的逻辑到对应结点,避免数据在节点之间的传输。
数据本地性有几个级别:
1当mapTask和数据在同一个结点时,称为本地级别的数据本地性,是最好的场景。
2机架内的数据本地性。由于本地级别并不是总能实现,数据迁移是不可避免的。在数据迁移时,尽量让数据和计算在同一个机架上。
3跨机架,是最差的情况。

KvBuffer

内存缓冲区同时存储了键值对数据及其索引数据kvMeta,kvMeta是一个四元组,(key起始位置,value起始位置,value长度,partition),两者在圆形缓冲区内对向增长,当完成一次溢写。再取两者索引的终点为分割线,并掉头增长。partition、sort过程本质是对索引进行处理。

Combine

如果设置了Combine类,就会在spill之前进行combine操作,将同key值的数据提前进行规约,减少数据的条数。

hdfs写入流程绘图

1先请求NameNode写入文件,NameNode检查写入权限等合法性,如果合法就将操作的元信息写入缓存,当触发刷盘时写入edit_log文件。
2NN返回同意请求及可用的DN地址列表,
3client按照block大小切分文件,将切分好的数据与DN地址列表一起发送给最近的DN,以packet=64kb发送给DN。由该DN与地址列表中的多个DN形成pipline管道,此后,client每向第一个DN写入一个packet,DN就会将这个packet传递个后续的DN,并逐级返回ack信息。
4写入完毕,关闭连接。发送完成信号给NN。

spark hive 调优

调优主要从优化rdd 优化,内存优化方面,参数调优。

资源参数调优

–driver-mrmory
–num-executors
–executor-memory
–executor-cores

rdd 优化

1持久化策略达到性能最优:如果一个rdd的计算时间很长或很复杂,都将这个RDD保存到HDFS上,这样更加安全。
2使用shuffle时,尽量使用带combiner的算子,例如reduceByKey,aggregateByKey,combineByKey,减少map spill磁盘的数据量,以及reduce copy的数据量。
3优化小表join:使用map join。
4使用kryo序列化减少序列化对象空间
5数据本地化:合适的本地化等待时间,可能影响执行时间。

内存优化

1.spark.memory.fraction,存储内存和运行内存的比例
2.堆外内存,spark底层shuffle使用netty,netty会使用堆外内存

导致shuffle的算子

1.重分区 : repartition , coalesce
2.byKey: reduceByKey,aggregateByKey,combineByKey sortByKey
3.两表join、集合操作:intersection,subtract,join

hive join

left join,right join,inner join,full outer join,semi join,cross join

窗口函数

聚合:sum,count()
排序:row_number,dense_rank(),rank()
取行:lead(),lag()
over(partition by order by row between 2 rows precedding and 3 rows following)

cartesian product 和 full join

笛卡尔积不判断join条件,是左边任意一个与右边所有相乘。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 21:03:44  更:2022-09-24 21:07:10 
 
开发: 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年11日历 -2024/11/23 10:13:30-

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