Hadoop总体概述

Hadoop是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储

Hadoop就是Google集群系统的一个开源实现,是一个项目总称。Hadoop由两部分组成,分别是分布式文件系统和分布式计算框架MapReduce。其中,分布式文件系统主要用于大规模数据的分布式存储,而MapReduce 则构建在分布式文件系统之上,对存储在分布式文件系统中的数据进行分布式计算。
在Hadoop 中,MapReduce 底层的分布式文件系统是独立模块,用户可按照约定的一套接口实现自己的分布式文件系统,然后经过简单的配置后,存储在该文件系统上的数据便
可以被 MapReduce 处理。Hadoop 默认使用的分布式文件系统是HDFS它与MapReduce 框架紧密结合。
H D F S 是一个具有高度容错性的分布式文件系统,适合部署在廉价的机器上。H D F S 能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS总体上采用了master/slave 架构,主要由以下几个组件组成:Client 、NameNode 、Secondary 和DataNode

Hadoop特点
Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。

它主要有以下几个优点:
高可靠性:Hadoop按位存储和处理数据的能力值得人们信赖。
高扩展性:Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些 集簇可以方便地扩展到数以千计的节点中。
高效性:Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
高容错性:Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
低成本:与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。

Hadoop核心配置文件

  1. 在conf/hadoop-env.sh文件中增加:
    export JAVA_HOME=/home/Java/jdk1.6
  2. 在conf/core-site.xml文件中增加如下内容:
    fs.default.name是一个描述集群中NameNode结点的URI(包括协议、主机名称、端口号),集群里面的每一台机器都需要知道NameNode的地址。DataNode结点会先在NameNode上注册,这样它们的数据才可以被使用。独立的客户端程序通过这个URI跟DataNode交互,以取得文件的块列表。
<property>
            <name>fs.default.name</name>
            <value>hdfs://localhost:9000</value>
</property>

<!—hadoop.tmp.dir 是hadoop文件系统依赖的基础配置,很多路径都依赖它。如果hdfs-site.xml中不配置namenode和datanode的存放位置,默认就放在这个路径中–>

<property>
     <name>hadoop.tmp.dir</name>
     <value>/home/hdfs/tmp</value>
</property>
  1. 在conf/hdfs-site.xml中增加如下内容:
    <!— dfs.replication -它决定着 系统里面的文件块的数据备份个数。对于一个实际的应用,它 应该被设为3(这个数字并没有上限,但更多的备份可能并没有作用,而且会占用更多的空间)。少于三个的备份,可能会影响到数据的可靠性(系统故障时,也许会造成数据丢失)–>

dfs.replication 1

<!— dfs.data.dir - 这是DataNode结点被指定要存储数据的本地文件系统路径。DataNode结点上的这个路径没有必要完全相同,因为每台机器的环境很可能是不一样的。但如果每台机器上的这个路径都是统一配置的话,会使工作变得简单一些。默认的情况下,它的值hadoop.tmp.dir, 这个路径只能用于测试的目的,因为,它很可能会丢失掉一些数据。所以,这个值最好还是被覆 盖。
dfs.name.dir - 这是NameNode结点存储hadoop文件系统信息的本地系统路径。这个值只对NameNode有效,DataNode并不需要使用到它。上面对于/temp类型的警告,同样也适用于这里。在实际应用中,它最好被覆盖掉。–>

<property>
             <name>dfs.name.dir</name>
             <value>/home/hdfs/name</value>
        </property>
       <property>
        <name>dfs.data.dir</name>
        <value>/home/hdfs/data</value>
   </property> 
      <property>  
           <name>dfs.permissions</name>
           <value>false</value>
</property>
  1. 在conf/mapred-site.xml中增加如下内容:
    <!— mapred.job.tracker -JobTracker的主机(或者IP)和端口。–>
<property>
       <name>mapred.job.tracker</name>
      <value>localhost:9001</value>
</property>

Hadoop核心进程

一般如果正常启动hadoop,我们可以在master上通过jps命令看到以下5个daemons:
[root@master ~]# jps
31144 Jps
19803 SecondaryNameNode
19994 TaskTracker
19571 NameNode
19672 DataNode
19887 JobTracker

下面依次介绍这些进程:

  1. NameNode
    它是Hadoop 中的主服务器,管理文件系统名称空间和对集群中存储的文件的访问。
  2. SecondaryNameNode
    它不是 namenode 的冗余守护进程,而是提供周期检查点和清理任务。
    出于对可扩展性和容错性等考虑,我们一般将SecondaryNameNode运行在一台非NameNode的机器上。
  3. DataNode
    它负责管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运行一个 datanode 守护进程。
  4. JobTracker和TaskTracker
    JobTracker负责调度 DataNode上的工作。每个 DataNode有一个TaskTracker,它们执行实际工作。
    JobTracker和 TaskTracker采用主-从形式,JobTracker跨DataNode分发工作,而 TaskTracker执行任务。
    JobTracker还检查请求的工作,如果一个 DataNode由于某种原因失败,JobTracker会重新调度以前的任务。
    TaskTracker是在网络环境中开始和跟踪任务的核心位置。与Jobtracker连接请求执行任务而后报告任务状态