Hadoop - noonecare/opensourcebigdatatools GitHub Wiki

concept:

MapReduce

HDFS: Design Concepts: Blocks, Namenodes and DataNodes, HDFS Federation(?), HDFS High-Availability. Interface: The Command-line interface Webhdfs FUSE JAVA API 实际读写时,都是先和 namenode 确认把数据读写到哪个 Block, 然后再连接 Block 所在的主机读写。 Coherency Model(? 是说当前正在写的 block 对于用户不可见(读)吗) Data Ingest with Flume and Sqoop (都用过,但是记不清了) Parallel Copying with distcp(hadoop distcp) Hadoop Archives(知道有这玩意儿,但是几没用过,也记不清楚了)

Hadoop I/O Data Integrity(一看就是通过对比数据的摘要, 比如 md5 值,求摘要的算法有很多) Data Integrity in HDFS(我在想,也许读hdfs 文件时,直接可以读出文件的 checksum 值,然后对于读到的文件做 checksum , 比较两个 checksum 值,就可以对比读到的数据是否完整,应该找找是否有这样的源码) ChecksumFileSystem(? 我怀疑这就是 hadoop 中一个重要的类) Compression Codecs(CompressionCodec 类用于压缩文件, CompressionCodecFactory 中提供了 Inferring CompressionCodecs 的方法) Native libraries CodecPool(?) Compression and Input Splits(最重要的就是有的 compression 是 splittable 的,有的不是,会导致 map reduce 有不同的并行度, gzip 是 unsplittable 的, bz2 是 spllitable 的) Using Compression in MapReduce (不需要做很多,只需要在 JobConf 中设置 mapred.compress.map.output 和 mapred.map.output.compression.codec 属性就可以了)

Serialization
    The Writable Interface(mapreduce 会把中间结果写到硬盘上,所有所有的类都要可序列化,为此就有了 Writable Interface)
    Writable Classes(?)
    Implementing a Custom Writable(?)
    Serialization Frameworks(?)

Avro(用过,了解不深。)
File-Based Data Structures: SequenceFile (使用过,也写过, 但是用的很少); MapFile(从来没有用过)

Developing a MapReduce Application:(这一章的概念对于写 Map Reduce 应用很重要,但是我不常写 MapReduce Application, 暂时只需要概念上的了解) The Configuration API Setting Up the Development Enviroment(就是个 Java 开发环境,maven, 以及打 uber package。有特点的也就是要知道 hadoop 需要引用那些 jar 包,简单的把所有 hadoop jar 一引用算了) Writing a Unit Test With MRUnit(我写 MapReduce Application 都比较少,跟别提写 hadoop application 的单元测试了) Running Locally on Test Data, Runing on a Cluster(这个需要会了。就是一个 java 应用有特点的地方是需要 如何指出 集群。) hadoop jar hadoop-examples.jar v3.MaxTemperatureDriver -conf conf/hadoop-cluster.xml input/ncdc/all max-temp 上面的例子中 hadoop-examples.jar 是个可执行的 jar包, hadoop The MapReduce Web UI: 和 Spark 一样,也有个 Web UI 去监控 Map Reduce Application 的执行。 Logs: Tuning a job:

hadoop-cluster.xml 中都写了什么? 就是 hadoop-cluseter.xml 指明了连接那个。到要连接的集群的配置文件中,找到 core-site.yml, yarn.xml。指明 yarn.xml 配置文件,就能连接到这个 yarn。 

How MapReduce Works: 我认为这一章很重要,因为不是会都会写 MapReduce 任务,但是都需要懂得这个分布式计算框架的原理。 JobTracker, TaskTracker(classic hadoop, haoop 1) ResourceManager, NodeManager(Yarn) 最突出的特点是, JobTracker 承担了 initial job 的任务;而 ResourceManger 不承担 initial job 的任务(承担 initial job 任务的 nodeManager node 起了一个 MRAppMaster, 正是 MRAppMaster 在监管各个 Task 的执行),它找了一个 NodeManger 来承担 Job Initial 的任务。 hadoop 1 中每一份儿资源成为 Map/Reduce Slot. Map Slot 只能用于作 Map, Reduce Slot 只能用于作 Reduce。 Yarn 中每一份儿资源称为 Container, Container 既可以用于作 Map, 也可以用于 Reduce。 不管是 Map/Reduce Slot, 还是 Container 主要都是限制了 内存大小。

Container, slots
Job Scheduling: FIFO, FIFO with priority, The Fair Scheduler, The Capacity Scheduler.