A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 就业高冷派 于 2018-11-23 14:26 编辑

公司名称:西安宏源视讯设备有限责任公司
公司经营:视频、图形、图像的处理、控制、组合显示及传输等相关视讯产品的研发、生产和系统工程服务(http://www.hyvideo.com
注册规模:50-150人
公司地址:西安市高新区科技二路66号宏源大厦
公司图片:
人事小姐姐先进来聊了几句,大概内容无非就是了解一下性格呀,就普通聊天,也问到上家公司的一些情况,涉及到业务内容的都简单带过,有问到离职原因,这个自己可以结合自己的情况说一个。
人事简单聊完,等了一会来了一个技术组长,有问到一些问题,简单整理如下:

1.简单说一下hadoop和spark的shuffle相同和差异?
1)从 high-level 的角度来看,两者并没有大的差别。 都是将 mapper(Spark 里是 ShuffleMapTask)的输出进行 partition,不同的 partition 送到不同的 reducer(Spark 里 reducer 可能是下一个 stage 里的 ShuffleMapTask,也可能是 ResultTask)。Reducer 以内存作缓冲区,边 shuffle 边 aggregate 数据,等到数据 aggregate 好以后进行 reduce() (Spark 里可能是后续的一系列操作)。
2)从 low-level 的角度来看,两者差别不小。 Hadoop MapReduce 是 sort-based,进入 combine() 和 reduce() 的 records 必须先 sort。这样的好处在于 combine/reduce() 可以处理大规模的数据,因为其输入数据可以通过外排得到(mapper 对每段数据先做排序,reducer 的 shuffle 对排好序的每段数据做归并)。目前的 Spark 默认选择的是 hash-based,通常使用 HashMap 来对 shuffle 来的数据进行 aggregate,不会对数据进行提前排序。如果用户需要经过排序的数据,那么需要自己调用类似 sortByKey() 的操作;如果你是Spark 1.1的用户,可以将spark.shuffle.manager设置为sort,则会对数据进行排序。在Spark 1.2中,sort将作为默认的Shuffle实现。
3)从实现角度来看,两者也有不少差别。 Hadoop MapReduce 将处理流程划分出明显的几个阶段:map(), spill, merge, shuffle, sort, reduce() 等。每个阶段各司其职,可以按照过程式的编程思想来逐一实现每个阶段的功能。在 Spark 中,没有这样功能明确的阶段,只有不同的 stage 和一系列的 transformation(),所以 spill, merge, aggregate 等操作需要蕴含在 transformation() 中。
如果我们将 map 端划分数据、持久化数据的过程称为 shuffle write,而将 reducer 读入数据、aggregate 数据的过程称为 shuffle read。那么在 Spark 中,问题就变为怎么在 job 的逻辑或者物理执行图中加入 shuffle write 和 shuffle read 的处理逻辑?以及两个处理逻辑应该怎么高效实现?
Shuffle write由于不要求数据有序,shuffle write 的任务很简单:将数据 partition 好,并持久化。之所以要持久化,一方面是要减少内存存储空间压力,另一方面也是为了 fault-tolerance。

2.RDD机制?
rdd分布式弹性数据集,简单的理解成一种数据结构,是spark框架上的通用货币。
所有算子都是基于rdd来执行的,不同的场景会有不同的rdd实现类,但是都可以进行互相转换。
rdd执行过程中会形成dag图,然后形成lineage保证容错性等。 从物理的角度来看rdd存储的是block和node之间的映射。

3.spark有哪些组件?
主要有如下组件:
1)master:管理集群和节点,不参与计算。
2)worker:计算节点,进程本身不参与计算,和master汇报。
3)Driver:运行程序的main方法,创建spark context对象。
4)spark context:控制整个application的生命周期,包括dagsheduler和task scheduler等组件。
5)client:用户提交程序的入口。

4.如何在一个不确定的数据规模的范围内进行排序?
为了提高效率,要划分划分,划分的范围并且是有序的
要么有序,要么降序?
水塘抽样:目的是从一个集合中选取,集合非常答,适合内存
无法容纳数据的时候使用
从N中抽取出K个,N是随机数

5.介绍parition和block有什么关联关系?
1)hdfs中的block是分布式存储的最小单元,等分,可设置冗余,这样设计有一部分磁盘空间的浪费,但是整齐的block大小,便于快速找到、读取对应的内容;2)Spark中的partion是弹性分布式数据集RDD的最小单元,RDD是由分布在各个节点上的partion组成的。partion是指的spark在计算过程中,生成的数据在计算空间内最小单元,同一份数据(RDD)的partion大小不一,数量不定,是根据application里的算子和最初读入的数据分块数量决定;3)block位于存储空间、partion位于计算空间,block的大小是固定的、partion大小是不固定的,是从2个不同的角度去看数据。

6.有可能使hadoop任务输出到多个目录中么?如果可以,怎么做?
在1.X版本后使用MultipleOutputs.java类实现
源码:
MultipleOutputs.addNamedOutput(conf, "text2", TextOutputFormat.class, Long.class, String.class);
MultipleOutputs.addNamedOutput(conf, "text3", TextOutputFormat.class, Long.class, String.class);
发音:Multiple['m?lt?pl]--》许多的

7.如果没有定义partitioner,那么数据在被送达reducer前是如何被分区的?
Partitioner是在map函数执行context.write()时被调用。
用户可以通过实现自定义的?Partitioner来控制哪个key被分配给哪个?Reducer。
查看源码知道:
如果没有定义partitioner,那么会走默认的分区Hashpartitioner








129 个回复

正序浏览
xiaoheizi 发表于 2019-2-21 13:02
66666666666666666666666666

继续努力,加油~
回复 使用道具 举报
同心筑梦1 发表于 2019-2-22 12:54
6666666666666666666666666

继续努力,加油~
回复 使用道具 举报

继续努力,加油~
回复 使用道具 举报

继续努力,加油~
回复 使用道具 举报
小丹子 发表于 2019-2-21 15:24
辛苦辛苦!!!!!!

继续努力,加油~
回复 使用道具 举报
xiaoheizi 发表于 2019-2-21 13:02
66666666666666666666666666

继续努力,加油~
回复 使用道具 举报

继续努力,加油~
回复 使用道具 举报

继续努力,加油~
回复 使用道具 举报
哦嗨呦 发表于 2019-2-21 09:41
顶 !!!!!!!!!!!!!

继续努力,加油~
回复 使用道具 举报
mydorling11 发表于 2019-2-20 22:59
好好好。。。好好好。。。好好好。。。

继续努力,加油~
回复 使用道具 举报
json0314 发表于 2019-2-20 21:49
谢谢楼主,辛苦了...........

继续努力,加油~
回复 使用道具 举报

继续努力,加油~
回复 使用道具 举报
小西西哦 发表于 2019-2-20 17:09
66666666666666666666666666666666666666666666

继续努力,加油~
回复 使用道具 举报
回复 使用道具 举报

继续努力,加油~
回复 使用道具 举报

继续努力,加油~
回复 使用道具 举报

继续努力,加油~
回复 使用道具 举报

继续努力,加油~
回复 使用道具 举报

继续努力,加油~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马