1、什么是DAG
叫有向无环图,原始RDD通过转换形成DAG,RDD之间的依赖关系的不同划分为不同的Stage调度阶段
2、为什么会产生RDD
什么是窄依赖,宽依赖
窄依赖指的是每一个父RDD的partition最多被子RDD的一个Partition使用
一对一
宽依赖指的是多个子RDD的partition会依赖于同一个父RDD的partition
多对一
3、如果在SSH中添加key,是否还需要设置密码?
是的,即使在SSH中添加了key,还是需要设置密码。
4、Hadoop是否遵循UNIX模式?
是的,在UNIX用例下,Hadoop还拥有“conf”目录。
5、请描述一下开发过程中如何对上面的程序进行性能分析,对性能分析进行优化的过程。
现有 1 亿个整数均匀分布,如果要得到前 1K 个最大的数,求最优的算法。
参见《海量数据算法面试大全》
95.mapreduce的大致流程
主要分为八个步骤
1/对文件进行切片规划
2/启动相应数量的maptask进程
3/调用FileInputFormat中的RecordReader,读一行数据并封装为k1v1
4/调用自定义的map函数,并将k1v1传给map
5/收集map的输出,进行分区和排序
6/reduce task任务启动,并从map端拉取数据
7/reduce task调用自定义的reduce函数进行处理
8/调用outputformat的recordwriter将结果数据输出
6、请简述mapreduce中的combine和partition的作用
combiner是发生在map的最后一个阶段,其原理也是一个小型的reducer,主要作用是减少输出到reduce的数据量,缓解网络传输瓶颈,提高reducer的执行效率。
partition的主要作用将map阶段产生的所有kv对分配给不同的reducer task处理,可以将reduce阶段的处理负载进行分摊
7、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上。
8、什么是Kafka?
开源消息系统,由scala写成
Kafka是一个分布式消息队列:生产者、消费者的功能,他提供类似于JMS的特性,但是设计上完全不同,此外它并不是JMS规范的实现
Kafka对消息保存 根据Topic进行归类,Producer生产者为发送消息 ,接收消息为Consumer 消费者,Kafka集群有多个Kafka实例组成,每个实例为broker
Kafka所有组件都依赖于Zookeeper集群保存一些元数据信息,来保证系统可用性
9、Hbase的rowKey怎么创建比较好?列簇怎么创建比较好?
rowKey最好要创建有规则的rowKey,即最好是有序的。
经常需要批量读取的数据应该让他们的rowkey连续;
将经常需要作为条件查询的关键词组织到rowkey中;
列族的创建:
按照业务特点,把数据归类,不同类别的放在不同列族
10、hadoop-metrics.properties文件的作用是?
hadoop-metrics.properties被用做“Reporting”,控制Hadoop报告,初始状态是“not to report”。