码迷,mamicode.com
首页 > 其他好文 > 详细

hadoop

时间:2016-07-07 11:12:51      阅读:431      评论:0      收藏:0      [点我收藏+]

标签:hadoop

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

        Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。

        Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。

hadoop主要有以下几个优点:

高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。

高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。

高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。

高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。 低成本。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。 Hadoop带有用Java语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。

hadoop的数据流程图:

技术分享

        Hadoop 由许多元素构成。其最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。HDFS(对于本文)的上一层是MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心。

Namenode #

        它管理者文件系统的Namespace。它维护着文件系统树(filesystem tree)以及文件树中所有的文件和文件夹的元数据(metadata)。管理这些信息的文件有两个,分别是Namespace 镜像文件(Namespace image)和操作日志文件(edit log),这些信息被Cache在RAM中,当然,这两个文件也会被持久化存储在本地硬盘。Namenode记录着每个文件中各个块所在的数据节点的位置信息,但是他并不持久化存储这些信息,因为这些信息会在系统启动时从数据节点重建。

技术分享

Secondary NameNode

        它是一个用来监控HDFS状态的辅助后台程序。就想NameNode一样,每个集群都有一个Secondary NameNode,并且部署在一个单独的服务器上。Secondary NameNode不同于NameNode,它不接受或者记录任何实时的数据变化,但是,它会与NameNode进行通信,以便定期地保存HDFS元数据的 快照。由于NameNode是单点的,通过Secondary NameNode的快照功能,可以将NameNode的宕机时间和数据损失降低到最小。同时,如果NameNode发生问题,Secondary NameNode可以及时地作为备用NameNode使用。

Datanode

        它是文件系统的工作节点,他们根据客户端或者是namenode的调度存储和检索数据,并且定期向namenode发送他们所存储的块(block)的列表。 集群中的每个服务器都运行一个DataNode后台程序,这个后台程序负责把HDFS数据块读写到本地的文件系统。当需要通过客户端读/写某个 数据时,先由NameNode告诉客户端去哪个DataNode进行具体的读/写操作,然后,客户端直接与这个DataNode服务器上的后台程序进行通 信,并且对相关的数据块进行读/写操作。

JobTracker

        JobTracker后台程序用来连接应用程序与Hadoop。用户代码提交到集群以后,由JobTracker决定哪个文件将被处理,并且为 不同的task分配节点。同时,它还监控所有的task,一旦某个task失败了,JobTracker就会自动重新开启这个task,在大多数情况下这 个task会被放在不用的节点上。每个Hadoop集群只有一个JobTracker,一般运行在集群的Master节点上。

TaskTracker

        它与负责存储数据的DataNode相结合,其处理结构上也遵循主/从架构。JobTracker位于主节点,统领 MapReduce工作;而TaskTrackers位于从节点,独立管理各自的task。每个TaskTracker负责独立执行具体的task,而 JobTracker负责分配task。虽然每个从节点仅有一个唯一的一个TaskTracker,但是每个TaskTracker可以产生多个java 虚拟机(JVM),用于并行处理多个map以及reduce任务。TaskTracker的一个重要职责就是与JobTracker交互。如果 JobTracker无法准时地获取TaskTracker提交的信息,JobTracker就判定TaskTracker已经崩溃,并将任务分配给其他 节点处理。

下面是hadoop的一些配置:

master端: 172.25.254.1

slave端: 172.25.254.2

slave端: 172.25.254.3

slave端: 172.25.254.4

在master端添加hadoop用户

useradd -u 900 hadoop
echo westos |passwd --stdin hadoop

安装jdk:

sh jdk-6u32-linux-x64.bin
mv jdk1.6.0_32/ /home/hadoop/java   
su - hadoop #接下来都是用hadoop用进行操作
vim .bash_profile 
    export JAVA_HOME=/home/hadoop/java
    export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
source .bash_profile

配置hadoop单节点部署:

tar zxf hadoop-1.1.2.tar.gz
ln -s hadoop-1.1.2 hadoop
cd hadoop
vim conf/hadoop-env.sh 
     export JAVA_HOME=/home/hadoop/java

创建输入文件:

mkdir input
cp conf/*.xml input/

hadoop伪分布式部署

运行官方给的示例程序:

bin/hadoop jar hadoop-examples-1.1.2.jar grep input output ‘dfs[a-z.]+‘

查看输出文件:

[hadoop@server1 hadoop]$ cat output/part-00000
1   dfsadmin

保证master到节点实现无密码登陆:

ssh-keygen
ssh-copy-id localhost #分布式部署的情况下要在slave端做,跟的是master的ip而不是localhost

配置HDFS master(即namenode)的地址和端口号:

vim conf/core-site.xml 
<configuration>
    <property>
            <name>fs.default.name</name>
                    <value>hdfs://172.25.254.1:9000</value> #指定 namenode
                            </property>
</configuration>


配置的是JobTracker的地址和端口:

vim conf/mapred-site.xml
<configuration>
    <property>
            <name>mapred.job.tracker</name>
                    <value>172.25.254.1:9001</value> #指定 jobtracker
                            </property>
</configuration>


 修改Hadoop中HDFS的配置,配置的备份方式

vim conf/hdfs-site.xml
<configuration>
 <property>
            <name>dfs.replication</name>
                    <value>1</value>    #指定文件保存的副本数
                            </property>
</configuration>

格式化一个新的分布式文件系统:

bin/hadoop namenode -format

技术分享

启动hadoop进程:

bin/start-dfs.sh
bin/start-mapred.sh

技术分享

技术分享

通过jps命令可以查看到hadoop的进程:

技术分享

我们还可以通过网络借口浏览 NameNode 和 JobTracker ,它们的地址默认为:

NameNode – http://172.25.254.1:50070/

技术分享

JobTracker – http://172.25.254.1:50030/

技术分享

将输入文件考入分布式文件系统:

bin/hadoop fs -put input test

运行官方给的示例程序:

bin/hadoop jar hadoop-examples-1.1.2.jar wordcount test output

技术分享

查看输出文件:

bin/hadoop fs -cat output/*

分布式部署:

master端的配置于伪分布式的部署基本相同只是添加了master和slave的信息

vim conf/masters
    172.25.254.1
vim conf/slaves
    172.25.254.2
    172.25.254.3

如果是接着为分布式做的要先停止haoop的进程

bin/stop-all.sh

然后添加上面的master和slave信息重新格式化分布式系统

bin/hadoop namenode -format

技术分享

在slave端要安装jdk,有与master端相同的hadoop用户,uid等保持一致,hadoop的数据配置路径也要与master端相同

之后在master端开启hadoop进程

bin/start-dfs.sh
bin/start-mapred.sh

技术分享

此次我们通过jps命令可以看到在master端开启了NameNode,SecondaryNameNode和JobTracker三个进程,而DataNode和TaskTracker则是在slave端开启了。

技术分享

技术分享

hadoop在线添加节点:

新添加节点与其他的slave端一样要安装jdk,有与master端相同的hadoop用户,uid等保持一致,hadoop的数据配置路径也要与master端相同 然后启动以下两个服务

bin/hadoop-daemon.sh start datanode
bin/hadoop-daemon.sh start tasktracker

然后在master端加入新节点的ip

vim conf/slaves
  172.25.254.2
  172.25.254.3
  172.25.254.4

hadoop在线删除节点

在master上:

vim conf/mapred-site.xml
   <property>
      <name>dfs.hosts.exclude</name>
      <value>/home/hadoop/hadoop/conf/datanode-excludes</value>
      </property>
vim /home/hadoop/hadoop/conf/datanode-excludes #添加要删除的节点ip
   172.25.254.3

在master上刷新节点:

bin/hadoop dfsadmin -refreshNodes

你可以通过以下命令查看 datanode 状态

bin/hadoop dfsadmin -report

此时可以看到新加的server4节点以及将要移除的server3节点正在做数据转移

技术分享

当server3节点状态为Decommissioned时就可以移除了



hadoop

标签:hadoop

原文地址:http://bantiaomichong.blog.51cto.com/11702501/1811692

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!