Hadoop教程
作为一个开源框架,允许使用简单的编程模型在跨计算机集群的分布式环境中存储和处理大数据。它的设计是从单个服务器扩展到数千个机器,每个都提供本地计算和存储。
学习前提
假设已经了解Core Java,数据库概念和任何linux操作系统版本。
Hadoop配置
两种配置文件:
1、**-default.xml(只读,默认的配置)
2、**-site.xml(替换default中的配置)
- core-site.xml配置公共属性
- hdfs-site.xml配置HDFS
- yarn-site.xml配置YARN
- marped-site.xml配置MapReduce
配置文件应用的顺序:
1.在JobConf中指定的
2.客户端机器上的**-site.xml配置
3.slave节点上的**-site.xml配置
4.**-default.xml中的配置
如果某个属性不想被覆盖,可以将其设置成final
<property>
<name>{PROPERTY_NAME}</name>
<value>{PROPERTY_VALUE}</value>
<final>true</final>
</property>
对于多块硬盘存储数据而导致的性能没有跟上的问题,解决办法是把数据放到多块硬盘,然后同时读取。
hadoop主要提供了两个功能:
1.可靠的共享存储(分布式存储)
2.抽象的分析接口(分布式分析)
大数据:不能使用一台机器进行处理的数据
核心是样本=总体(相对于每台机器来说的?每台机器得到的既是总体的样本,也是自己要处理的总体?)
特性:
大量性:一般在大数据里,单个文件的级别至少是几十,几百GB以上
快速性:反映在数据的快速产生及数据变更的频率上
多样性:泛指数据类型及其来源的多样化,进一步可以把数据结构归纳为结构化(structured),半结构化(semi-structured),和非结构化(unstructured)
易变性:伴随数据快速性的特征,数据流还呈现一种波动的特征。不稳定的数据流会随着日,季节,特定事件的触发出现周期性峰值
准确性:又称为数据保证(data assurance)。不同方式,渠道收集到的数据在质量上会有很大的差异。数据分析和输出结果的错误程度和可信度在很大程度上取决于收集到的数据质量的高低。
复杂性:体现在数据的管理和操作上。如何抽取,转换,加载,连接,关联以把数据内蕴含的有用信息已经变得越来越有挑战性。
关键技术
1、数据分布在多台机器
可靠性:每个数据块都复制到多个节点
性能:多个节点同时处理数据
2、计算随数据走
网络IO速度<<本地磁盘IO速度,大数据系统会尽量地把任务分配到离数据最近的机器上运行(程序运行时,将程序及其依赖包都复制到数据所在的机器运行)
代码向数据迁移,避免大规模数据时,造成大量数据迁移的情况,尽量让一段数据的计算发生子啊同一台机器上
3、串行IO取代随行IO
传输时间<<寻道时间,一般数据写入后不再修改
Hadoop简介
可运行于一般的商用服务器上,具有高容错、高可靠性、高扩展性等特点
特别适合写一次,读多次的场景
适合
- 大规模数据(多大才算大规模数据呢?)
- 流式数据(写一次,读多次;那就很适合用来做数据仓库)
- 商用硬件(一般硬件,什么意思啊?)
不适合
- 低延时的数据访问
- 大量的小文件
- 频繁修改文件(基本就是写1次)
Hadoop架构
HDFS:分布式文件存储
YARN:分布式资源管理
MapReduce:分布式计算
Others:利用YARN的资源管理功能实现其他的数据处理方式
内部各个节点基本都是采用Master-Worker架构(这又是什么意思呢?)
Hadoop HDFS
Hadoop Distributed File System,分布式文件系统
架构:
- Block数据块:
基本存储单位,一般大小为64M(配置大得快主要是因为:减少搜索时间,一般硬盘传输效率比寻道时间要快,大的块可以减少寻道时间;较少管理块的数据开销,每个块都需要在NameNode上有对应的记录;对数据块进行读写,减少建立网络的连接成本)
一个大文件被拆分成一个个的块,然后存储于不同的机器。如果一个文件少于Block大小,那么实际占用的空间为其文件的大小。
基本的读写单位,类似于磁盘的页,每次都是读写一个块
每个块都会被复制到多台机器,默认复制3份
- NameNode
存储文件的metadata,运行时所有数据都保存到内存,整个HDFS可存储的文件数受限于NameNode的内存大小
一个Bloc在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之间会进行通信,复制数据块,保证数据的冗余性
hadoop入门(一)
最新推荐文章于 2024-08-21 21:56:19 发布