文章目录
- 一. 小文件的问题
 
- 1.1 HDFS架构
 - 2. HDFS写流程
 - 3. HDFS读流程
 - 4. HA
 - 5. 小文件
 
- Hadoop调优策略
 
- 分表
 - 充分利用中间结果集
 - 压缩
 
一. 小文件的问题
HDFS架构;
 HDFS读写流程;
 HDFS HA;
 小文件是什么
 小文件给Hadoop集群带来的瓶颈问题;
从HDFS架构中看到Hadoop各个组件的作用是什么?
把问题向尼所知道的方面去引导;
1.1 HDFS架构
Hadoop:HDFS/YARN/MapReduce
HDFS:NameNode,DataNode, SecondaryNameNode;
概念:
 Client、
 NN:
 – 一个,容易出现单点故障问题,引出HA;
 – metadata:谁 权限 文件对应的block的信息;
DN:多个,存储数据;和NN之间是有心跳的
 Block:文件存入HDFS中时,是按照block进行拆分,128M的大小;
HDFS的容错信息:三副本或两幅本的策略。
2. HDFS写流程
Client(请求读写操作)、一个NameNode(只有一个,负责元数据管理和协调巩工作)、多个DataNode(负责存储数据)、
需求:
 一个人写数据到HDFS中,大小是200M;
缺少些东西:
 1)blocksize是多少:128/64/256M;
 2)几副本:1/2/3
 都是在HDFS的配置文件中的;
200M会被拆分为两个block块,block1和block2。
第三步:block1存放3个副本,NN需要知道3个block块要存放到哪几个DN上呢?
 第四步:NameNode明确告诉Client,DN1/DN2/DN3的地址;
 第五步:一边接受,一边把数据存放在下面的机器上面去。当每个block写完后,DataNode会告诉NameNode,其block已经写完了。当所有的块写完后,NameNode上面就有所有block块的信息了。
元数据信息:
 file–>
 block1:3 dn1/dn2/dn3
 block2:3 dn1/dn2/dn3;
3. HDFS读流程
一个人要读某个目录下的文件,流程是怎样的:
 拿着目录在元数据中来找,要问NN,去拿到你想获取的元数据信息。客户端直接到DataNode上去拿,把相同的block块上的信息合并。
4. HA
元数据是在NameNode中管理的。
 生产上的东西一定是要保证高可用的,HDFS、YARN都是这样。
 高可用方案:主备方案。
 Standby做的仅仅是同步active的节点状态。
 但是这两个怎么切换?
 配置再两个独立的机器上,一个处于活动状态,一个处于备份状态。
 当出现了问题时,怎样来切换?
 通过Monitor来进行监控两个NameNode:active和standby;
 然后通过zookeeper来进行管理。
总结:通过主和备,然后有各自的进程来监控它,通过zookeeper来进行一个状态的切换,不需要人工来进行干预。
参考文档
HA扩展:YARN的HA
 RM虽然有HA,但是会起不来。主的挂掉,备用的起不来,可能是小文件的问题导致。
挂掉的时候意味着无法把yarn的作业提交上去,那此时的SLA如何来保证这个99.99%?
5. 小文件
为什么会有小文件:–>
 做批处理或者离线计算时,就会有小文件的产生。
 最通常的做法:数据拷贝到HDFS上去。
 reduce决定了文件输出的个数。
 Hadoop中的目录、文件、block都会以元数据的方式来存储。
小文件给Hadoop集群带来的瓶颈问题:–>
 经典的mapreduce过程:

 以MapReduce为例–>
Hive的执行过程,是如何把SQL转成MapReduce的?
1)磁盘的IO是瓶颈;
 2)map的task的开启和销毁会浪费大量的时间;
 3)资源有限;
Hadoop调优策略
- 架构:分表 分区表partition 充分利用中间结果集 压缩
 - 语法: 排序–order by/sort by/distribute by/cluster by
控制输出(reduce/partiton/task)的数量
join:普通join/mapjoin
执行计划 - 执行:推测执行 并行执行 JVM
 
分表
Flume–>HDFS–>Spark ETL–>Spark SQL–>SQL–>Spark SQL/NoSQL
 行式存储–>每分钟2亿调数据,500哥个作业访问这个大表。
分表:
access_20190808 在关系数据库的分表;
 在大数据中,就是分区表:/spark/access/day=20190808/…
 分区里又分为单极分区/多级分区/静态分区/动态分区;
分区表目的是用来减少查询时候的范围;
充分利用中间结果集
CPU负载,IO负载;
 IO负载降低进而提升作业的执行性能,缺点是什么;
在资源不变的情况下,让作业的执行性能有所提升;
压缩
使用压缩算法来“减少”数据的过程;
缺点是什么?
 常用压缩技术:gzio,bzip2;
 压缩在大数据中的使用场景:
 输入数据,中间数据,输出数据;
怎么在压缩中做一个选择:压缩比 压缩速度,两者呈反比。
 reduce结果输出的,选择压缩比高的,节省磁盘空间。
输入:哪些压缩支持分片;
                










