文章目录
- 一. 小文件的问题
- 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结果输出的,选择压缩比高的,节省磁盘空间。
输入:哪些压缩支持分片;