1、Hadoop是Google的集群系统的开源实现,Hadoop的初衷是为解决Nutch的海量数据爬取和存储的需要。
Hadoop的名称起源,Doug Cutting儿子的黄色大象玩具的名字。
2、Hadoop的核心数据:MapReduce、HDFS
MapReduce:Map(任务的分解)、Reduce(结果的汇总)
HDFS:NameNode、DataNode、Client
3、事实上Hadoop的HDFS就来源于谷歌的GFS,Hadoop的MapReduce来源于Google的MapReduce。
4、HDFS是解决大数据存储问题的,“大数据”指数据集的大小超过了现有典型的数据库软件和工具的处理能力。
5、数据目前最大的单位是PB,1PB=1024TB。
6、传统数据和大数据的比较
传统数据 大数据
数据量 GB - TB TB - PB
速度 数据量稳定,增长不快 持续实时产生数据,年增长率超过60%
多样化 主要为结构化数据 半结构化,非结构化,多维数据
价值 统计和报表 数据挖掘和预测性分析
7、Hadoop的子项目
Hadoop的子项目:Core、HDFS、Map/Reduce、ZooKeeper、Pig、Hive、HBase。
Core:一套分布式文件系统以及支持Map-Reduce的计算框架
Avro:定义了一种用于支持大数据应用的数据格式,并为这种格式提供了不同的编程语言的支持。
HDFS:Hadoop分布式文件系统
Map/Reduce:是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集。
ZooKeeper:是高可用的和可靠的分布式协同系统。
Hive:是为提供简单的数据操作而设计的下一代分布式数据仓库。它提供了简单的类似SQL的语法的HiveQL语言进行的数据查询。
HBase:建立于Hadoop Core 之上提供一个可扩展的数据库系统。
Flume:一个分布式、可靠、和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据。
Mahout:是一套具有可扩充能力的机器学习类库。
Sqoop:是Apache下用于RDBMS和HDFS互相导数据的工具。
8、HDFS介绍
HDFS为了做到可靠性(reliability)创建了多份数据块(data blocks)的复制(replicas),并将它们放置在服务器群的计算节点上(compute nodes),MapReduce就可以在它们所在的节点上处理这些数据了。
9、HDFS结构
HDFS的三个重要节点:NameNode、DataNode、SecondaryNameNode
NameNode:存储元数据、元数据保存在内存中、保存文件,block,datanode之间的映射关系。
元数据是指文件名、权限这些。实际上NameNode在存储元数据时也在磁盘中保存了一份,只是读取数据时,启动时磁盘中的内容加载到了内存,工作都是在内存中完成。文件越多,总的元数据越大。
DataNode:存储文件内容、文件内容保存在磁盘、维护了block id到datanode本地文件的映射关系。
10、HDFS优点:
(1)高容错性
数据自动保存多个副本;
副本i丢失后,自动回复。
(2)适合批处理
移动计算而非数据;
数据位置暴露给计算框架。
(3)适合大数据处理
GB、TB、甚至PB级数据;
百万规模以上的文件数量;
10K+节点
(4)可构建在廉价机器上
通过多副本提高可靠性;
提供了容错和恢复机制。
11、HDFS的缺点:
(1)低延迟数据访问
毫秒级;
低延迟与高吞吐量。
(2)小文件存取
占用NameNode大量内存;
寻道时间超过读取时间。
(3)并发写入、文件随机修改
一个文件只能有一个写者;
仅支持append。
12、HDFS数据存储单元(block)
存储在DataNode上的数据被称为数据存储单元(block)
(1)文件被切分成固定大小的数据块
默认数据块大小为64MB,可配置修改大小;
若文件大小不到64MB,则单独存成一个block。
(2)一个文件存储方式
按大小切分成若干个block,存储到不同节点上;
默认情况下每个block都有三个副本。
(3)Block大小和副本数通过Client端上传文件时设置,文件上传成功后副本数可以变更,Block Size不可变更。
13、NameNode节点介绍:NameNode(NN)
(1)NameNode主要功能:接收客户端的读写服务。
(2)NameNode保存metadate信息包括:文件owership和permissions、文件包含那些块、Block保存在哪个DataNode(由DataNode启动时上报)
(3)NameNode的metadate信息在启动后会加载到内存
metadata存储到磁盘文件名为“fsimage”