携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天,点击查看活动详情 >>
1. IO性能优化:文件类型
-
行式存储,列式存储 存储方式 | 优缺点 | | ---- | ---------------------------------- | | 行式存储 | 适合插入,不适合查询,写入一次性完成,消耗时间少,能够保证数据完整性 | | 列式存储 | 适合查询,不适合插入,读取过程中不会产生冗余数据
-
Sequence File
- 二进制存储格式,以<key,value>键值对的形式序列化到文件中
- 优点:更紧凑,支持压缩,可以拆分呵并行处理
- 缺点:不方便查看,只有java能交互
- 格式:未压缩格式、record压缩格式、block压缩格式 ,都适用相同的header结构,由header,record/block,sync三个部分组成。
- 未压缩格式:
- 其中record包含了4个部分记录长度,键长,key,value。每隔几个record(100字节左右)就有一个同步标记。
- 基于record压缩格式:
- 记录长度,键长,key,compressed value(被压缩的值)。每隔几个record(100字节左右)就有一个同步标记。
- 基于block压缩格式:
- 多个record记录组成的块,record条数,压缩key长度,压缩的keys,压缩的value长度,压缩的values。每隔一个block就有一个同步标记
- 未压缩格式:
-
有序二进制MapFile
- 介绍:排序后的SequenceFile
- 优点:当MapFile被访问的时候,索引文件会被索引映射关系可以迅速定位到指定Record所在的文件位置。
- 缺点:会消耗一部分内存来存储index数据
-
列式存储ORCFile
- 非单纯列式存储格式,先根据行分割整个表;二进制方式存储
2. 数据压缩优化
- 优点:减少存储空间,io读写的次数,加快文件传输效率。减少带宽
- 缺点:使用数据时需要先对文件解压,加重cpu负荷
| 压缩算法 | 优缺点 |
|---|---|
| Gzip | 压缩比高;hadoop支持,有hadoop native库;自带指令;不支持split |
| Snappy | 压缩速度快,支持hadoop native库;不支持split;压缩比低;hadoop不支持,无对应指令 |
| Lzo | 压缩/解压速度也比较快,合理的压 缩率;支持split,是hadoop中最流 行的压缩格式;支持hadoop native 库;需要在linux系统下自行安装 lzop命令,使用方便 ; 压缩率比gzip要低;hadoop本身不支持, 需要安装;lzo虽然支持split,但需要对lzo文件建索引,否则hadoop也是会把 lzo文件看成一个普通文件 |
3. 资源属性优化
MapReduce的核心优化在于修改数据文件类型、合并小文件、使用压缩等方式,通过降低IO开销来提 升MapReduce过程中Task的执行效率。
- Uber——小作业合在一起,统一串行执行
- JVM重用——使得JVM实例在同一个job中重新使用 N次
- 重试机制——失败,重新尝试,失败,终止job
- 关闭推测执行——尽量检测并启动另一个相同的任务作为备份
调节参数来提升MapReduce的性能
- 其他属性:
- 小文件合并优化 - 减少Shuffle时spill和merge次数