Hadoop学习

Hadoop 是什么:
    Hadoop 是一个开源的大数据框架
    Hadoop是一个分布式计算的解决方案
    Hadoop=HDFS(分布式文件系统)+MapReduce(分布式计算)
Hadoop 核心:
    HDFS 分布式文件系统:存储是大数据技术的基础
    MapReduce 编程模式:分布式计算是大数据应用的解决方案
HDFS 概念:
    数据块
        数据块是抽象块而非整个文件作为存储单元
        默认大小是64M 一般设置未128M,备份X3
        设置数据块的好处:
        (1)一个文件的大小可以大于集群任意节点磁盘的容量
        (2)容易对数据进行备份,提高容错能力
        (3)使用抽象块概念而非整个文件作为存储单元,大大简化存储子系统的设计
    NameNode
        管理文件系统的命名空间,存放文件元数据
        维护文件系统的所有文件和目录,文件与数据快之间的映射
        记录每个文件中各个块所在数据节点的信息
    DataNode
        存储并检索数据块
        向NameNode更新所存储快的列表
HDFS优缺点:
    优点:适合大文件存储,支持TB,PB级的数据存储,并有副本策略
          可以构建在廉价的机器上,并有一定的容错和恢复机制; 
          支持流式数据访问,一次写入,多次读取最高效
    缺点:不适合大量小文件存储
          不适合并发写入,不支持文件随机写入
          不支持随机读等低延时的访问方式
          
数据块的大小设置未多少最好?
    “HDFS的块比磁盘块大,其目的是为了最小化寻址开销。如果块设置得足够大,从磁盘传输数据的时间可以明显大于定位这个块开始位置所需的时间。
    这样,传输一个由多个块组成的文件的时间就取决于磁盘传输速率。”

    “我们做一个估计计算,如果寻址时间为10ms左右,而传输速率为100MB/s,为了使寻址时间仅占传输时间的1%,我们需要设置块大小为100MB左右。
    而默认的块大小实际为64MB,但是很多情况下HDFS使用128MB的块设置。以后随着新一代磁盘驱动器传输速率的提升,块的大小将被设置得更大。”

    “但是,该参数也不会设置得过大。MapReduce中的map任务通常一次处理一个块中的数据,因此,如果任务数太少(少于集群中的节点数量),作业的运行速度就会变慢。”
NameNode有哪些容错机制?
NameNode的容错:
        所有的文件访问都要通过NameNode来进行,所以NameNode至关重要。一旦NameNode发生毁坏,则整个系统都不可用。HDFS提供了两种容错机制来保证NameNode的可用性:
        1 第一种方法是把文件元数据写入NFS,备份在另一台机器上。备份操作是同步的,原子的。
        2 第二种方法是运行辅助的NameNode,不过这个NameNode并不提供服务,它只是把操作日志Merge到Metadata中,
        但是如果主NameNode失效,总是有一部分数据来不及Merge,会造成数据丢失。所以一般的做法还是把NFS中备份的数据拷贝到这个NameNode,并作为主NameNode运行。
DataNode容错:
DataNode以数据块作为容错单位,通常一个数据块会被复制到三个DataNode上去。一旦某个数据块访问失效,则去其他备份的机器上去读取。并且会把这个数据块再进行一次复制,以达到备份标准。
也就是说,DataNode不是在机器级别上进行备份,而是在数据块级别上进行备份,这样就大大节省了机器数量。

HDFS写流程:
         客户端向NameNode发送写数据请求
        分块写入DataNode,DataNode自动完成备份
        DataNode向NameNode汇报存储完成,NameNode通知客户端


HDFS读流程:
                 客户端向NameNode发送读数据请求

                NameNOde找出最近的DataNode节点信息
                客户端从DataNode分块下载文件
                
                
                
MapReduce 简介:
    MapReduce 是一种编程模型,是一种编程方式,是抽象的理论
    
    概念:
       ResourceManager:
          分配和调度资源
          启动并监控ApplicationMaster   
          监控NodeManager
        ApplicationMaster :为MR类型的数据申请资源,并分配给内部任务
                            负责数据的切分
                            监控任务的执行及容错
                            
                            
                            
        NodeManager:管理单个节点的资源
                    处理ResourceManager的命令
                    处理来自ApplicationMaster 的命令
                    
                    
Hadoop基础架构:

   MapReduce编程模型:
        输入一个大文件,通过split之后,将其分为多个分片
        每个文件分片由单独的机器去处理这就是Map方法
        将各个机器计算结果进行汇总并得到最终的结果,这就是reduce方法
        
        
        
        
MapReduce的四个阶段:
      split阶段:
      Map阶段:
        本地优化--combine
         数据经过Map输出后会进行网络混洗,经shuttle后进入reduce,在大数量的情况下可能会造成巨大的网络开销。故可以在本地先按照key进行一轮的排序和合并,在进行网络的混洗这个过程就是Combine
         在多数情况下,Combine的逻辑的Reduce的逻辑是一致的,即都是按照key进行合并数据,故可以认为Combine是对本地数据的Reducce操作。这里复用Reducer的逻辑,也可以实现自己的Combiner类


      Shuttle阶段:
      Reduce阶段:
  一个MapReduce中作业中,以下三者的数据是相等的:
  Partitioner 的数量
  Reduce的任务数量
  最终输出的文件
  在一个Reducer中,所有的数据都会按照key值升序排序,故如果part输出的文件中包含key值则这个文件一定是有序的
  在大数据量的情况下,如果只设置一个reduce任务,那么在reduce阶段,整个集群只有该节点在运行reduce任务,其他节点将被闲置,效率十分低下,故建议将reduce的任务数量设置成一个较大的值(最大72)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值