• Hadoop程序设计1


    本部分介绍hadoop简介hadoop的安装以及理解MapReduce,并运行一个MapReduce

    1 Hadoop简介                                                    

    1.1 Hadoop特点                   

    Hadoop是一个开源框架,可编写、运行分布式应用程序处理大规模数据
    方便:Hadoop运行在由商用机器组合成的集群上或者云服务上
    健壮:Hadoop可以在集群的某个节点失效的情况下,进行故障处理
    可扩展:通过增加节点,Hadoop可以线性扩展处理数据
    简单:可以快速编写代码运行在Hadoop平台上

    1.2 了解分布式系统和hadoop

    分布式系统与大型单机服务器:
    分布式系统是将许多台计算机进行组网,形成一个集群,每一台计算机相当于一个节点,而大型单机服务器配置很高的计算机。分布式系统是向外扩展(节点增加),大型单机服务器是向上扩展(配置更高)
    分布式系统的两种数据处理方式:
    一种处理方式是:处理程序在客户机上,而服务器会把(收集)的数据,分成若干小块发送给客户机进行处理,处理结果再返回给服务器
    一种处理方式是:数据存储在客户机上,而服务器把处理程序发送给客户机进行处理。
    Hadoop采用的方式是第二章,即程序向数据迁移,要运行的代码要比数据要小许多个数量级


    1.3 比较SQL数据库与Hadoop

    1.3.1用向外扩展代替向上扩展


      扩展商用数据库型机器代价昂贵,要想处理一个更大的数据库,就需要有更强处理能力的机器,这种扩展成本很高。4倍于标准PC性能的服务器的成本要远高于将4台标准PC的集群,Hadoop的目的就是利用集群来处理数据。一个hadoop集群是十至数百台服务器,如果不是开放目的hadoop没必要放在单个服务器上。


    1.3.2.用键值代替关系表


      关系数据库的基本原则是让数据按照某种模式存放在关系型数据库的表中,由于当前应用处理的数据很多时候不能适应这个模式,如文本、图片和xml文件,大型数据集往往是非形式化的,hadoop的处理数据可以是非形式化的。


    1.3.3.用函数式编程代替声明式查询SQL


      MapReduce的处理能力比SQL更强

    1.3.4.用批量处理代替在线处理


    1.4理解MapReduce             


    MapReduce是一个数据处理模型,它最大的优点是可以扩展到集群的多个节点上进行数据处理
    单词统计程序存在的问题:
    1.添加存储文件到多台计算机上
    2.编写基于磁盘的散列表使其不受内存空间限制
    3.划分来自第一阶段的中间数据
    4.洗牌这些分区数据到第二阶段合适的计算机上

    MapReduce执行程序的阶段 mapping和reducing阶段,每一个阶段均定义一个函数进行处理分别称为mapper和reducer,reducer处理来自mapper的数据,mapper进行数据的过滤和转换,reducer进行聚合


    1.5 运行一个hadoop程序     

    hadoop命令的参数

    Usage: hadoop [--config confdir] COMMAND
    where COMMAND is one of:
    namenode -format    format the DFS filesystem
    secondary namenode    run the DFS secondary namenode
    namenode    run the DFS namenode
    datanode    run a DFS datanode
    dfsadmin    run a DFS admin client
    mradmin    run a Map-Reduce admin client
    fsck    run a DFS filesystem checking utility
    fs    run a generic filesystem user client
    balancer    run a cluster balancing utility
    jobtracker    run the MapReduce job Tracker node
    pipes    run a Pipes job
    tasktracker    run a MapReduce task Tracker node
    job    manipulate MapReduce jobs
    queue    get information regarding JobQueues
    version    print the version
    jar <jar>   run a jar file
    distcp <srcurl> <desturl>   copy file or directories recursively
    archive -archiveName   NAME <src>* <dest> create a hadoop archive
    daemonlog    get/set the log level for each daemon
    or
    CLASSNAME run the class named CLASSNAME

    逐个介绍上面的命令
    hadoop jar<jar> 运行一个jar包
    如hadoop jar hadoop-*-example.jar

    运行hadoop wordcount程序

    2.初识hadoop                                                     


    2.1 hadoop构造模块           

    hadoop的运行节点有如下几种
    NameNode 名字节点
    DataNode 数据节点
    secondary namenode 次名称节点
    jobtracker 作业跟踪节点
    tasktracker 任务跟踪节点

    介绍上面的节点


    NameNode 名字节点

      NameNode是hadoop集群中最重要的节点,Hadoop分布式计算和分布式存储都采用了主/从(master/slave)结构,分布式存储系统称为hadoop文件系统,也就是HDFS系统。一个HDFS系统是由很多台计算机集群组合在一起的,NameNode位于HDFS系统主端,也就是master端,它指导从端(即slave端)的DataNode执行底层的I/O任务。NameNode是HDFS的书记员,它跟踪文件如何被分成块,而这些块在哪些节点存储,以及分布式存储系统整体运行是否正常。运行NameNode节点通常会占用大量内存和I/O资源,因此NameNode节点上通常不会有数据存储或MapReduce程序执行。
    NameNode是很重要的,这样也有一个负面影响就是,如果NameNode失效,hadoop运行将不像其他DataNode节点那样可以快速切换到其他节点上。


    DataNode  数据节点


    每一个集群的从节点都会驻留一个DataNode守护进程来执行分布式文件系统繁重工作——将HDFS数据块读取或者写入本地文件系统的实际文件中。当希望对HDFS文件进行读写时,文件被分成多块,由NameNode告知客户端每个数据块放在哪个DataNode中,客户端也会与DataNode守护进程,来处理数据块相对应的实际文件。DataNode会与其他DataNode进程进行通信,复制数据块以实现数据冗余,让每一个数据块都进行若干次如N次备份,当某个数据节点出现问题时,其他数据节点仍然保留数据块的N-1次的备份,使系统依然能够正常工作

    Secondary NameNode即SNN


    SNN节点上面也运行监测HDFS集群状态的进程,每一个集群通常有一个SNN并独占一台服务器。通常该服务器也不会运行TaskTracker或DataNode进程 ,SNN与NameNode的区别在于它不接收实时的HDFS的状态,而是与NameNode进行通信,根据集群配置的时间,定时接收HDFS元数据的快照。由于DataNode备份有HDFS数据库的数据,因此NameNode是HDFS文件系统的唯一可能失效的节点,使用SNN相当于起了NameNode的作用,可以减少停机时间并降低数据丢失风险。

    JobTracker


    JobTracker守护进程是应用程序与hadoop之间的纽带

    hadoop client 客户端是什么
    装有hadoop的是服务器,用来存数据。
    客户端就是用来访问这个hadoop文件系统的机器,它可以是装有hadoop的机器,也可以是没有装hadoop的机器。
    如果你的机器装有hadoop,那你这台机器既是服务器,又是客户端。如果你要上传数据到hadoop,那上传的就是client,同理发起mapreduce的了是client,你也可以使用hadoop SDK自己写client。

  • 相关阅读:
    使用mybatis如果类属性名和数据库中的属性名不一样取值就会为null
    学习mybatis时出现了java.io.IOException: Could not find resource EmployeeMapper.xml
    配置mybatis-config.xml出现过很诡异的现象
    mybatis学习(一)
    报错cannot be cast to javassist.util.proxy.Proxy
    列车调度
    三角形
    土豪聪要请客(stol)
    Jams倒酒(pour)
    Data
  • 原文地址:https://www.cnblogs.com/people/p/3027719.html
Copyright © 2020-2023  润新知