hadoop的TextInputFormat作⽤是什么,如何⾃定义实现?
解析:
InputFormat会在map操作之前对数据进⾏两⽅⾯的预处理。
1是getSplits,返回的是InputSplit数组,对数据进⾏split分⽚,每⽚交给map操作⼀次 。
2是getRecordReader,返回的是RecordReader对象,对每个split分⽚进⾏转换为key-value键值对格式传递给map。
常⽤的InputFormat是TextInputFormat,使⽤的是LineRecordReader对每个分⽚进⾏键值对的转换,以⾏偏移量作为键,⾏内容作为值。
⾃定义类继承InputFormat接⼝,重写createRecordReader和isSplitable⽅法 。
在createRecordReader中可以⾃定义分隔符。
hadoop和spark的都是并⾏计算,那么他们有什么相同和区别?
解析:
两者都是⽤mr模型来进⾏并⾏计算,hadoop的⼀个作业称为job,job⾥⾯分为map task和reduce task,每个task都是在⾃⼰的进程中运⾏的,当task结束时,进程也会结束。
spark⽤⼾提交的任务成为application,⼀个application对应⼀个sparkcontext,app中存在多个job,每触发⼀次action操作就会产⽣⼀个job。
这些job可以并⾏或串⾏执⾏,每个job中有多个stage,stage是shuffle过程中DAGSchaduler通过RDD之间的依赖关系划分job⽽来的,每个stage⾥⾯有多个task,组成taskset有
TaskSchaduler分发到各个executor中执⾏,executor的⽣命周期是和app⼀样的,即使没有job运⾏也是存在的,所以task可以快速启动读取内存进⾏计算。
hadoop的job只有map和reduce操作,表达能⼒⽐较⽋缺⽽且在mr过程中会重复的读写hdfs,造成⼤量的io操作,多个job需要⾃⼰管理关系。
spark的迭代计算都是在内存中进⾏的,API中提供了⼤量的RDD操作如join,groupby等,⽽且通过DAG图可以实现良好的容错。
为什么要⽤flume导⼊hdfs,hdfs的构架是怎样的?
解析:
flume可以实时的导⼊数据到hdfs中,当hdfs上的⽂件达到⼀个指定⼤⼩的时候会形成⼀个⽂件,或者超过指定时间的话也形成⼀个⽂件。
⽂件都是存储在datanode上⾯的,namenode记录着datanode的元数据信息,⽽namenode的元数据信息是存在内存中的,所以当⽂件切⽚很⼩或者很多的时候会卡死。
map-reduce程序运⾏的时候会有什么⽐较常⻅的问题?
解析:
⽐如说作业中⼤部分都完成了,但是总有⼏个reduce⼀直在运⾏。
这是因为这⼏个reduce中的处理的数据要远远⼤于其他的reduce,可能是因为对键值对任务划分的不均匀造成的数据倾斜。
解决的⽅法可以在分区的时候重新定义分区规则对于value数据很多的key可以进⾏拆分、均匀打散等处理,或者是在map端的combiner中进⾏数据预处理的操作。
简单说⼀下hadoop和spark的shuffle过程?
解析:
hadoop:map端保存分⽚数据,通过⽹络收集到reduce端。
spark:spark的shuffle是在DAGSchedular划分Stage的时候产⽣的,TaskSchedule要分发Stage到各个worker的executor。
www.aboutyun.com/thread-24246-1-1.html 38/57
2019/4/24 spark相关的⾯试题跟答案,带着问题学习效果更佳哟。?)-⾯试区-about云开发
减少shuffle可以提⾼性能。