人们常说的Hadoop狭义上说的是Hadoop架构,广义上是指以Hadoop为核心的生态圈
官网:hadoop.apache.org
版本:
- apache版,Apache公司开源,需要编译
- cdh版,cloudera公司开源,兼容性会好一点
hadoop架构主要由三个节点组成:
- HDFS:分布式文件存储
- YARN:分布式资源分配
- MapReduce:分布式计算
模式 - Local (Standalone) Mode 0进程 1台 (基本不会用)
- Pseudo-Distributed Mode 伪分布式 多个进程 1台(测试用)
- Fully-Distributed Mode 集群 多个进程 n台(生产用)
注意,配置文件中不要放IP,用hostname配置,hosts文件先配置好
血淋淋的案例:因公司机房搬迁,IP必须变更,只能挨个改配置文件
HDFS架构主从架构 - NameNode:主节点,主要负责文件读写,元数据的存储(只有一个)
- SecondaryNameNode:负责同步Namenode上的元数据(防止Namenode挂了)
- DataNode:负责文件存储,具体的读写
HDFS存储机制
在HDFS中文件是以块存储,hadoop2.X中每128M一个块,默认存储三份,分别放在不同的DataNode上,1.X中默认是64M,当然可以调块的大小,根据自己公司的需求来设置(以260M的文件,块大小128M为例,就会存到三个数据块中,每个数据块都是一个文件,会放9块)
DataNode会定时向NameNode发送心跳报告,如果发送的文件信息不一,NameNode会默认该块以损坏,会删除并从别的节点复制一份
小文件问题
- Hadoop不适合小文件存储,NameNode存放块的元数据信息,每个块的元数据信息大约在260字节左右,如果文件过多就撑爆NameNode
- HDFS适用于高吞吐量,而不适合低延迟的访问。如果同时存入大量的小文件会花费很长的时间
- 影响计算,每个MapReduce会开多个task去执行,而每个task都要开启JVM虚拟机,JVM的生产和消亡都会占用内存和CPU