文章目录
Some Terminologies
Job & Task
In Hadoop, Job is divided into multiple small parts known as Task.
Slot
YARN
集群计算层:YARN;集群存储层:HDFS & HBase
- Storage: HDFS & HBase
- Compute: YARN
- Application: MapReduce, Spark, Tez
(Spark & Tez 是 DAG 任务) 更高层的应用建立在这里的 Application 之上,例如 Hive, Pig
Yarn 的运行机制
resource manager, container, node manager
YARN 资源请求的本地化:尽量同一个节点、同一个机架
在 Mapreduce 中,一个用户作业对应一个应用;在 Spark 中,作业的每个工作流/每个用户对话对应一个应用;
一般都使用 Yarn 上的应用来构建新的应用,例如 MR, Spark。
YARN 与 MapReduce 1 对比
惯例:
- MapReduce 1 来指代 Hadoop 1 中的 MapReduce 分布式执行框架
- YARN (Hadoop2) 指代 MapReduce 2
在 MapReduce 1 中,两类守护进程:1 个 jobtracker,1 个/多个 tasktracker。在 MapReduce 中,jobtracker 完成了很多的管理任务;而在 YARN 中,这些分别由不同的工具来替代:
- resource manager
- application master (每个 MapReduce job 一个)
- timeline
YARN 的优点:
- 可扩展性(Scalability)
- 可用性(Availability)
- 利用率(Utilization)
- 多租户(Multitenancy) YARN 之下可以有多种版本的分布式系统,例如多种版本的 Hadoop
YARN 调度
三种调度器:FIFO Scheduler, Capacity Scheduler, Fair Scheduler。FIFO 会让小作业等待很久,Capacity 为小作业设置另外的队列,会牺牲整体性能。Fair 可以动态地分配资源。(书中还讲到了两种调度器的细节配置)
Hadoop I/O
数据完整性
数据量过大的时候会有可能会造成数据损坏,Hadoop 用校验码进行检验。
client 读数据的时候会验证校验和,同时每个 datanode 有一个后台线程 DataBlockScanner 在检验数据。
序列化
Serialization & Deserialization。需要将内存中的数据结构序列化以存储或传输到另外的节点——多个节点上的进程间通信(“远程过程调用” RPC: remote procedure call)。Hadoop 的序列化格式是 Writable,它紧凑、速度快,但不太容易用 Java 以外的语言进行拓展;Writable
是 Hadoop 的核心。
Writable
接口定义了两个方法,一个用来写入 DataOutput 二进制流,另一个从 DataInput 二进制流读取状态。
WritableComparable
能够直接比较数据流中的数据,WritableComparator
提供了一种默认的 compare 方法(但是要反序列化)。
Writable Class
JAVA 基本类型都有对应的 Writable 实现,这本书比较推荐 变长的 VintWritable
和 VlongWritable
。
Text
是针对 UTF-8 优化的 Writable
类,可以认为是 java.lang.String
的 Writable
等价,但其实还是有一定的差别。 Text
的存储方式和 String
并不一样,Text
用整形索引来存储字符串编码中的字节数,而 String
则是
In Java, the
char
data type is a single 16-bit Unicode character (from0x0000
to0xffff
, so 2 Btyes), while Class Character is a wrapper for the primitive type.
基于文件的数据结构
Hadoop, SequenceFile - 二进制键值对。