Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!

唯品会Java大数据开发工程师 PDF 下载


分享到:
时间:2020-08-09 11:28来源:http://www.java1234.com 作者:小锋  侵权举报
唯品会Java大数据开发工程师 PDF 下载
失效链接处理
唯品会Java大数据开发工程师 PDF 下载


 
本站整理下载:
 
相关截图:
 
主要内容:

1、kafka 的 message 包括哪些信息 一个 Kafka 的 Message 由一个固定长度的 header 和一个变长的消息体 body 组成 header 部分由一个字节的 magic(文件格式)和四个字节的 CRC32(用于判断 body 消息体 是否正常)构成。当 magic 的值为 1 的时候,会在 magic 和 crc32 之间多一个字节的数据: attributes(保存一些相关属性,比如是否压缩、压缩格式等等);如果 magic 的值为 0,那 么不存在 attributes 属性 body 是由 N 个字节构成的一个消息体,包含了具体的 key/value 消息 2、怎么查看 kafka 的 offset 0.9 版本以上,可以用最新的 Consumer client 客户端,有 consumer.seekToEnd() / c onsumer.position() 可以用于得到当前最新的 offset: 3、hadoop 的 shuffle 过程 一、Map 端的 shuffle Map 端会处理输入数据并产生中间结果,这个中间结果会写到本地磁盘,而不是 HDFS。 每个 Map 的输出会先写到内存缓冲区中,当写入的数据达到设定的阈值时,系统将会启动 一个线程将缓冲区的数据写到磁盘,这个过程叫做 spill。 在 spill 写入之前,会先进行二次排序,首先根据数据所属的 partition 进行排序,然后 每个 partition 中的数据再按 key 来排序。partition 的目是将记录划分到不同的 Reducer 上去,以期望能够达到负载均衡,以后的 Reducer 就会根据 partition 来读取自己对应的数 据。接着运行 combiner(如果设置了的话),combiner 的本质也是一个 Reducer,其目的 是对将要写入到磁盘上的文件先进行一次处理,这样,写入到磁盘的数据量就会减少。最后
将数据写到本地磁盘产生 spill 文件(spill 文件保存在{mapred.local.dir}指定的目录中, Map 任务结束后就会被删除)。 最后,每个 Map 任务可能产生多个 spill 文件,在每个 Map 任务完成前,会通过多路 归并算法将这些 spill 文件归并成一个文件。至此,Map 的 shuffle 过程就结束了。 二、Reduce 端的 shuffle Reduce 端的 shuffle 主要包括三个阶段,copy、sort(merge)和 reduce。 首先要将 Map 端产生的输出文件拷贝到 Reduce 端,但每个 Reducer 如何知道自己 应该处理哪些数据呢?因为 Map 端进行 partition 的时候,实际上就相当于指定了每个 Reducer 要处理的数据(partition 就对应了 Reducer),所以 Reducer 在拷贝数据的时候只 需拷贝与自己对应的 partition 中的数据即可。每个 Reducer 会处理一个或者多个 partition, 但需要先将自己对应的 partition 中的数据从每个 Map 的输出结果中拷贝过来。 接下来就是 sort 阶段,也成为 merge 阶段,因为这个阶段的主要工作是执行了归并排 序。从 Map 端拷贝到 Reduce 端的数据都是有序的,所以很适合归并排序。最终在 Reduce 端生成一个较大的文件作为 Reduce 的输入。 最后就是 Reduce 过程了,在这个过程中产生了最终的输出结果,并将其写到 HDFS 上。4、spark 集群运算的模式 Spark 有很多种模式,最简单就是单机本地模式,还有单机伪分布式模式,复杂的则运行 在集群中,目前能很好的运行在 Yarn 和 Mesos 中,当然 Spark 还有自带的 Standalo
ne 模式,对于大多数情况 Standalone 模式就足够了,如果企业已经有 Yarn 或者 Mes os 环境,也是很方便部署的。 standalone(集群模式):典型的 Mater/slave 模式,不过也能看出 Master 是有单点故障的; Spark 支持 ZooKeeper 来实现 HA on yarn(集群模式): 运行在 yarn 资源管理器框架之上,由 yarn 负责资源管理,Spar k 负责任务调度和计算 on mesos(集群模式): 运行在 mesos 资源管理器框架之上,由 mesos 负责资源管理, Spark 负责任务调度和计算 on cloud(集群模式):比如 AWS 的 EC2,使用这个模式能很方便的访问 Amazon 的 S 3;Spark 支持多种分布式存储系统:HDFS 和 S3 5、HDFS 读写数据的过程 读: 1、跟 namenode 通信查询元数据,找到文件块所在的 datanode 服务器 2、挑选一台 datanode(就近原则,然后随机)服务器,请求建立 socket 流 3、datanode 开始发送数据(从磁盘里面读取数据放入流,以 packet 为单位来做校验) 4、客户端以 packet 为单位接收,现在本地缓存,然后写入目标文件 写: 1、根 namenode 通信请求上传文件,namenode 检查目标文件是否已存在,父目录是否 存在2、namenode 返回是否可以上传 3、client 请求第一个 block 该传输到哪些 datanode 服务器上
4、namenode 返回 3 个 datanode 服务器 ABC 5、client 请求 3 台 dn 中的一台 A 上传数据(本质上是一个 RPC 调用,建立 pipeline), A 收到请求会继续调用 B,然后 B 调用 C,将真个 pipeline 建立完成,逐级返回客户端 6、client 开始往 A 上传第一个 block(先从磁盘读取数据放到一个本地内存缓存),以 p acket 为单位,A 收到一个 packet 就会传给 B,B 传给 C;A 每传一个 packet 会放入一个 应答队列等待应答 7、当一个 block 传输完成之后,client 再次请求 namenode 上传第二个 block 的服务器。 6、RDD 中 reduceBykey 与 groupByKey 哪个性能好,为什么 reduceByKey:reduceByKey 会在结果发送至 reducer 之前会对每个 mapper 在本地 进行 merge,有点类似于在 MapReduce 中的 combiner。这样做的好处在于,在 map 端 进行一次 reduce 之后,数据量会大幅度减小,从而减小传输,保证 reduce 端能够更快的 进行结果计算。 groupByKey:groupByKey 会对每一个 RDD 中的 value 值进行聚合形成一个序列 (Iterator),此操作发生在 reduce 端,所以势必会将所有的数据通过网络进行传输,造成不 必要的浪费。同时如果数据量十分大,可能还会造成 OutOfMemoryError。 通过以上对比可以发现在进行大量数据的 reduce 操作时候建议使用 reduceByKey。不仅 可以提高速度,还是可以防止使用 groupByKey 造成的内存溢出问题。


 

------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐