您的位置:首页 > 运维架构

Hadoop入门部署最佳实践

2012-12-03 15:32 801 查看
最近因为要使用Apache下的开源项目mahout做一

些文本数据挖掘研究,要研究Hadoop分布式平台。

本文主要介绍hadoop基本入门概念,各实体含义及其作用。

并参考使用Hadoop的版本r0.20.203.0,介绍简单集群部署入门,以及结合IDE开发入门实践。

Hadoop简介

Hadoop官网介绍,主要三个子项目:

HadoopCommon:Hadoop核心,ThecommonutilitiesthatsupporttheotherHadoopsubprojects.原来为HadoopCore
HadoopDistributedFileSystem(HDFS™):Hadoop分布式文件系统,Adistributedfilesystemthatprovideshigh-throughputaccesstoapplicationdata.

HadoopMapReduce:HadoopMapReduce框架,Asoftwareframeworkfordistributedprocessingoflargedatasetsoncomputeclusters.
以及其他有Apache掌管的Hadoop相关开源项目:

Avro™:新的数据序列化格式与传输工具,将逐步取代Hadoop原有的IPC机制。Adataserializationsystem.

Cassandra™:Ascalablemulti-masterdatabasewithnosinglepointsoffailure.

Chukwa™:Adatacollectionsystemformanaginglargedistributedsystems.

HBase™:类似GoogleBigTable的分布式NoSQL列数据库。Ascalable,distributeddatabasethatsupportsstructureddatastorageforlargetables.

Hive™:数据仓库工具,由Facebook贡献。Adatawarehouseinfrastructurethatprovidesdatasummarizationandadhocquerying.

Mahout™:AScalablemachinelearninganddatamininglibrary.

Pig™:Ahigh-leveldata-flowlanguageandexecutionframeworkforparallelcomputation.

ZooKeeper™:分布式锁设施,提供类似GoogleChubby的功能,由Facebook贡献。Ahigh-performancecoordinationservicefordistributedapplications.

Hadoop部署

hadoop集群主要为三种模式:

StandaloneMode(无集群模式)
Pseudo-DistributedMode(单机集群模式,又为伪分布式)
Fully-DistributedMode(多机集群模式)
前两种可用来做快速学习研究,参考官方部署文档可很轻松上手。仅需要下载release包:http://labs.renren.com/apache-mirror/hadoop/common/,要注意,hadoop的conf/hadoop-env.sh文件中需要配置JAVA_HOME的路径,要求为1.6+版本,JVM根目录就行。另外需要手动格式化分布式文件系统:$
bin/hadoopnamenode–format

之后,启动Hadoop后,就可以通过Web界面追踪观察了:

NameNode–http://localhost:50070/
JobTracker–http://localhost:50030/

Hadoop实体&框架

部署完全分布式需要明确一些概念,参考:http://darxin.info/archive/2010/02/e046f531/

更详细的参考:HadoopinAction的2.1章节

Hadoop的核心功能有两个:HDFS与MapReduce

与HDFS相关的服务有NameNode、SecondaryNameNode及DataNode;
与MapReduce相关的服务有JobTracker和TaskTracker两种。
Hadoop集群中有两种角色:master与slave,master又分为主master与次master。其中:

主master同时提供NameNode、SecondaryNameNode及JobTracker三种服务;
次master只提供SecondaryNameNode服务;
所有slave可以提供DateNode或TaskTracker两种服务。
一个Hadoop集群由多台电脑组成,每台电脑可作为一种或多种角色存在。

当使用Pseudo-DistributedMode创建Hadoop集群时,一台电脑同时完成主master和slave两种角色的任务。
在Fully-DistributedMode下,如果只有一台电脑作为master,则此电脑完成主master的任务;如果有多台电脑作为master存在,则第一台电脑完成主master的任务,其它电脑完成次master的任务。

Hadoop中的5个守护进程

hadoop启动后会有5个守护进程:namenode、secondarynamenode、datanode、jobtracker、tasktracker,参考对HadoopinAction的第二章翻译

NameNode

NameNode就是HDFS主服务器(master),它控制着从服务器(slave)的后台程序处理低级别的I/O任务,这些从服务器就是后面要提到的DataNode.每个集群对应一个NameNode。

NameNode是HDFS的守护者;负责跟踪文件是如何分割成小数据块的,这些小块分别都存储到了那个数据节点上,以及整个分布式文件系统的健康环境。

NameNode的功能就是内存以及I/O的集中管理。

DataNode

集群中的每一个从服务器(slave)都会运行一个DataNode后台程序。此后台程序负责读写HDFS数据块到本地的文件系统。当你想通过客户端在HDFS控制下的文件块中进行某个数据的读写操作的时候,NameNode将会告诉客户端到哪个DataNode进行此操作。客户端将直接与此DataNode服务器上的deamons程序进行通信,并操作相关的数据块。而且,DataNode之间可以相互复制数据块,作为冗余备份。

DataNode会不断的向NameNode汇报运行状态。从DataNode初始化开始,每一个DataNode要向NameNode汇报每个数据存储的数据内容。数据mapping完成后,DataNode会继续通知NameNode本地的数据变化,同时也会接收NameNode法国来的创建,移动,删除本地数据块等指令。

SecondaryNameNode(在0.21.0中已经被其他节点所取代)

SecondaryNameNode(SNN)是一个用来监控HDFS状态的辅助deamon。就像NameNode一样,每一个集群都有一个SNN,并且它实际上是属于一台单独的服务器。没有一个DataNode和TaskTracker运行在统一台服务器上。SNN不同于NameNode之处在于这个进程并不接收或者记录任何实时的数据变化。但是,它会与NameNode进行通信,以便间歇的保存HDSF元数据的快照。由于NameNode是单点的,所以通过SNN的快照功能,可以将NameNode的宕机时间和数据损失降低到最小。同时,如果NameNode发生问题,SNN可以及时的作为备用NameNode使用。

JobTracker

JobTrackerdeamon用来链接你的应用程序与Hadoop。一旦你提交代码到集群之中,JobTracker决定哪个文件去被处理,并且为不同的task分配节点,并且监控所有运行的task。一旦某个task失败了,JobTracker就会自动重新开启这个task,也许这个task会在不同的节点上,具体运行情况取决于重启的预设值。每一个Hadoop集群只有一个JobTracker。它一般会作为集群的一个master节点。

TaskTracker

与存储进程相结合的,运算进程也遵循主从架构:TaskTrackers在各自的从节点上管理每个独立的task。

每个TaskTracker负责独立执行具体的task,而JobTracker负责分配task。虽然每个从节点上都有一个且唯一的一个TaskTracker,但是每个TaskTracker可以部署在多个JVMs之上,用于并行处理多个map以及reduce任务(task)。

TaskTracker的一个重要职责就是与JobTracker交互。如果JobTracker无法准时的获取到TaskTracker提交的信息,JobTracker就会假定TaskTracker已经崩溃了,JobTracker就会将任务分配给其他节点处理。

Hadoop集群实践

Task:对局域网中5台互连机器构建集群。

STEP1:HOSTALAIS&&SSH

HOST配置

方便管理,编辑5台机器的hosts文件:添加

?
这样,我们很容易轻松来通过别名管理节点。假定让t1作为master负责namenode以及jobtracker

t2,t3,t4,t5作为slave作为datanode和tasktracker

制作发布ssh密钥

Hadoop启动以后,Namenode是通过SSH(SecureShell)来启动和停止各个节点上的各种守护进程的,这就需要在节点之间执行指令的时候是不需要输入密码的方式,若我们没有设置master与slave之间的信任关系,我们每次用master访问slave是要输入密码的。

么配置信任关系的具体过程如下:具体原理见:http://hi.baidu.com/shirdrn/blog/item/523aec06fb28ae7d02088193.html

假设五台机器一致使用vanjor为hadoop使用用户,

在master机器上执行命令:$ssh-keygen-trsa,后会在/home/vanjor/.ssh目录下生成:私钥(id_rsa),公钥(id_rsa.pub)

在/home/vanjor/.ssh目录下通过命令:$cpid_rsa.pubauthorized_keys将id_rsa.pub内容复制到authorized_keys,没有则相当于新建后复制了。

在master上将文件authorized_keys拷贝到4台slave的.ssh目录里,命令为:$scpauthorized_keyst2:/home/username/.ssh/.文件权限问题,自行解决.authorized_keys的文件权限都注意通过chmod修改为644,以便远程访问。这样master在ssh到slave中就不需要通过slave口认证了。

STEP2解压配置:

Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同的用户名的帐户,在5台机器对应相同的目录下解压hadoop源文件。

配置namenode

在t1到t5均配置上相同的namenode主服务器地址:

位置:conf/core-site.xml
必须项:是
常用值:hdfs://t1:9000
说明:NameNode主服务器的地址
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://t1:9000</value>
</property>
</configuration>

配置jobtracker

在t1到t5均配置上相同的jobtracker服务器地址:

位置:conf/mapred-site.xml
必须项:是
常用值:http://t1:9001
说明:JobTracker主服务器地址及端口
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>t1:9001</value>
</property>
</configuration>

配置datanode

在四个slave中配置如下

位置:conf/hdfs-site.xml
必须项:否
默认值:0.0.0.0:50010
说明:DataNode服务的地址
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>

此处1为hdfs冗余备份数目,value为1表示hdfs中每个文件只有单独一份,没有拷贝冗余

其他的一些默认配置参考:http://darxin.info/archive/2010/02/e046f531/

配置conf下的master与slave文件,五台机器中master均为添加一行t1,slave中均为添加四行,t2到t5

最后,手工对master节点进行namenode格式化:$bin/hadoopnamenode–format

这样master中启动bin/start-all.sh就可以通过web接口看是否运行正常了,更多的可以通过追踪log文件下的日志文件信息。

开发&IDE环境

hadoopeclipse插件

Hadoop程序运行可以简单的通过如样列中的:$bin/hadoopjarhadoop-examples-*.jargrepinputoutput‘dfs[a-z.]+’,命令行方式运行,但是实际在开发过程中,每次运行前都要打包发布,过于麻烦。

实际上hadoop已经内置了hadoopeclipse的插件,可在hadoop安装目录\contrib\eclipse-plugin下找到该插件,复制到eclipse\dropins\hadoop\plugins,中即可,之后运行hadoop程序,在Runas下一级都会有一个RunonHadoop的按钮了,详细参考:http://qa.taobao.com/?p=10659。

Hadoopeclipse项目创建

可以将Hadoop目录下的lib文件夹中所有jar添加到eclipse的projectpath中,或可以直接配置

Hadoopmaven项目创建

在mvnrepository中查到:http://mvnrepository.com/artifact/org.apache.hadoop/hadoop-core/0.20.203.0在pom.xml中添加如下即可:

<dependency>
<groupId>org.apache.mahout.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>0.20.203</version>
</dependency>


HadoopMapReduceFramework入门,推荐程序WordCount:

http://wiki.apache.org/hadoop/WordCount


 

参考&资料推荐&下载:

HadoopinAction:http://ishare.iask.sina.com.cn/f/13834023.html
Hadoop-TheDefinitiveGuide:http://ishare.iask.sina.com.cn/f/13834271.htmlHadoop开发者入门专刊:http://ishare.iask.sina.com.cn/f/13617850.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Hadoop JAVA