一个job运行之前要做的三点工作
1:推测执行 入am 运行在那台服务器 配置高低 负载 数据倾斜 Map个数 reducer个数
2:并行执行调优 并且 调优
3:运行调优 JVM重用(jvm可以执行多个task),有多少tesk 就会有多少jvm,运行完了jvm会销毁 会有很大的资源开销
nameNode 如何判断副本放到哪个dn
1:网络拓扑
yarn HA (直接依赖ZK znode)
1:主节点挂啦,备用起来不 常见问题
小文件
0:reducer过都多会导致小文件,reducer过多是应为map key太多,合理使用自定义分区器
1:小文件太多,回导致NN主挂掉,备启动时候加载太多的小文件 起不来,一个blk大概200字节
2:太多的maptask 会导致进程太多 资源消耗
3:大量的磁盘io
4:解决小文件,自定义分区器patitions
压缩
三个阶段
第一阶段 是否可以分片的压缩(bzip2)。
第二阶段 shuffle的数据应该选择速度比较快的压缩(snappy)
第三阶段 reduce放磁盘就可以使用较高的压缩比节省磁盘空间(bzip2)
HIVE order by sort by
order by 是全局排序,数据量大了慎用应为只会产生一个reducer,产生数据倾斜 Job无法完成,严格模式必须指定limit
sort by 是redurce内部排序 并不能保证全局有序,严格模式无需指定limit
distribute by 根据指定的字段将数据分到不同的reducer,且分发算法是hash散列,长按照省份 分发到不同的地方,只有分发没有排序 可以配合 sort by使用。
cluster by = distribute by+sort by
reducer
reducer过都多会导致小文件
reducer过少会导致job运行失败,和数据倾斜。
hive 早期1个 0.14版本 reducer处理数据是1G,如果有10G则会有10个
hive 后期1个 reducer处理的数据是256M,如果有10G则会有40个
N = min(参数2,总输入参数参数量/参数1)
数据倾斜
reducer 数据倾斜。
reducer 合理 有利于治理数据倾斜。
hive join
join会产生shuffle的
普通join也叫 shuffle join 或者 reducer join 真正的join是在reducer完成的
join可以不产生shuffle 小表数据生产hashtable files放入hadoop分布式缓存,也叫mapjoin
行式存储 列式存储 OLTP和OLAP主要区别有:
1、含义不同:OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,记录即时的增、删、改、查 OLAP即联机分析处理,是数据仓库的核心部心,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。典型的应用就是复杂的动态报表系统。
2、实时性要求不同:OLTP实时性要求高,OLTP 数据库旨在使事务应用程序仅写入所需的数据,以便尽快处理单个事务。OLAP的实时性要求不是很高,很多应用顶多是每天更新一下数据。
3、数据量不同:OLTP数据量不是很大,一般只读/写数十条记录,处理简单的事务。OLAP数据量大,因为OLAP支持的是动态查询,所以用户也许要通过将很多数据的统计后才能得到想要知道的信息,例如时间序列分析等等,所以处理的数据量很大。
4、用户和系统的面向性不同:OLTP是面向主题的,用于事务和查询处理。OLAP是面向市场的,用于数据分析。
5、数据库设计不同:OLTP采用实体-联系ER模型和面向应用的数据库设计。OLAP采用星型或雪花模型、星形模型和面向主题的数据库设计。
Combiner:
Combiner就是为了避免map任务和reduce任务之间的数据传输而设置的,Hadoop允许用户针对map task的输出指定一个合并函数。即为了减少传输到Reduce中的数据量。它主要是为了削减Mapper的输出从而减少网络带宽和Reducer之上的负载。