淘先锋技术网

首页 1 2 3 4 5 6 7

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,以后碰到到这个地方都跳过,默认关闭