额,从今天起用Project做了学习计划,计划26天能看完这本书,不知道能不能坚持到底,拭目以待
1.数据完整性
- 检测数据是否损坏
- 在数据第一次引入系统时计算校验和并在数据通过一个不可靠的通道进行传输时再次计算校验和
- 校验和也是可能损坏的
- 错误检测码CRC-32 HDFS 使用的是一个更有效的变体CRC-32C
- HDFS 的数据完整性
- 对写入的所有数据计算校验和,并在读取数据时验证校验和
- hadoop fs -checksum 检查一个文件的校验和
- LocalFileSystem 执行客户端的校验和验证
- ChecksumFileSystem
2.压缩
-
优势:减少存储文件所需要的磁盘空间,并加速数据在网络和磁盘上的传输
压缩格式 工具 算法 文件扩展名 是否可切分 DEFLATE 无 DEFLATE .deflate 否 gzip gzip DEFLATE .gz 否 bzip2 bzip2 bzip2 .bz2 是 LZO lzop LZO .lzo 否 LZ4 无 LZ$ .lz4 否 Snappy 无 Snappy .snappy 否 -
所有压缩算法都需要权衡空间/时间
-
bzip2的压缩能力强于gzip,但速度慢
-
codec
压缩格式 | HadoopCompressionCodeC |
---|---|
gzip | org.apache.hadoop.io.compress.GzipCodeC |
bzip2 | org.apache.hadoop.io.compress.BZip2Codec |
- 最好使用原生类库,而不是Java实现
- 大量压缩和解压缩,可以考虑使用CodecPool
- 压缩和输入分片
- 在MapReduce 中使用压缩
public static void main(String[] args) throws Exception {
if (args.length != 2) {
System.err.println("Usage: MaxTemperatureWithCompression <input path> <output path>");
System.exit(-1);
}
Job job = new Job();
job.setJarByClass(MaxTemperature.class);
job.setJobName("Max Temperature");
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileOutputFormat.setCompressOutput(job, true);
FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class);
job.setMapperClass(MaxTemperatureMapper.class);
job.setCombinerClass(MaxTemperatureReducer.class); //减少 map 跟reducer 之间的数据传输
job.setReducerClass(MaxTemperatureReducer.class);
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
- 对map任务输出进行压缩
3.序列化
定义:序列化是指将结构化对象转化为字节流以便在网络上传输或写到磁盘进行永久存储的过程,反序列化是指将字节流转回结构化对象的逆过程
序列化用于分布式数据处理的两大领域:进程间通信和永久存储
- Writable 接口
void write(DataOutput out) throws IOException; void readFields(DataInput in) throws IOException;
- IntWritable
- WritableComparable
- org.apache.hadoop.io
- VIntWritable VLongWritable (变长格式会更节省空间)
- Text 最大2GB
4.基于文件的数据结构
- 关于SequenceFile
- 适合二进制类型的数据
- hadoop fs -text numbers.seq|head
- 关于MapFile
- MapFile 是已经排过序的SequenceFile,它有索引,所以可以按键查找。索引自身就是一个SequenceFile,包含了map中的一小部分健
- Avro 数据文件
- 以上几个都是面向行的数据格式,还有面向列的格式 RCFile