通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心。
HDFS就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。
Hadoop的MapReduce功能实现了将单个任务打碎,并将碎片任务(Map)发送到多个节点上,之后再以单个数据集的形式加载(Reduce)到数据仓库里。
HDFS 内部的所有通信都基于标准的 TCP/IP 协议。
实际的 I/O事务并没有经过 NameNode,只有表示 DataNode 和块的文件映射的元数据经过 NameNode。
Hadoop 的MapReduce 却是一个高度抽象的并行编程模型,它将分布式并行编程抽象为两个原语操作,即map 操作和reduce 操作
map函数:接受一个键值对(key-value pair),产生一组中间键值对。MapReduce框架会将map函数产生的中间键值对里键相同的值传递给一个reduce函数。
reduce函数:接受一个键,以及相关的一组值,将这组值进行合并产生一组规模更小的值(通常只有一个或零个值)。
NameNode的metadata信息在启动后会加载到内存中
文件包括:
① fsimage (文件系统镜像):元数据镜像文件。存储某一时段NameNode内存元数据信息。
② edits: 操作日志文件。默认大于64M强制检查
③ fstime: 保存最近一次checkpoint的时间
block是hdfs读写数据的基本单位。
客户端通过调用FileSystem对象的open()方法来打开希望读取的文件,对于HDFS来说,这个对象时分布文件系统的一个实例;
DistributedFileSystem通过使用RPC来调用NameNode以确定文件起始块的位置,同一Block按照重复数会返回多个位置,这些位置按照Hadoop集群拓扑结构排序,距离客户端近的排在前面;
前两步会返回一个FSDataInputStream对象,该对象会被封装成DFSInputStream对象,DFSInputStream可以方便的管理datanode和namenode数据流,客户端对这个输入流调用read()方法;
存储着文件起始块的DataNode地址的DFSInputStream随即连接距离最近的DataNode,通过对数据流反复调用read()方法,可以将数据从DataNode传输到客户端;
到达块的末端时,DFSInputStream会关闭与该DataNode的连接,然后寻找下一个块的最佳DataNode,这些操作对客户端来说是透明的,客户端的角度看来只是读一个持续不断的流;
一旦客户端完成读取,就对FSDataInputStream调用close()方法关闭文件读取。
加工/计算层(MapReduce)是一种并行编程模型,以及
存储层(Hadoop分布式文件系统),hdfs
Hadoop通用:这是Java库和其他Hadoop组件所需的实用工具。(通用工具)
Hadoop YARN :这是作业调度和集群资源管理的框架。