第一部分:Hadoop 计算框架的特性什么是数据倾斜由于数据的不均衡原因,导致数据分布不均匀,造成数据大量的集中到一点,造成数据热点。Hadoop 框架的特性1)不怕数据大,怕数据倾斜2)jobs 数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次汇总,产生十几个 jobs,耗时很长。原因是 mapreduce 作业初始化的时间是比较长的3)sum,count,max,min 等 UDAF,不怕数据倾斜问题,hadoop 在 map 端的汇总合并优化,使数据倾斜不成问题4)count(distinct),在数据量大的情况下,效率较低,因为 count(distinct)是按 groupby 字段分组,按 distinct 字段排序,一般这种分布方式是很倾斜的。第二部分:优化的常用手段优化的常用手段1)解决数据倾斜问题2)减少 job 数3)设置合理的 mapreduce 的 task 数,能有效提升性能。4)了解数据分布,自己动手解决数据倾斜问题是个不错的选择5)数据量较大的情况下,慎用 count(distinct)。6)对小文件进行合并,是行至有效的提高调度效率的方法。7)优化时把握整体,单个作业最优不如整体最优。第三部分:Hive 的数据类型方面的优化优化原则按照一定规则分区(例如根据日期)。通过分区,查询的时候指定分区,会大大减少在无用数据上的扫描,同时也非常方便数据清理。合理的设置 Buckets。在一些大数据 join 的情况下,mapjoin 有时候会内存不够。如果使用 BucketMapJoin 的话,可以只把其中的一个 bucket 放到内存中,内存中原来放不下的内存表就变得可以放下。这需要使用 buckets 的键进行 join 的条件连结,并且需要如下设置sethive.optimize.bucketmapjoin=true第四部分:Hive 的操作方面的优化全排序Hive 的排序关键字是 SORTBY,它有意区别于传统数据库的 ORDERBY 也是为了强调两者的区别-SORTBY 只能在单机范围内排序。怎样做笛卡尔积当 Hive 设定为严格模式(hive.mapred.mode=strict)时,不允许在 HQL 语句中出现笛卡尔积,MapJoin 是的解决办法。MapJoin,顾名思义,会在 Map 端完成 Join 操作。这需要将 Join 操作的一个或多个表完全读 入 内 存 MapJoin 的 用 法 是 在 查 询 / 子 查 询 的 SELECT 关 键 字 后 面 添 加 /*+MAPJOIN(tablelist)*/提示优化器转化为 MapJoin(目前 Hive 的优化器不能自动优化MapJoin)其中 tablelist 可以是一个表,或以逗号连接的表的列表。tablelist 中的表将会读入...