zoukankan      html  css  js  c++  java
  • Hadoop入门必须知道的简单知识

    Hadoop入门知识

    Hadoop构成

    Hadoop由4个主要构成部分:

    1) 基础核心:提供基础的通用的功能

    2) HDFS:分布式存储

    3) MapReduce:分布式计算

    4) YARN:资源分配(多个任务是排队执行还是同时执行)

    HDFS构成

    HDFS由3种主要的节点构成:

    1) NameNode  用来存储数据的存放位置等元数据(不存放数据)

    2) DataNode 只用来存储数据

    3) SecondaryNameNode   

    辅助NameNode运行,将NameNode产生的元数据持久化到磁盘上

    注意:生产环境中一台计算机通常只担任一种角色。测试环境中一台计算机可以担任多种角色;如伪分布模式中担任全部角色,测试集群中也常见NameNodeSecondary NameNode在同一台计算机上。

    NameNode

    进程

    对应于NameNode进程(通过jps命令可以查看java进程)。

    功能

    1) 存储数据的分布位置、数据的各种描述信息(如文件名、文件大小、文件所在目录、所有者名称、读写执行权限等)

    2) 读数据时,要先从NameNode获取文件的分布位置(在哪些DataNode上),然后再从DataNode上读数据(当然,这个过程已经由HDFS的ShellAPI实现了)

    3) 写数据时,先向NameNode提交要写的文件的信息,NameNode检查自己的记录表,以找到合适的DataNode(需要找多个,因为每个文件还要创建副本)来存储这些数据,然后指挥这些DataNode串成一串接收数据。如果某个DataNode在接收数据时罢工,则忽略掉它(忽略之后造成的副本数少于指定数量会在后期补加副本);如果所有选出的DataNode全挂掉(几率很低),则写入失败。

    4) 需要时,可以调用NameNode列出HDFS中的文件夹及文件(如执行 hdfs dfs -ls / 命令时)。

    元数据存储位置

    具体存储位置由配置文件指定,即hdfs-site.xml中的 dfs.namenode.name.dir 指定

    这个位置可以用,列表指定多个位置进行扩容

    dfs.namenode.name.dir的默认值是file://${hadoop.tmp.dir}/dfs/name

    ${hadoop.tmp.dir}的默认值是 /tmp/hadoop-${user.name}

    ${user.name}是安装Hadoop的用户名

    这些默认值在Hadoop官方网站的文档中有详细说明

    配置时,为了简单,通常会在core-site.xml中修改 ${hadoop.tmp.dir},因为这个值在各个具体配置文件中被多次引用!

    通过Hadoop的浏览站点也能找到NameNode元数据的存储位置,在Overview页上

     

    持久化的元数据

    进入NameNode存放元数据的目录,可以看到如下文件:

     

    NameNode的元数据运行时是加载在内存中的(因为这些数据需要快速查询),当NameNode关闭时,内存中的元数据又会持久化到硬盘上(上图中的fsimage文件)。在不考虑HDFS的写操作时,元数据只在内存和硬盘之间交换。

    内存元数据  《——》 fsimage

    HDFS集群是要写数据的,这时就会导致内存中的元数据和硬盘上的fsimage文件不同。内存是易失的,如意外断电或死机都会导致内存中的数据丢失,为了保证所有的数据变化都能记录下来,HDFS会将所有的操作都记录到edits文件中。这样在写数据时就会形成以下关系:

    内存元数据  ==  fsimage + edits

    SecondaryNameNode

    进程

    对应于SecondaryNameNode进程

    功能

    生产环境中NameNode会长时间运行,几乎不关闭。而内存中的元数据是在NameNode关闭时进行持久化的。这样生产环境中内存元数据与持久化元数据差异就会越来越大,会导致生成大量的edits文件,NameNode重启速度变慢。为了解决这些问题就产生了Secondary NameNode。

    SecondaryNameNode会将NameNode中产生的fsimageedits下载过来,执行合并生成新的fsimage,然后把新的fsimage再重新发回NameNode,这样NameNode中的持久化元数据就能与内存中的元数据一致或非常接近了,edits文件的数量大大减少。

  • 相关阅读:
    第十八周个人作业
    十六周个人作业
    个人作业
    第十四周总结
    第十三周周末总结
    排球计分程序说明书
    我和计算机
    排球比赛记分员
    逻辑思维怎样成为一个高手
    用户故事排球教练助手
  • 原文地址:https://www.cnblogs.com/yangxiansen/p/7860006.html
Copyright © 2011-2022 走看看