什么是hadoop?
Hadoop是一个开源框架,允许使用简单的编程模型跨计算机集群分布式处理大型数据集的框架。它旨在从单个服务器扩展到数千个机器,每个都提供本地计算和存储。
Hadoop提供的功能?
1.可靠的共享存储(分布式存储);
2.抽象的分析接口(分布式分析)。
Hadoop特性:
- 可运行于一般的商用服务器上,具有高容错、高可靠性、高扩展性等特点特别适合写一次,读多次的场景。
- 适合:大规模数据,流式数据(一次写,多次读),一般硬件。
- 不适合:低延时的数据访问,大量的小文件,频繁修改文件。
Hadoop架构?
- HDFS:分布式文件存储;
- YARN:分布式资源管理;
- MapReduce:分布式计算;
- other:利用YARN的资源管理实现其它的数据处理方式;
- 内部的各个节点基本都采用Master-Woker架构。
HDFS架构?
- Block数据块:基本的读写单位,类似于磁盘的页,每次都是读写一个块;一个大文件会被拆分成一个个的块,然后存储于不同的机器。如果一个文件少于Block大小,那么实际占用的空间为其文件的大小;每个块都会被复制到多台机器,默认复制3份。 基本存储单位,一般大小为64M,配置大的块主要是因为是:
- 减少搜寻时间,一般硬盘传输速率比寻道时间要快,大的块可以减少寻道时间;
- 减少管理块的数据开销,每个块都需要在NameNode上有对应的记录;
- 对数据块进行读写,减少建立网络的连接成本。
- NameNode:
- 存储文件的metadata,运行时所有数据都保存到内存,整个HDFS可存储的文件数受限于NameNode的内存大小;
- 一个Block在NameNode中对应一条记录(一般一个block占用150字节),如果是大量的小文件,会消耗大量内存。同时map task的数量是由splits来决定的,所以用MapReduce处理大量的小文件时,就会产生过多的map task,线程管理开销将会增加作业时间。处理大量小文件的速度远远小于处理同等大小的大文件的速度。因此Hadoop建议存储大文件;
- 数据会定时保存到本地磁盘,但不保存block的位置信息,而是由DataNode注册时上报和运行时维护(NameNode中与DataNode相关的信息并不保存到NameNode的文件系统中,而是NameNode每次重启后,动态重建);
- NameNode失效则整个HDFS都失效了,所以要保证NameNode的可用性。
- Secondary NameNode:
- 定时与NameNode进行同步(定期合并文件系统镜像和编辑日志,然后把合并后的传给NameNode,替换其镜像,并清空编辑日志,类似于CheckPoint机制),但NameNode失效后仍需要手工将其设置成主机。
- DataNode:
- 保存具体的block数据;
- 负责数据的读写操作和复制操作;
- DataNode启动时会向NameNode报告当前存储的数据块信息,后续也会定时报告修改信息;
- DataNode之间会进行通信,复制数据块,保证数据的冗余性。
知识铺垫——大数据?
- 概念:不能使用一台机器可以处理的数据,大数据的核心是样本=总体。
- 关键技术:
- 数据分布在多台机器,每个数据块都复制到多个节点,多个节点同时处理数据;
- 计算随数据走,网络IO速度 << 本地磁盘IO速度,大数据系统会尽量地将任务分配到离数据最近的机器上运行(程序运行时,将程序及其依赖包都复制到数据所在的机器运行)。代码向数据迁移,避免大规模数据时,造成大量数据迁移的情况,尽量让一段数据的计算发生在同一台机器上。
- 串行IO取代随机IO,传输时间 << 寻道时间,一般数据写入后不再修改。
- 特性:
- 大量性(volume): 一般在大数据里,单个文件的级别至少为几十,几百GB以上;
- 快速性(velocity): 反映在数据的快速产生及数据变更的频率上
- 多样性(variety): 泛指数据类型及其来源的多样化,进一步可以把数据结构归纳为结构化(structured),半结构化(semi-structured),和非结构化(unstructured)
- 易变性: 伴随数据快速性的特征,数据流还呈现一种波动的特征。不稳定的数据流会随着日,季节,特定事件的触发出现周期性峰值
- 准确性: 又称为数据保证(data assurance)。不同方式,渠道收集到的数据在质量上会有很大差异。数据分析和输出结果的错误程度和可信度在很大程度上取决于收集到的数据质量的高低
- 复杂性: 体现在数据的管理和操作上。如何抽取,转换,加载,连接,关联以把握数据内蕴的有用信息已经变得越来越有挑战性。