SlideShare uma empresa Scribd logo
1 de 32
--------------- 分布式开发框架
 纽约证券交易所每天产生 1TB 的交易数据
 社交网站 facebook 的主机存储着约 10 亿张照片,占
  据 PB 级存储空间
 互联网档案馆存储着约 2PB 数据,并以每月至少
  20TB 的速度增长。
 瑞士日内瓦附近的大型强子对撞机每年产生约 15PB 的
  数据。

         这样的数据该怎么存储和读取?
Facebook 的服务器大概 1 万台,按照 oracle 的标准 10g
  版本计算大约需要 21 亿元
 H ad o o p 一个分布式系统基础架构,由 Ap ac h e 基金会开
    发。用户可以在不了解分布式底层细节的情况下,开发分
    布式程序。充分利用集群的威力高速运算和存储 。

    H ad o o p 是项目的总称,主要是由分布式存储
    ( H D FS )、分布式计算( Map Re d u c e )组成 。

   H ad o o p 程序目前只能运行在 Lin u x 系统上, win d o w 上
    运行需要安装其他插件,安装过程见《 h ad o o p 安装说
    明 .d o c x 》 。
 可扩展:不论是存储的可扩展还是计算的可扩展都是 H ad o o p
 的设计根本。

 经济:框架可以运行在任何普通的 PC 上。


 可靠:分布式文件系统的备份恢复机制以及 Map Re d u c e 的任
 务监控保证了分布式处理的可靠性。(元数据磁盘错误,心跳
 测试,副本数,快照(目前还没实现))

 高效:分布式文件系统的高效数据交互实现以及 Map Re d u c e
 结合 Lo c al D ata 处理的模式,为高效处理海量的信息作了基础
 准备。
 名称节点( N am e N o d e ):管理文件系统的命名
    空间,记录文件系统树及这个树内所有的文件和索
 在 Hadoop 的系统中,会有一台 Master ,主要负责
    引目录,同时也记录每个文件的每个块,所在的数
  NameNode 的工作以及 JobTracker 的工作。 JobTracker
    据节点。
  的主要职责就是启动、跟踪和调度各个 Slave 的任务执行。
  还会有多台 Slave ,每一台 ):文件系统的工作者,
   数据节点( D ataN o d e Slave 通常具有 DataNode 的功
  能并负责 TaskTracker 的工作。 TaskTracker 根据应用要
    存储并提供定位块的服务,并定时向名称节点发送
  求来结合本地数据执行 Map 任务以及 Reduce 任务。
    块的存储列表
   Jo b Trac ke r :协调作业的运行。
   Tas kTrac ke r :运行作业划分后的任务。
HDFS :为以流式数据访问模式存储超大文件而设计
的文件系统。
 超大文件
         指的是几百 MB ,几百 GB ,几百 TB ,甚至
 几百 PB
 流式数据访问
   HDFS 建立的思想是:一次写入、多次读取模式是
 最高 效的。
 商用硬件
    hadoop 不需要运行在昂贵并且高可靠的硬件上。
 低延迟数据访问
  H D F S 是为了达到高数据吞吐量而优化的,这是以延迟
 为代价的,对于低延迟访问,可以用 H b as e ( h ad o o p
 的子项目)。

 大量的小文件


 多用户写入,任意修改
 储存基本单元
 B lo c k( 块 ) : H D F S 基本储存单元,是个逻辑单元,和 o s 中的页
类似。

  一个文件有可能包含多个块,一个块有可以包含多个文件,由文
件的大小和块大小的参数决定。

   d fs .b lo c k.s ize 参数。 H d fs 中 B lo c k 的大小,默认 64MB ,

     如果设置大,就会有可能导致 Map 运行慢,设置小,有可能导
致 Map 个数多,所有一定要设置适当。(目前主流机器建议设置为
1 28M )
Hdfs 集群框架图
 文件写入:
b. C lie n t 向 N am e N o d e 发起文件写入的请求。

d. N am e N o d e 根据文件大小和文件块配置情况,返回给 C lie n t 它所管理部
  分 D ataN o d e 的信息。

f. C lie n t 将文件划分为多个 B lo c k, 根据 D ataN o d e 的地址信息 , 按顺序写
  入到每一个 D ataNo d e 块中。

 文件读取:
i. C lie n t 向 N am e N o d e 发起文件读取的请求。

k. N am e N o d e 返回文件存储的 D ataN o d e 的信息。

m. C lie n t 读取文件信息。
 N am e N o d e 记录着每个文件的元数据。每个文件在那个
  块中,每个数据节点包含哪些块。(不储存原始文件)

 D ataN o d e 是文件的工作者,它们存储文件并提供定位块
  的服务,并且定时向名称节点发送它们的存储块的列表
  。
    (储存原始文件)

 3. 重要参数
    d fs .re p lic atio n .m in 参数。最小为 1 ,表示每个块在
  H D F S 中的副本个数。
 B lo c k 的放置:默认不配置。一个 B lo c k 会有三份备份,一份放在
 N am e N o d e 指定的 D ataN o d e ,另一份放在与指定 D ataN o d e 非同一 Rac k
 上的 D ataN o d e ,最后一份放在与指定 D ataN o d e 同一 Rac k 上的 D ataN o d e
 上。备份无非就是为了数据安全,考虑同一 Rac k 的失败情况以及不同 Rac k
 之间数据拷贝性能问题就采用这种配置方式。

 心跳检测 D ataN o d e 的健康状况,如果发现问题就采取数据备份的方式来保
 证数据的安全性。

 数据复制(场景为 D ataN o d e 失败、需要平衡 D ataN o d e 的存储利用率和需
 要平衡 D ataN o d e 数据交互压力等情况):这里先说一下,使用 H D FS 的
 b alan c e r 命令,可以配置一个 Th re s h o ld 来平衡每一个 D ataN o d e 磁盘利用
 率。例如设置了 Th re s h o ld 为 1 0% ,那么执行 b alan c e r 命令的时候,首先
 统计所有 D ataN o d e 的磁盘利用率的均值,然后判断如果某一个 D ataN o d e
 的磁盘利用率超过这个均值 Th re s h o ld 以上,那么将会把这个 D ataN o d e 的
 b lo c k 转移到磁盘利用率低的 D ataN o d e ,这对于新节点的加入来说十分有用
 。
 数据交验:采用 CRC32 作数据交验。在文件 Block 写
  入的时候除了写入数据还会写入交验信息,在读取的
  时候需要交验后再读入。
 NameNode 是单点:如果失败的话,任务处理信息将
  会纪录在本地文件系统和远端的文件系统中。
 数据管道性的写入:当客户端要写入文件到
  DataNode 上,首先客户端读取一个 Block 然后写到
  第一个 DataNode 上,然后由第一个 DataNode 传递
  到备份的 DataNode 上,一直到所有需要写入这个
  Block 的 NataNode 都成功写入,客户端才会继续开
  始写下一个 Block 。
 安全模式:在分布式文件系统启动的时候,开始的时候会
有安全模式,当分布式文件系统处于安全模式的情况下,
文件系统中的内容不允许修改也不允许删除,直到安全模
式结束。安全模式主要是为了系统启动的时候检查各个
D ataN o d e 上数据块的有效性,同时根据策略必要的复制
或者删除部分数据块。运行期通过命令也可以进入安全模
式。在实践过程中,系统启动的时候去修改和删除文件也
会有安全模式不允许修改的出错提示,只需要等待一会儿
即可。
 Writab le 接口
 序列化 : 指的是将结构化对象转换为字节流以便网络进行传输
       或者写入存储的过程。
     反序列化 : 指的是将字节流转为一系列结构化对象的过程。
    (j   ava 定义的序列化和反序列化工具不够紧凑,高效)
 在 h ad o o p 中,常规 JAVA 数据类型是不能表示 H d fs 的数据类
  型的,
      例如 h d fs 中的字符串不是 s trin g 类表示,而是 Te xt 类,
  这些
      数据类型都必须实现一个 writab le 接口 。
 Writab le 是 H ad o o p 的核心 (Map Re d u c e 程序使用他来序列化
    键 / 值对 ) :
      vo id write (D ataO u tp u t o u t) th ro ws IO E xc e p tio n ;
      vo id re ad F ie ld s (D ataIn p u t in ) th ro ws IO Exc e p tio n ;
     分别实现对数据的序列化和反序列化。
1 . 对 Java 中的 in t 型进行封装那么就是 h ad o o p 中的 In tWritab le
   类
   在写程序时可以把 In tWritab le 可以看着是 in t 类型,它实现
    了 Writab le C o m p arab le 接口。 Writab le C o m p arab le 又是
   Writab le 、 j   ava.lan g .c o m p arab le 接口的子接口。
2.Writab le 类对所有的 Java 基本类型进行封装:
   如: b o o le an - > B o o le an Writab le ; B yte - >
   B yte Writab le
3. 我们可以自定义 Writab le 接口,来编写更复杂的结构的类。
    核心: h ad o o p 有自己一套的 I/O 机制。 I/O 类都必须实现
   Writab le 接口。
2 : get new job ID
        MapReduce   1 : run job
                                     JobClient                            JobTracker            5:initialize job
        程序                                           4:submit job

                                                 6:retrieve                            Jobtracker 节点
                客户端 JVM 3:copy                   Input splits       7:returns task
                                  Job
                                  rescouce

                                                                          TaskTracker
                                                   8:retrieve job
                                  HDFS             resources                         9:launch
                                                                               子 JVM

户端:          提交 Map Re d u c e 作业,                                        Child
          即一个 j b 。
                o                                                                    10:run
b Trac ke r : 协调作业的运行。
                                                                         MapTask 或者
s kTrac ke r :作业划分后的任务                                                   ReduceTask
         (一个 j b 对应多个 tas k,
               o
                                                                         Tasktracker 节点
           一个 tas k 对应一个
           或者多个 Map Re d u c e 线程)。
2.1 根据输入数据的大小和参数的设置把数据分成 s p lits ,
   每个 s p lit 对于一个 m ap 线程。
2.2 S p lit 中的数据作为 Map 的输入, Map 的输出一定在 Map 端。
2.3 Map 的输出到 Re d u c e 的输入的过程 (s h u ffle 过程 ) :
    第一阶段:在 m ap 端完成
                 内存 - > 排序 - > 写入磁盘 - > 复制
                 分区 - > 排序 - > 分区合并 - > 合并后分区 - > 复制
    第二阶段:在 re d u c e 端完成
                 映射到 re d u c e 端分区 - > 合并 - > 排序
2.4 Re d u c e 的输入到 Re d u c e 的输出
    最后排好序的 ke y/valu e 作为 Re d u c e 的输入,输出不一定
    是在 re d u c e 端。
 Map Re d u c e 是 H ad o o p 程序的体现。框架极其简单:首
  先是对 Map Re d u c e 程序运行前的参数配置,然后编写
  Map 类 ( 实现 Map 方法 ) ,最后是 Re d u c e 类 ( 实现
  Re d u c e 方法 ) 。
 Map Re d u c e 程序的每个细节都与设置的参数有很大的关
  系,参数设置的好,程序的效率肯定得到提高。
 Map 方法: Map (k1 ,v1 ) - > lis t(k2,v2) ,并行应用于每
  一个输入的数据集,每一次调用都会产生一个 (k2,v2) 的
  队列 。
 Re d u c e 方法: Re d u c e (k2,lis t(v2)) - > lis t(k3,v3) 。收
  集 m ap 端输出队列 lis t(k2,v2) 中有相同 ke y 的数据对,
  把它们聚集在一起,输出时形成目的数据 lis t(k3,v3) 。
优化内容          最佳实践

mapper 的数量    运行 mapper 需要多长时间?

reducer 的数量   为了达到最高性能, reducer 的数目应该
              比 reducer 槽(由内存和 tasktracker 槽决
              定)的数目稍微少一点,这将 reducer 使
              reducer 能够在同一波中完成任务。
combiner      作业能否充分利用 combiner 来减少通过
              shuffle 传输的数据
中间值的产生        对 map 输出进行压缩能使作业执行更快

自定义序列         如果正在使用自定义的 writable 对象或自
              定义的 comparator ,则必须确保已实现
              RawComparator
shuffle       Shuffle 可以对一些内存管理的参数进行调
              整,弥补性能不足。
子项目         作用
ZooKeeper   为分布式提供高一致性服务
Avro        序列化,提高分布式传输效率
HBase       分布式数据库
Hive        提供类似 oracle 的数据添加,查询,修
            改,删除方法。
Mahout      提供一些可扩展的机器学习领域经典算
            法的实现
Pig         一种用于探索大型数据集的脚本语言
参考文献
 http://hadoop.apache.org/
 Apress - Pro Hadoop

Mais conteúdo relacionado

Mais procurados

Hadoop 設定與配置
Hadoop 設定與配置Hadoop 設定與配置
Hadoop 設定與配置鳥 藍
 
Lua gc代码
Lua gc代码Lua gc代码
Lua gc代码Wei Sun
 
Hadoop 簡介 教師 許智威
Hadoop 簡介 教師 許智威Hadoop 簡介 教師 許智威
Hadoop 簡介 教師 許智威Awei Hsu
 
Java垃圾收集原理
Java垃圾收集原理Java垃圾收集原理
Java垃圾收集原理yin gong
 
网易分布式数据库平台
网易分布式数据库平台网易分布式数据库平台
网易分布式数据库平台gettyying
 
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Wei-Yu Chen
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashbackted-xu
 
給初學者的Spark教學
給初學者的Spark教學給初學者的Spark教學
給初學者的Spark教學Chen-en Lu
 
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509tidesq
 
第三届阿里中间件性能挑战赛冠军队伍答辩
第三届阿里中间件性能挑战赛冠军队伍答辩第三届阿里中间件性能挑战赛冠军队伍答辩
第三届阿里中间件性能挑战赛冠军队伍答辩宇 傅
 
realtime-twitter-search
realtime-twitter-searchrealtime-twitter-search
realtime-twitter-search亚军 汪
 
Lua 语言介绍
Lua 语言介绍Lua 语言介绍
Lua 语言介绍gowell
 
Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509
Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509
Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509tidesq
 
备库预热工具relayfetch介绍及性能测试
备库预热工具relayfetch介绍及性能测试备库预热工具relayfetch介绍及性能测试
备库预热工具relayfetch介绍及性能测试zhaiwx1987
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010Chuanying Du
 
Linux 教育訓練
Linux 教育訓練Linux 教育訓練
Linux 教育訓練Bo-Yi Wu
 

Mais procurados (19)

Hadoop 設定與配置
Hadoop 設定與配置Hadoop 設定與配置
Hadoop 設定與配置
 
Lua gc代码
Lua gc代码Lua gc代码
Lua gc代码
 
Hadoop 簡介 教師 許智威
Hadoop 簡介 教師 許智威Hadoop 簡介 教師 許智威
Hadoop 簡介 教師 許智威
 
Java垃圾收集原理
Java垃圾收集原理Java垃圾收集原理
Java垃圾收集原理
 
linux mm
linux mmlinux mm
linux mm
 
网易分布式数据库平台
网易分布式数据库平台网易分布式数据库平台
网易分布式数据库平台
 
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashback
 
給初學者的Spark教學
給初學者的Spark教學給初學者的Spark教學
給初學者的Spark教學
 
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
 
第三届阿里中间件性能挑战赛冠军队伍答辩
第三届阿里中间件性能挑战赛冠军队伍答辩第三届阿里中间件性能挑战赛冠军队伍答辩
第三届阿里中间件性能挑战赛冠军队伍答辩
 
Nio trick and trap
Nio trick and trapNio trick and trap
Nio trick and trap
 
realtime-twitter-search
realtime-twitter-searchrealtime-twitter-search
realtime-twitter-search
 
Lua 语言介绍
Lua 语言介绍Lua 语言介绍
Lua 语言介绍
 
Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509
Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509
Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509
 
备库预热工具relayfetch介绍及性能测试
备库预热工具relayfetch介绍及性能测试备库预热工具relayfetch介绍及性能测试
备库预热工具relayfetch介绍及性能测试
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010
 
使用dd命令快速复制LV
使用dd命令快速复制LV使用dd命令快速复制LV
使用dd命令快速复制LV
 
Linux 教育訓練
Linux 教育訓練Linux 教育訓練
Linux 教育訓練
 

Destaque

Brief history of impact
Brief history of impactBrief history of impact
Brief history of impactPranesh Sharma
 
Матаев презентация
Матаев презентацияМатаев презентация
Матаев презентацияMoTbKa
 
RedRoute Agency - Old Product Development
RedRoute Agency - Old Product DevelopmentRedRoute Agency - Old Product Development
RedRoute Agency - Old Product DevelopmentMssmh
 
Get up and get moving
Get up and get movingGet up and get moving
Get up and get movingfallhaze77
 
999013 634402785546867500 (1)
999013 634402785546867500 (1)999013 634402785546867500 (1)
999013 634402785546867500 (1)Pranesh Sharma
 
Матаев презентация
Матаев презентацияМатаев презентация
Матаев презентацияMoTbKa
 
Back to the basics the moment we first believed -Raphael Mndalasini
Back to the basics the moment we first believed -Raphael MndalasiniBack to the basics the moment we first believed -Raphael Mndalasini
Back to the basics the moment we first believed -Raphael MndalasiniRaphael Mndalasini
 
When my heart fails bible study notes on psalm 73
When my heart fails bible study notes on psalm 73When my heart fails bible study notes on psalm 73
When my heart fails bible study notes on psalm 73Raphael Mndalasini
 
43379925 maggi-noodles-marketing-plan
43379925 maggi-noodles-marketing-plan43379925 maggi-noodles-marketing-plan
43379925 maggi-noodles-marketing-planPranesh Sharma
 
Hpp Tolling technology shelf life and food safety presentation 2015
Hpp Tolling technology shelf life and food safety presentation 2015Hpp Tolling technology shelf life and food safety presentation 2015
Hpp Tolling technology shelf life and food safety presentation 2015Christopher Droney
 

Destaque (16)

Brief history of impact
Brief history of impactBrief history of impact
Brief history of impact
 
Sunu1
Sunu1Sunu1
Sunu1
 
Helll
HelllHelll
Helll
 
Матаев презентация
Матаев презентацияМатаев презентация
Матаев презентация
 
Final edits
Final editsFinal edits
Final edits
 
RedRoute Agency - Old Product Development
RedRoute Agency - Old Product DevelopmentRedRoute Agency - Old Product Development
RedRoute Agency - Old Product Development
 
Get up and get moving
Get up and get movingGet up and get moving
Get up and get moving
 
999013 634402785546867500 (1)
999013 634402785546867500 (1)999013 634402785546867500 (1)
999013 634402785546867500 (1)
 
Матаев презентация
Матаев презентацияМатаев презентация
Матаев презентация
 
Birsel afacan
Birsel afacanBirsel afacan
Birsel afacan
 
Final edits
Final editsFinal edits
Final edits
 
Test presentation
Test presentationTest presentation
Test presentation
 
Back to the basics the moment we first believed -Raphael Mndalasini
Back to the basics the moment we first believed -Raphael MndalasiniBack to the basics the moment we first believed -Raphael Mndalasini
Back to the basics the moment we first believed -Raphael Mndalasini
 
When my heart fails bible study notes on psalm 73
When my heart fails bible study notes on psalm 73When my heart fails bible study notes on psalm 73
When my heart fails bible study notes on psalm 73
 
43379925 maggi-noodles-marketing-plan
43379925 maggi-noodles-marketing-plan43379925 maggi-noodles-marketing-plan
43379925 maggi-noodles-marketing-plan
 
Hpp Tolling technology shelf life and food safety presentation 2015
Hpp Tolling technology shelf life and food safety presentation 2015Hpp Tolling technology shelf life and food safety presentation 2015
Hpp Tolling technology shelf life and food safety presentation 2015
 

Semelhante a Hadoop学习总结

Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)ykdsg
 
淘宝分布式数据处理实践
淘宝分布式数据处理实践淘宝分布式数据处理实践
淘宝分布式数据处理实践isnull
 
Cassandra运维之道(office2003)
Cassandra运维之道(office2003)Cassandra运维之道(office2003)
Cassandra运维之道(office2003)haiyuan ning
 
Zh tw introduction_to_map_reduce
Zh tw introduction_to_map_reduceZh tw introduction_to_map_reduce
Zh tw introduction_to_map_reduceTrendProgContest13
 
Introduction of Spark by Wang Haihua
Introduction of Spark by Wang HaihuaIntroduction of Spark by Wang Haihua
Introduction of Spark by Wang HaihuaWang Haihua
 
Hbase使用hadoop分析
Hbase使用hadoop分析Hbase使用hadoop分析
Hbase使用hadoop分析baggioss
 
Nosql及其主要产品简介
Nosql及其主要产品简介Nosql及其主要产品简介
Nosql及其主要产品简介振林 谭
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制maclean liu
 
分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocess分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocessbabel_qi
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 zhen chen
 
Cassandra的初步使用及一些简单的操作
Cassandra的初步使用及一些简单的操作Cassandra的初步使用及一些简单的操作
Cassandra的初步使用及一些简单的操作zhubin885
 
丁原:海量数据迁移方案
丁原:海量数据迁移方案丁原:海量数据迁移方案
丁原:海量数据迁移方案YANGL *
 
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理Kay Yan
 
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理airsex
 
Hadoop 0.20 程式設計
Hadoop 0.20 程式設計Hadoop 0.20 程式設計
Hadoop 0.20 程式設計Wei-Yu Chen
 
线程与并发
线程与并发线程与并发
线程与并发Tony Deng
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版Jackson Tian
 
Voldemort Intro Tangfl
Voldemort Intro TangflVoldemort Intro Tangfl
Voldemort Intro Tangflfulin tang
 
Spark调研串讲
Spark调研串讲Spark调研串讲
Spark调研串讲jie cao
 

Semelhante a Hadoop学习总结 (20)

Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
 
淘宝分布式数据处理实践
淘宝分布式数据处理实践淘宝分布式数据处理实践
淘宝分布式数据处理实践
 
Cassandra运维之道(office2003)
Cassandra运维之道(office2003)Cassandra运维之道(office2003)
Cassandra运维之道(office2003)
 
Zh tw introduction_to_map_reduce
Zh tw introduction_to_map_reduceZh tw introduction_to_map_reduce
Zh tw introduction_to_map_reduce
 
Introduction of Spark by Wang Haihua
Introduction of Spark by Wang HaihuaIntroduction of Spark by Wang Haihua
Introduction of Spark by Wang Haihua
 
Hbase使用hadoop分析
Hbase使用hadoop分析Hbase使用hadoop分析
Hbase使用hadoop分析
 
Nosql及其主要产品简介
Nosql及其主要产品简介Nosql及其主要产品简介
Nosql及其主要产品简介
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
 
分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocess分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocess
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储
 
Cassandra的初步使用及一些简单的操作
Cassandra的初步使用及一些简单的操作Cassandra的初步使用及一些简单的操作
Cassandra的初步使用及一些简单的操作
 
丁原:海量数据迁移方案
丁原:海量数据迁移方案丁原:海量数据迁移方案
丁原:海量数据迁移方案
 
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理
 
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理
 
Hadoop 0.20 程式設計
Hadoop 0.20 程式設計Hadoop 0.20 程式設計
Hadoop 0.20 程式設計
 
线程与并发
线程与并发线程与并发
线程与并发
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版
 
Voldemort Intro Tangfl
Voldemort Intro TangflVoldemort Intro Tangfl
Voldemort Intro Tangfl
 
Spark调研串讲
Spark调研串讲Spark调研串讲
Spark调研串讲
 

Hadoop学习总结

  • 2.
  • 3.  纽约证券交易所每天产生 1TB 的交易数据  社交网站 facebook 的主机存储着约 10 亿张照片,占 据 PB 级存储空间  互联网档案馆存储着约 2PB 数据,并以每月至少 20TB 的速度增长。  瑞士日内瓦附近的大型强子对撞机每年产生约 15PB 的 数据。  这样的数据该怎么存储和读取?
  • 4. Facebook 的服务器大概 1 万台,按照 oracle 的标准 10g 版本计算大约需要 21 亿元
  • 5.  H ad o o p 一个分布式系统基础架构,由 Ap ac h e 基金会开 发。用户可以在不了解分布式底层细节的情况下,开发分 布式程序。充分利用集群的威力高速运算和存储 。  H ad o o p 是项目的总称,主要是由分布式存储 ( H D FS )、分布式计算( Map Re d u c e )组成 。  H ad o o p 程序目前只能运行在 Lin u x 系统上, win d o w 上 运行需要安装其他插件,安装过程见《 h ad o o p 安装说 明 .d o c x 》 。
  • 6.  可扩展:不论是存储的可扩展还是计算的可扩展都是 H ad o o p 的设计根本。  经济:框架可以运行在任何普通的 PC 上。  可靠:分布式文件系统的备份恢复机制以及 Map Re d u c e 的任 务监控保证了分布式处理的可靠性。(元数据磁盘错误,心跳 测试,副本数,快照(目前还没实现))  高效:分布式文件系统的高效数据交互实现以及 Map Re d u c e 结合 Lo c al D ata 处理的模式,为高效处理海量的信息作了基础 准备。
  • 7.
  • 8.  名称节点( N am e N o d e ):管理文件系统的命名 空间,记录文件系统树及这个树内所有的文件和索  在 Hadoop 的系统中,会有一台 Master ,主要负责 引目录,同时也记录每个文件的每个块,所在的数 NameNode 的工作以及 JobTracker 的工作。 JobTracker 据节点。 的主要职责就是启动、跟踪和调度各个 Slave 的任务执行。 还会有多台 Slave ,每一台 ):文件系统的工作者,  数据节点( D ataN o d e Slave 通常具有 DataNode 的功 能并负责 TaskTracker 的工作。 TaskTracker 根据应用要 存储并提供定位块的服务,并定时向名称节点发送 求来结合本地数据执行 Map 任务以及 Reduce 任务。 块的存储列表  Jo b Trac ke r :协调作业的运行。  Tas kTrac ke r :运行作业划分后的任务。
  • 9.
  • 10. HDFS :为以流式数据访问模式存储超大文件而设计 的文件系统。  超大文件 指的是几百 MB ,几百 GB ,几百 TB ,甚至 几百 PB  流式数据访问 HDFS 建立的思想是:一次写入、多次读取模式是 最高 效的。  商用硬件 hadoop 不需要运行在昂贵并且高可靠的硬件上。
  • 11.  低延迟数据访问 H D F S 是为了达到高数据吞吐量而优化的,这是以延迟 为代价的,对于低延迟访问,可以用 H b as e ( h ad o o p 的子项目)。  大量的小文件  多用户写入,任意修改
  • 12.  储存基本单元 B lo c k( 块 ) : H D F S 基本储存单元,是个逻辑单元,和 o s 中的页 类似。 一个文件有可能包含多个块,一个块有可以包含多个文件,由文 件的大小和块大小的参数决定。 d fs .b lo c k.s ize 参数。 H d fs 中 B lo c k 的大小,默认 64MB , 如果设置大,就会有可能导致 Map 运行慢,设置小,有可能导 致 Map 个数多,所有一定要设置适当。(目前主流机器建议设置为 1 28M )
  • 13.
  • 14. Hdfs 集群框架图  文件写入: b. C lie n t 向 N am e N o d e 发起文件写入的请求。 d. N am e N o d e 根据文件大小和文件块配置情况,返回给 C lie n t 它所管理部 分 D ataN o d e 的信息。 f. C lie n t 将文件划分为多个 B lo c k, 根据 D ataN o d e 的地址信息 , 按顺序写 入到每一个 D ataNo d e 块中。  文件读取: i. C lie n t 向 N am e N o d e 发起文件读取的请求。 k. N am e N o d e 返回文件存储的 D ataN o d e 的信息。 m. C lie n t 读取文件信息。
  • 15.  N am e N o d e 记录着每个文件的元数据。每个文件在那个 块中,每个数据节点包含哪些块。(不储存原始文件)  D ataN o d e 是文件的工作者,它们存储文件并提供定位块 的服务,并且定时向名称节点发送它们的存储块的列表 。 (储存原始文件)  3. 重要参数  d fs .re p lic atio n .m in 参数。最小为 1 ,表示每个块在 H D F S 中的副本个数。
  • 16.
  • 17.
  • 18.  B lo c k 的放置:默认不配置。一个 B lo c k 会有三份备份,一份放在 N am e N o d e 指定的 D ataN o d e ,另一份放在与指定 D ataN o d e 非同一 Rac k 上的 D ataN o d e ,最后一份放在与指定 D ataN o d e 同一 Rac k 上的 D ataN o d e 上。备份无非就是为了数据安全,考虑同一 Rac k 的失败情况以及不同 Rac k 之间数据拷贝性能问题就采用这种配置方式。  心跳检测 D ataN o d e 的健康状况,如果发现问题就采取数据备份的方式来保 证数据的安全性。  数据复制(场景为 D ataN o d e 失败、需要平衡 D ataN o d e 的存储利用率和需 要平衡 D ataN o d e 数据交互压力等情况):这里先说一下,使用 H D FS 的 b alan c e r 命令,可以配置一个 Th re s h o ld 来平衡每一个 D ataN o d e 磁盘利用 率。例如设置了 Th re s h o ld 为 1 0% ,那么执行 b alan c e r 命令的时候,首先 统计所有 D ataN o d e 的磁盘利用率的均值,然后判断如果某一个 D ataN o d e 的磁盘利用率超过这个均值 Th re s h o ld 以上,那么将会把这个 D ataN o d e 的 b lo c k 转移到磁盘利用率低的 D ataN o d e ,这对于新节点的加入来说十分有用 。
  • 19.  数据交验:采用 CRC32 作数据交验。在文件 Block 写 入的时候除了写入数据还会写入交验信息,在读取的 时候需要交验后再读入。  NameNode 是单点:如果失败的话,任务处理信息将 会纪录在本地文件系统和远端的文件系统中。  数据管道性的写入:当客户端要写入文件到 DataNode 上,首先客户端读取一个 Block 然后写到 第一个 DataNode 上,然后由第一个 DataNode 传递 到备份的 DataNode 上,一直到所有需要写入这个 Block 的 NataNode 都成功写入,客户端才会继续开 始写下一个 Block 。
  • 20.  安全模式:在分布式文件系统启动的时候,开始的时候会 有安全模式,当分布式文件系统处于安全模式的情况下, 文件系统中的内容不允许修改也不允许删除,直到安全模 式结束。安全模式主要是为了系统启动的时候检查各个 D ataN o d e 上数据块的有效性,同时根据策略必要的复制 或者删除部分数据块。运行期通过命令也可以进入安全模 式。在实践过程中,系统启动的时候去修改和删除文件也 会有安全模式不允许修改的出错提示,只需要等待一会儿 即可。
  • 21.
  • 22.  Writab le 接口  序列化 : 指的是将结构化对象转换为字节流以便网络进行传输 或者写入存储的过程。 反序列化 : 指的是将字节流转为一系列结构化对象的过程。 (j ava 定义的序列化和反序列化工具不够紧凑,高效)  在 h ad o o p 中,常规 JAVA 数据类型是不能表示 H d fs 的数据类 型的, 例如 h d fs 中的字符串不是 s trin g 类表示,而是 Te xt 类, 这些 数据类型都必须实现一个 writab le 接口 。  Writab le 是 H ad o o p 的核心 (Map Re d u c e 程序使用他来序列化 键 / 值对 ) : vo id write (D ataO u tp u t o u t) th ro ws IO E xc e p tio n ; vo id re ad F ie ld s (D ataIn p u t in ) th ro ws IO Exc e p tio n ; 分别实现对数据的序列化和反序列化。
  • 23.
  • 24. 1 . 对 Java 中的 in t 型进行封装那么就是 h ad o o p 中的 In tWritab le 类 在写程序时可以把 In tWritab le 可以看着是 in t 类型,它实现 了 Writab le C o m p arab le 接口。 Writab le C o m p arab le 又是 Writab le 、 j ava.lan g .c o m p arab le 接口的子接口。 2.Writab le 类对所有的 Java 基本类型进行封装: 如: b o o le an - > B o o le an Writab le ; B yte - > B yte Writab le 3. 我们可以自定义 Writab le 接口,来编写更复杂的结构的类。 核心: h ad o o p 有自己一套的 I/O 机制。 I/O 类都必须实现 Writab le 接口。
  • 25.
  • 26. 2 : get new job ID MapReduce 1 : run job JobClient JobTracker 5:initialize job 程序 4:submit job 6:retrieve Jobtracker 节点 客户端 JVM 3:copy Input splits 7:returns task Job rescouce TaskTracker 8:retrieve job HDFS resources 9:launch 子 JVM 户端: 提交 Map Re d u c e 作业, Child 即一个 j b 。 o 10:run b Trac ke r : 协调作业的运行。 MapTask 或者 s kTrac ke r :作业划分后的任务 ReduceTask (一个 j b 对应多个 tas k, o Tasktracker 节点 一个 tas k 对应一个 或者多个 Map Re d u c e 线程)。
  • 27.
  • 28. 2.1 根据输入数据的大小和参数的设置把数据分成 s p lits , 每个 s p lit 对于一个 m ap 线程。 2.2 S p lit 中的数据作为 Map 的输入, Map 的输出一定在 Map 端。 2.3 Map 的输出到 Re d u c e 的输入的过程 (s h u ffle 过程 ) : 第一阶段:在 m ap 端完成 内存 - > 排序 - > 写入磁盘 - > 复制 分区 - > 排序 - > 分区合并 - > 合并后分区 - > 复制 第二阶段:在 re d u c e 端完成 映射到 re d u c e 端分区 - > 合并 - > 排序 2.4 Re d u c e 的输入到 Re d u c e 的输出 最后排好序的 ke y/valu e 作为 Re d u c e 的输入,输出不一定 是在 re d u c e 端。
  • 29.  Map Re d u c e 是 H ad o o p 程序的体现。框架极其简单:首 先是对 Map Re d u c e 程序运行前的参数配置,然后编写 Map 类 ( 实现 Map 方法 ) ,最后是 Re d u c e 类 ( 实现 Re d u c e 方法 ) 。  Map Re d u c e 程序的每个细节都与设置的参数有很大的关 系,参数设置的好,程序的效率肯定得到提高。  Map 方法: Map (k1 ,v1 ) - > lis t(k2,v2) ,并行应用于每 一个输入的数据集,每一次调用都会产生一个 (k2,v2) 的 队列 。  Re d u c e 方法: Re d u c e (k2,lis t(v2)) - > lis t(k3,v3) 。收 集 m ap 端输出队列 lis t(k2,v2) 中有相同 ke y 的数据对, 把它们聚集在一起,输出时形成目的数据 lis t(k3,v3) 。
  • 30. 优化内容 最佳实践 mapper 的数量 运行 mapper 需要多长时间? reducer 的数量 为了达到最高性能, reducer 的数目应该 比 reducer 槽(由内存和 tasktracker 槽决 定)的数目稍微少一点,这将 reducer 使 reducer 能够在同一波中完成任务。 combiner 作业能否充分利用 combiner 来减少通过 shuffle 传输的数据 中间值的产生 对 map 输出进行压缩能使作业执行更快 自定义序列 如果正在使用自定义的 writable 对象或自 定义的 comparator ,则必须确保已实现 RawComparator shuffle Shuffle 可以对一些内存管理的参数进行调 整,弥补性能不足。
  • 31. 子项目 作用 ZooKeeper 为分布式提供高一致性服务 Avro 序列化,提高分布式传输效率 HBase 分布式数据库 Hive 提供类似 oracle 的数据添加,查询,修 改,删除方法。 Mahout 提供一些可扩展的机器学习领域经典算 法的实现 Pig 一种用于探索大型数据集的脚本语言