zoukankan      html  css  js  c++  java
  • [Hadoop in Action] 第2章 初识Hadoop

    • Hadoop的结构组成
    • 安装Hadoop及其3种工作模式:单机、伪分布和全分布
    • 用于监控Hadoop安装的Web工具
     
    1、Hadoop的构造模块
     
    (1)NameNode(名字节点)
         Hadoop在分布式计算和分布式存储中都采用了主/从结构。NameNode位于HDFS的主端,它指导从端的DataNode执行底层的I/O任务。NameNode是HDFS的书记员,它跟踪文件如何被分割成文件块,而这些块又被哪些节点存储,以及分布式文件系统的整体运行状态是否正常。
         运行NameNode消耗大量的内存和I/O资源。因此,为了减轻机器的负载,驻留NameNode的服务器通常不会存储用户数据或执行MapReduce程序的计算任务,就意味着NameNode服务器不会同时是DataNode或者TaskTracker。
         不过NameNode的重要性也带来了一个负面影响——hadoop集群的单点失效。对于任何其他的守护进程,如果它们所驻留的节点发生软件或硬件失效,hadoop集群很可能还会继续平稳运行,不然还可以快速重启这个节点。但这样的方法并不适用于NameNode!
     
    (2)DataNode(数据节点)
         每个集群上的从节点都会驻留一个DataNode守护进程,来执行分布式文件系统的繁重工作——将HDFS数据块读取或写入到本地文件系统的实际文件中。当希望对HDFS文件进行读写时,文件被分割为多个块,由NameNode告知客户端每个数据块驻留在哪个DataNode。客户端直接与DataNode守护进程通信,来处理与数据块相对应的本地文件。而后,DataNode会与其他DataNode进行通信,复制这些数据块以实现冗余。
         默认情况下每个数据块有3个副本,这确保了如果任何一个DataNode奔溃或者无法通过网络访问时,仍然可以读取这些文件。
         DataNode不断向NameNode报告。初始化时,每个DataNode将当前存储的数据块告知NameNode。在这个初始映射完成后,DataNode仍会不断地更新NameNode,为之提供本地修改的相关信息,同时接收指令创建、移动或删除本地磁盘上的数据块。
     
    (3)Secondary NameNode(次名节点)
       Secondary NameNode是一个用于监测HDFS集群状态的辅助守护进程。像NameNode一样,每个集群有一个SNN,通常也独占一台服务器,该服务器不会运行其他的DataNode或TaskTracker守护进程。SNN与NameNode的不同在于它不接收或记录HDFS的任务实时变化。相反,它与NameNode通信,根据集群所配置的时间间隔获取HDFS元数据的快照。
         如前所述,NameNode是Hadoo集群的单一故障点,而SNN的快照可以有助于减少停机的时间并降低数据丢失的风险。然而,NameNode的失效处理需要人工的干预,即手动地重新配置集群,将SNN用作主要的NameNode。
     
    (4)JobTracker(作业跟踪节点)
         JobTracker守护进程是应用程序和Hadoop之间的纽带。一旦提交代码到集群上,JobTracker就会确定执行计划,包括决定处理哪些文件,为不同的任务分配节点以及监控所有任务的运行。如果任务失败,JobTracker将自动重启任务,但所分配的节点可能会不同,同时受到预定义的重试次数限制。
         每个Hadoop集群只有一个JobTracker守护进程,它通常运行在服务器集群的主节点上。
     
    (5)TaskTracker(任务跟踪节点)
         与存储的守护进程一样,计算的守护进程也遵循主/从架构:JobTracker作为主节点,监测MapReduce作业的整个执行过程;同时,TaskTracker管理各个任务在每个从节点上的执行情况。
         每个TaskTracker负责执行由JobTracker分配的单项任务。虽然每个从节点上仅有一个TaskTracker,但每个TaskTracker可以生成多个JVM(Java虚拟机)来并行处理许多map或reduce任务。
         TaskTracker的一个职责是持续不断地与JobTracker通信。如果JobTracker在指定的时间内没有收到来自TaskTracker的“心跳”,它会假定TaskTracker已经奔溃了,进而重新提交相应的任务到集群中的其他节点中。
     
    典型的Hadoop集群的拓扑结构的特点是在主节点上运行NameNode和JobTracker的守护进程,并使用独立的节点运行SNN以防主节点失效。在小型集群中,SNN也可以驻留在某个从节点上,而在大型集群中,连NameNode和JobTracker都会分别驻留在两台机器上。每个从节点均驻留一个DataNode和TaskTracker,从而在存储数据的同一节点上执行任务。
     
    2、为Hadoop集群安装SSH
     
    生成密钥对:
    ssh-keygen -t rsa
     
    将公钥分布并登录验证:
    [主节点]
    scp ~/.ssh/id_rsa.pub hadoop-user@target:~/master-key
     
    [从节点]
    mkdir ~/.ssh
    chmod 700 ~/.ssh
    mv ~/master-key ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
     
    验证登录:
    ssh target
     
    3、运行Hadoop
     
    在运行Hadoop之前需要做一些配置。需要做的第一件事就是指定包括主节点在内所有节点上Java的位置,即在hadoop-env.sh中定义JAVA_HOME环境变量使之指向Java安装目录。
    Hadoop0.20之后的设置主要包含在XML配置文件中,包括core-site.xml、hdfs-site.xml、mapred-site.xml共3个文件。
    Hadoop2.x的设置新增了yarn-site.xml配置文件。
     
    (1)本地单机模式
         单机模式是Hadoop的默认模式,在这种默认模式下所有3个XML文件均为空。
         该模式主要用于开发调试MapReduce程序的应用逻辑,而不会与守护进程交互,避免引起额外的复杂性。
     
    (2)伪分布模式
         伪分布模式在“单节点集群”上运行Hadoop,其中所有的守护进程都运行在同一台机器上。
         该模式在单机模式之上增加了代码调试功能,允许检查内存使用情况、HDFS输入输出,以及其他的守护进程交互。
     

    代码清单 伪分布模式下3个配置文件的示例
     
     1 core-site.xml
     2 <property>
     3      <name>fs.default.name</name>
     4      <value>hdfs://localhost:9000</value>
     5 </property>
     6 
     7 mapred-site.xml
     8 <property>
     9      <name>mapred.job.tracker</name>
    10      <value>localhost:9001</value>
    11 </property>
    12 
    13 hdfs-site.xml
    14 <property>
    15      <name>dfs.replication</name>
    16      <value>1</value>
    17 </property>
    在core-site.xml和mapred-site.xml中分别指定了NameNode和JobTracker的主机名与端口。
    在hdfs-site.xml中指定了HDFS的默认副本数。
     

     
    还需要在文件masters中指定SNN的位置,并在文件slaves中指定从节点的位置。
    cat masters
    localhost
    cat slaves
    localhost
     
    格式化HDFS:
    hadoop namenode -format
     
     启动Hadoop:
    start-all.sh
     
    关闭Hadoop:
    stop-all.sh
     
    (3)全分布模式
     
    使用如下的服务器名称:
    • master——集群的主节点,驻留NameNode和JobTracker守护进程
    • backup——驻留SNN守护进程的节点
    • hadoop1,hadoop2,hadoop3…——集群的从节点,驻留DataNode和TaskTracker守护进程
     

    代码清单 全分布模式下3个配置文件的示例
     
     1 core-site.xml
     2 <property>
     3      <name>fs.default.name</name>
     4      <value>hdfs://master:9000</value>
     5 </property>
     6  
     7 mapred-site.xml
     8 <property>
     9      <name>mapred.job.tracker</name>
    10      <value>master:9001</value>
    11 </property>
    12  
    13 hdfs-site.xml
    14 <property>
    15      <name>dfs.replication</name>
    16      <value>3</value>
    17 </property>
     
    在core-site.xml和mapred-site.xml中分别指定了NameNode和JobTracker的主机名与端口。
    在hdfs-site.xml中指定了HDFS的默认副本数。

     
    还需要在文件masters中指定SNN的位置,并在文件slaves中指定从节点的位置。
    cat masters
    backup
    cat slaves
    hadoop1
    hadoop2
    hadoop3
    ...
     
    格式化HDFS:
    hadoop namenode -format
     
     启动Hadoop:
    start-all.sh
     
    关闭Hadoop:
    stop-all.sh
     
    4、基于Web的集群用户界面
     
    NameNode通过端口50070提供常规报告,描绘集群上HDFS的状态视图。
    JobTracker通过端口50030提供一个MapReduce作业运行时状态的近似视图。 
     
     [转载请注明] http://www.cnblogs.com/zhengrunjian/
  • 相关阅读:
    Django中获取参数(路径,查询,请求头,请求体)
    正则表达式基础、原理
    每日总结【2020/02/12】
    【家庭记账本】Android开发(初稿)
    每日总结【2020/02/11】
    【家庭记账本】Android开发日记(九)
    【家庭记账本】Android开发日记(八)
    【家庭记账本】Android开发(提交稿件)
    每日总结【2020/02/09】
    《构建之法》阅读笔记(三)
  • 原文地址:https://www.cnblogs.com/zhengrunjian/p/4989036.html
Copyright © 2011-2022 走看看