1.从innodb的所用结构分析,为什么所以的key程度不能太长?
key太长会导致一个页当中能够存放的key的数目变小,间接导致索引树的页数目变多,索引层次增加,
从而影响整体查询变更的效率
2.MySQL的数据如果恢复到任意时间点?
恢复到任意时间点以定时的做全量备份,以及备份增量的binlog日志为前提,恢复到任意时间点首先将全
量备份恢复之后,在此基础上回放增加的binlog直至指定的时间点
3.输入ping IP 后回车,发包前会发生什么?
首先根据目的IP的路由表决定走哪个网卡,再根据网卡的子网掩码地址判断目的地IP是否在子网内,如果
不在则会通过arp缓存查询IP的网卡地址,不存在的话会通过广播询问目的IP的mac地址,得到后开始发
包,同时mac地址也会被arp缓存起来.
4.有一批气象观测站,现需要获取这些站点的观测数据,并存储到 Hive 中。但是气象局只提供了 api 查询,每次只能查询单个观测点。那么如果能够方便快速地获取到所有的观测点的数据?
A. 通过 shell 或 python 等调用 api,结果先暂存本地,最后将本地文件上传到 Hive 中。
B. 通过 datax 的 httpReader 和 hdfsWriter 插件,从而获取所需的数据。
C. 比较理想的回答,是在计算引擎的 UDF 中调用查询 api,执行UDF 的查询结果存储到对应的表
中。一方面,不需要同步任务的导出导入;另一方面,计算引擎的分布式框架天生提供了分布式、
容错、并发等特性。
5.MapReduce中数据倾斜问题的解决方案
1. 调优参数
set hive.map.aggr=true;在map中会做部分聚集操作,效率更高但需要更多的内存
set hive.groupby.skewindata=true; 数据倾斜时负载均衡,当选项设定为true,生成的查询计划会有两个MRJob
2. 将造成倾斜的key进行分组,例如 aaa 这个 key,map 时随机在 aaa 后面加上 1,2,3,4 这四个数字之一,把 key 先分成四组,先进行一次运算,之后再恢复 key 进行最终运算
3. 能先进行 group 操作的时候先进行 group 操作,把 key 先进行一次 reduce,之后再进行 count 或者 distinct count 操作
4. join 操作中,使用 map join 在 map 端就先进行 join ,免得到reduce 时卡住
5. 增加reduce个数
6. 增加reduce的jvm内存
6.写出用过的spark算子,其中哪些会产生shuffle过程
Transformation:map,mapreduce,flatmap,filter,distinct,union,reducebykey…
actor:reduce,collect,count,takeforeach…
能产生shuffle的算子:distinct,reducebykey,sortbykey
7.Hive中内部表与外部表的区别,分区表与分桶表的区别
外部表删除时,不会删除hdfs上的数据,内部表删除,hdfs和mysql中的数据都会删除.
分区表是分文件夹,partition by
分桶表是份文件(将大文件,分割成一个个的小文件)cluster by into buckets
8.spark中coalesce与repartition的区别
都代表RDD分区重新规划
coalesce重新分区,可以选择是否进行shuffle过程。由参数shuffle: Boolean = false/true决定
repartition实际上是调用的coalesce,默认是进行shuffle的