⼤数据⾯试题以及答案整理(⼀)
kafka的message包括哪些信息
⼀个Kafka的Message由⼀个固定长度的header和⼀个变长的消息体body组成
header部分由⼀个字节的magic(⽂件格式)和四个字节的CRC32(⽤于判断body消息体是否正常)构成。当magic的值为1的时候,会在magic
和crc32之间多⼀个字节的数据:attributes(保存⼀些相关属性,⽐如是否压缩、压缩格式等等);如果magic的值为0,那么不存在attributes
属性
body是由N个字节构成的⼀个消息体,包含了具体的key/value消息
怎么查看kafka的offset
0.9版本以上,可以⽤最新的Consumerclient客户端,有consumer.seekToEnd()/consumer.position()可以⽤于得到当前最新的offset:
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上。
spark集群运算的模式
Spark有很多种模式,最简单就是单机本地模式,还有单机伪分布式模式,复杂的则运⾏在集群中,⽬前能很好的运⾏在Yarn和Mesos
中,当然Spark还有⾃带的Standalone模式,对于⼤多数情况Standalone模式就⾜够了,如果企业已经有Yarn或者Mesos环境,也是
很⽅便部署的。
standalone(集群模式):典型的Mater/slave模式,不过也能看出Master是有单点故障的;Spark⽀持ZooKeeper来实现HA
onyarn(集群模式):运⾏在yarn资源管理器框架之上,由yarn负责资源管理,Spark负责任务调度和计算
onmesos(集群模式):运⾏在mesos资源管理器框架之上,由mesos负责资源管理,Spark负责任务调度和计算
oncloud(集群模式):⽐如AWS的EC2,使⽤这个模式能很⽅便的访问Amazon的S3;Spark⽀持多种分布式存储系统:HDFS和S3
HDFS读写数据的过程
读:
1、跟namenode通信查询元数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/162285.html