Hadoop入门部署最佳实践

最近因为要使用Apache下的开源项目mahout做一image thumb Hadoop入门部署最佳实践些文本数据挖掘研究,要研究Hadoop分布式平台。

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

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

Hadoop简介

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

  • Hadoop Common: Hadoop核心,The common utilities that support the other Hadoop subprojects. 原来为Hadoop Core
  • Hadoop Distributed File System (HDFS™): Hadoop分布式文件系统,A distributed file system that provides high-throughput access to application data.
  • Hadoop MapReduce:Hadoop MapReduce 框架, A software framework for distributed processing of large data sets on compute clusters.

以及其他有Apache掌管的Hadoop相关开源项目:

  • Avro™: 新的数据序列化格式与传输工具,将逐步取代Hadoop原有的IPC机制。A data serialization system.
  • Cassandra™: A scalable multi-master database with no single points of failure.
  • Chukwa™: A data collection system for managing large distributed systems.
  • HBase™: 类似Google BigTable的分布式NoSQL列数据库。A scalable, distributed database that supports structured data storage for large tables.
  • Hive™: 数据仓库工具,由Facebook贡献。A data warehouse infrastructure that provides data summarization and ad hoc querying.
  • Mahout™: A Scalable machine learning and data mining library.
  • Pig™: A high-level data-flow language and execution framework for parallel computation.
  • ZooKeeper™: 分布式锁设施,提供类似Google Chubby的功能,由Facebook贡献。A high-performance coordination service for distributed applications.

Hadoop部署

hadoop集群主要为三种模式:

  • Standalone Mode(无集群模式)
  • Pseudo-Distributed Mode(单机集群模式,又为伪分布式)
  • Fully-Distributed Mode(多机集群模式)

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

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

Hadoop实体&框架

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

更详细的参考:Hadoop in Action 的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-Distributed Mode创建Hadoop集群时,一台电脑同时完成主master和slave两种角色的任务。
  • 在Fully-Distributed Mode下,如果只有一台电脑作为master,则此电脑完成主master的任务;如果有多台电脑作为master存在,则第一台电脑完成主master的任务,其它电脑完成次master的任务。

Hadoop中的5个守护进程

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

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法国来的创建,移动,删除本地数据块等指令。

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

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

JobTracker

JobTracker deamon用来链接你的应用程序与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:HOST ALAIS&&SSH

HOST配置

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

    
    
?
1
2
3
4
5
#ip1# t1
#ip2# t2
#ip1# t3
#ip2# t4
#ip1# t5

这样,我们很容易轻松来通过别名管理节点。假定让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 -t rsa,后会在/home/vanjor/.ssh目录下生成:私钥(id_rsa),公钥(id_rsa.pub)

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

在master上将文件authorized_keys拷贝到4台slave的.ssh目录里,命令为:$scp authorized_keys t2:/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/hadoop namenode –format

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

开发&IDE环境

hadoop eclipse 插件

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

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

Hadoop eclipse项目创建

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

Hadoop maven项目创建

在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>
 
Hadoop MapReduce Framework入门,推荐程序WordCount:
http://wiki.apache.org/hadoop/WordCount

 

参考&资料推荐&下载:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值