一:数据流的压缩和解压缩
CompressionCodec 有两个方法可以用于轻松地压缩或解压缩数据。要想对正在被写入一个输出流的数据进行压缩,
我们可以使用 createOutputStream(OutputStreamout)方法创建一个 CompressionOutputStream,将其以压缩格式写入
底层的流。相反,要想对从输入流读取而来的数据进行解压缩,则调用 createInputStream(InputStreamin)函数,
从而获得一个CompressionInputStream,从而从底层的流读取未压缩的数据。
二:案例之数据流的压缩
- 有如下压缩方式:
- 代码如下:
package com.kgf.mapreduce.compress; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.io.compress.CompressionCodec; import org.apache.hadoop.io.compress.CompressionOutputStream; import org.apache.hadoop.util.ReflectionUtils; public class TestCompress { public static void main(String[] args) throws Exception { // compress("E:\\input\\a.txt","org.apache.hadoop.io.compress.BZip2Codec"); // compress("E:\\input\\a.txt","org.apache.hadoop.io.compress.GzipCodec"); compress("E:\\input\\a.txt","org.apache.hadoop.io.compress.DefaultCodec"); } /** * 对文件进行压缩 * @param 文件路径 * @param 压缩的方式 * @throws FileNotFoundException */ private static void compress(String filePath, String pressMathod) throws Exception { //1:获取数据流 FileInputStream fis = new FileInputStream(new File(filePath)); //2:获取压缩方式对象 Class<?> codecClass = Class.forName(pressMathod); CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(codecClass, new Configuration()); //3:获取输出流 FileOutputStream fos = new FileOutputStream(new File(filePath+codec.getDefaultExtension())); //4:获取压缩输出流 CompressionOutputStream cos = codec.createOutputStream(fos); //5:实现流的对拷 IOUtils.copyBytes(fis, cos, 1024*1024*5,false); //6:关闭流 fis.close(); cos.close(); fos.close(); } }
- 效果如下:
三:案例之数据流的解压缩
- 代码:
四:Map /Reducer输出端采用压缩
- 简介
即使你的 MapReduce 的输入输出文件都是未压缩的文件,你仍然可以对 map 任务的中
间结果输出做压缩,因为它要写在硬盘并且通过网络传输到 reduce 节点,对其压缩可以提
高很多性能,这些工作只要设置两个属性即可,我们来看下代码怎么设置。
- Reduce 输出端采用压缩 (和上面一样都只需要修改Driver即可)
五:Yarn
- Hadoop1.x 和 Hadoop2.x 架构区别
在 Hadoop1.x 时代,Hadoop 中的 MapReduce 同时处理业务逻辑运算和资源的调度,耦合性较大。
在 Hadoop2.x 时代,增加了 Yarn。Yarn 只负责资源的调度,MapReduce 只负责运算。 - Yarn 概述
Yarn 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,
而 MapReduce 等运算程序则相当于运行于操作系统之上的应用程序。 - Yarn 基本架构如下
- Yarn 运行机制
- 工作机制详解
- 资源调度器
⑴简介
目前,Hadoop 作业调度器主要有三种:FIFO、Capacity Scheduler 和 Fair Scheduler。
Hadoop2.7.2 默认的资源调度器是 Capacity Scheduler。
⑵先进先出调度器(FIFO)
⑶容量调度器(Capacity Scheduler)
⑷公平调度器(Fair Scheduler)
- 任务的推测执行
算法原理: