Hadoop
狭义的Hadoop VS 广义的Hadoop
-
广义的Hadoop:指的是Hadoop生态系统,Hadoop生态系统是一个很庞大的概念,hadoop是其中最重要最基础的一个部分,生态系统中每一子系统只解决某一个特定的问题域(甚至可能更窄),不搞统一型的全能系统,而是小而精的多个小系统;
Hive:数据仓库
R:数据分析
Mahout:机器学习库
pig:脚本语言,跟Hive类似
Oozie:工作流引擎,管理作业执行顺序
Zookeeper:用户无感知,主节点挂掉选择从节点作为主的
Flume:日志收集框架
Sqoop:数据交换框架,例如:关系型数据库与HDFS之间的数据交换
Hbase : 海量数据中的查询,相当于分布式文件系统中的数据库
Hadoop生态系统的特点
-
开源、社区活跃
-
囊括了大数据处理的方方面面
-
成熟的生态圈
HDFS介绍
全称:Hadoop Distributed File System
中文:Hadoop分布式文件管理系统
用Java编写的开源系统,能够运行在大规模的计算平台(集群)上的分布系统
起源于Lucene项目,起初为其子项目Nutch搜索引擎里面的一个模块
受Google三篇论文的启发:MapReduce、GFS、Bigtable
作为Hadoop的核心技术之一,HDFS是分布式计算中数据存储管理的基础。它所具有的高容错、高可靠性、高可扩展性、高获得性、高吞吐率等特征为海量数据提供了不怕故障的存储,为超大数据集的应用处理带来了许多便利。
HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为ApacheNutch搜索引擎项目的基础机构而开发的。HDFS是Apache Hadoop Core项目的一部分。
HDFS的可靠性:
--冗余副本策略(可在hdfs-site.xml中设置复制因子指定副本数量,每次DataNode启动都向Namenode汇报hdfs数据块和本地文件的对应关系)
--机架策略(副本尽量分布不在同一个机架的节点中,是人为通过py脚本设置的)
--心跳机制(Namenode周期性从DataNode接收心跳信号和块报告,并按情况做修复,默认是3秒可配置)
--安全模式(namenode启动时会先经过一个“安全模式”阶段,要一定比例的数据的副本数达标才离开,也可以通过命令进入和退出这个模式)
HDFS的可靠性表现在:
--校验和(取数据时查看校验和是否相等)
--回收站(删除文件放入回收站,就放在当前目录.trash溢出即恢复,定期清理)
--元数据保护(Namenode的映像文件和事务日志元数据多副本)
--快照机制(闪回)
Block的说明
--默认大小为128M
--当Namenode读取block的时候,它会计算校验和,如果计算后的校验和,与block创建时值不一样,说明该block已经损坏
--Client读取其它DataNode上的block,NameNode标记已经损坏,然后复制block达到预期设置的文件备份数
--DataNode在其文件创建三周后验证其校验和
--设置一个Block 128MB。如果上传文件小于该值,仍然会占用一个Block的命名空间(NameNode metadata),但是物理存储不会占用128MB的空间
--Block大小和副本数有Client端上传到HDFS时设置,其中副本数可以变更,Block是不可以上传后再变更的
什么是MapReduce
-
源于Google的MapReduce论文(2004年12月)
-
Hadoop的MapReduce是Google论文的开源实现
-
MapReduce优点: 海量数据离线处理&易开发
-
MapReduce缺点: 实时流式计算
MapReduce编程模型
-
MapReduce分而治之的思想
-
数钱实例:一堆钞票,各种面值分别是多少
-
单点策略
-
一个人数所有的钞票,数出各种面值有多少张
-
-
分治策略
-
每个人分得一堆钞票,数出各种面值有多少张
-
汇总,每个人负责统计一种面值
-
-
解决数据可以切割进行计算的应用
-
-
-
MapReduce编程分Map和Reduce阶段
-
将作业拆分成Map阶段和Reduce阶段
-
Map阶段 Map Tasks 分:把复杂的问题分解为若干"简单的任务"
-
Reduce阶段: Reduce Tasks 合:reduce
-
MapReduce工作过程
input data:输入数据
InputFormat:对数据进行切分,格式化处理
map:将前面切分的数据做map处理(将数据进行分类,输出(k,v)键值对数据)
shuffle&sort:将相同的数据放在一起,并对数据进行排序处理
reduce:将map输出的数据进行hash计算,对每个map数据进行统计计算
OutputFormat:格式化输出数据
MapReduce Job调度机制
---缺省为先入先出作业队列调度
---支持公平调度器
公平,平等分配资源,小任务不会让你饿死,大任务也不能霸道
---支持容量调度器
建立多条管道,不同任务在不同管道上运行,享用这条管道的资源
MapReduce内部任务优化机制
--推测式执行 ,如果有任务一直没有完成,则再启动一个任务,先完成的kill另外一个,缺省打开
--重用JVM,可设置单个JVM上运行的最大任务数,默认1
--忽略模式,任务在某位置读取失败2次,则会报告jobtracker,以后碰到到这个地方都跳过,默认关闭