Hadoop的package的介绍:
Package | Dependences |
tool | 提供一些命令行工具,如DistCp,archive |
mapreduce | Hadoop的Map/Reduce实现 |
filecache | 提供HDFS文件的本地缓存,用于加快Map/Reduce的数据访问速度 |
fs | 文件系统的抽象,可以理解为支持多种文件系统实现的统一文件访问接口 |
hdfs | HDFS,Hadoop的分布式文件系统实现 |
ipc | 一个简单的IPC的实现,依赖于io提供的编解码功能 |
io | 表示层。将各种数据编码/解码,方便于在网络上传输 |
net | 封装部分网络功能,如DNS,socket |
security | 用户和用户组信息 |
conf | 系统的配置参数 |
metrics | 系统统计数据的收集,属于网管范畴 |
util | 工具类 |
record | 根据DDL(数据描述语言)自动生成他们的编解码函数,目前可以提供C++和Java |
http | 基于Jetty的HTTP Servlet,用户通过浏览器可以观察文件系统的一些状态信息和日志 |
log | 提供HTTP访问日志的HTTP Servlet |
数据块
每个磁盘都有默认的数据块大小,这是磁盘进项数据读/写的最小单位。
HDFS(Hadoop Distributed File System)默认的最基本的存储单位是64M的数据块(可设置)。
和普通文件系统相同的是,HDFS中的文件是被分成64M一块的数据块存储的。
不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间。
Block大,可以减少寻址所消耗的时间,使得硬盘传输数据的时间远大于寻址时间。但是如果block过大也会导致性能下降,那是因为一个mapper通常处理一个block的数据,待处理数据总量不变的情况下,block越大,mapper的数量就越少,导致并发度下降,使得性能下降。
namenode和datanode
namenode用来管理文件系统的命名空间
其将所有的文件和文件夹的元数据保存在一个文件系统树中。
这些信息也会在硬盘上保存成以下文件:命名空间镜像(namespace image)及修改日志(edit log)
其还保存了一个文件包括哪些数据块,分布在哪些数据节点上。然而这些信息并不存储在硬盘上,而是在系统启动的时候从数据节点收集而成的。
datanode是文件系统中真正存储数据的地方。
客户端(client)或者元数据信息(namenode)可以向数据节点请求写入或者读出数据块。
其周期性的向元数据节点回报其存储的数据块信息。