Hadoop 编程&Hadoop IO

Posted 陌然大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop 编程&Hadoop IO相关的知识,希望对你有一定的参考价值。

Hadoop 编程

MapReduce - 编程

处理

  1. select:直接分析输入数据,取出需要的字段数据即可

  2. where: 也是对输入数据处理的过程中进行处理,判断是否需要该数据

  3. aggregation:min, max, sum

  4. group by: 通过Reducer实现

  5. sort

  6. join: map join, reduce join

Third-Party Libraries

export LIBJARS=$MYLIB/commons-lang-2.3.jar, hadoop jar prohadoop-0.0.1-SNAPSHOT.jar org.aspress.prohadoop.c3. WordCountUsingToolRunner -libjars $LIBJARS
hadoop jar prohadoop-0.0.1-SNAPSHOT-jar-with-dependencies.jar org.aspress.prohadoop.c3. WordCountUsingToolRunner The dependent libraries are now included inside the application JAR file

一般还是上面的好,指定依赖可以利用Public Cache,如果是包含依赖,则每次都需要拷贝

Hadoop IO

Hadoop - IO

  1. 输入文件从HDFS进行读取.

  2. 输出文件会存入本地磁盘.

  3. Reducer和Mapper间的网络I/O,从Mapper节点得到Reducer的检索文件.

  4. 使用Reducer实例从本地磁盘回读数据.

  5. Reducer输出- 回传到HDFS.

串行化

传输、存储都需要

Writable接口

Avro框架:IDL,版本支持,跨语言,JSON-linke

压缩

能够减少磁盘的占用空间和网络传输的量

Compressed Size, Speed, Splittable

gzip, bzip2, LZO, LZ4, Snappy

要比较各种压缩算法的压缩比和性能

重点:压缩和拆分一般是冲突的(压缩后的文件的block是不能很好地拆分独立运行,很多时候某个文件的拆分点是被拆分到两个压缩文件中,这时Map任务就无法处理,所以对于这些压缩,Hadoop往往是直接使用一个Map任务处理整个文件的分析)

Map的输出结果也可以进行压缩,这样可以减少Map结果到Reduce的传输的数据量,加快传输速率

完整性

磁盘和网络很容易出错,保证数据传输的完整性一般是通过CRC32这种校验法

每次写数据到磁盘前都验证一下,同时保存校验码

每次读取数据时,也验证校验码,避免磁盘问题

同时每个datanode都会定时检查每一个block的完整性

当发现某个block数据有问题时,也不是立刻报错,而是先去Namenode找一块该数据的完整备份进行恢复,不能恢复才报错


以上是关于Hadoop 编程&Hadoop IO的主要内容,如果未能解决你的问题,请参考以下文章

编程实现从hadoop上下载

大数据学习之MapReduce编程案例一单词计数 10

Hadoop编程踩坑

Hadoop 实验MR编程速记

Hadoop 实验MR编程速记

Hadoop & Spark