conslidate是如何优化Hash shuffle时在map端产⽣的⼩⽂件?
解析:
答:1)conslidate为了解决Hash Shuffle同时打开过多⽂件导致Writer handler内存使⽤过⼤以及产⽣过多⽂件导致⼤量的随机读写带来的低效磁盘IO;2)conslidate根据CPU的个数来决定
www.aboutyun.com/thread-24246-1-1.html 21/57
2019/4/24 spark相关的⾯试题跟答案,带着问题学习效果更佳哟。?)-⾯试区-about云开发
每个task shuffle map端产⽣多少个⽂件,假设原来有10个task,100个reduce,每个CPU有10个CPU
那么使⽤hash shuffle会产⽣10*100=1000个⽂件,conslidate产⽣10*10=100个⽂件
备注:conslidate部分减少了⽂件和⽂件句柄,并⾏读很⾼的情况下(task很多时)还是会很多⽂件
Sort-basesd shuffle产⽣多少个临时⽂件
解析:
答:2*Map阶段所有的task数量,Mapper阶段中并⾏的Partition的总数量,其实就是Mapper端task
解析:
1) 如果mapper中task的数量过⼤,依旧会产⽣很多⼩⽂件,此时在shuffle传递数据的过程中reducer段,reduce会需要同时⼤量的记录进⾏反序列化,导致⼤量的内存消耗和GC的巨⼤负
担,造成系统缓慢甚⾄崩溃
2)如果需要在分⽚内也进⾏排序,此时需要进⾏mapper段和reducer段的两次排序
解析:
答: spark shell启动会启动spark sql,spark sql默认使⽤derby保存元数据,但是尽量不要⽤derby,它是单实例,不利于开发。会在本地⽣成⼀个⽂件metastore_db,如果启动报错,就把那
个⽂件给删了 ,derby数据库是单实例,不能⽀持多个⽤⼾同时操作,尽量避免使⽤
spark.default.parallelism这个参数有什么意义,实际⽣产中如何设置?
解析:
答:1)参数⽤于设置每个stage的默认task数量。这个参数极为重要,如果不设置可能会直接影响你的Spark作业性能;2)很多⼈都不会设置这个参数,会使得集群⾮常低效,你的cpu,内
存再多,如果task始终为1,那也是浪费,spark官⽹建议task个数为CPU的核数*executor的个数的2~3倍。