Chinaunix首页 | 论坛 | 博客
  • 博客访问: 824406
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4136
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-21 00:52
个人简介

余自庚寅年麦月误入Linux领域,先从事文件系统与IO之技,后及性能基准之术,上诸述之领域,吾虽有知晓,然未能精通,实为憾事!

文章存档

2016年(8)

2014年(9)

2013年(14)

分类: HADOOP

2013-08-11 14:07:43

1. Hadoop的三种集群搭建方式

Hadoop支持以下三种模式的Hadoop集群:

?  单机模式

相当于没有HDFS文件系统,只是支持MapReduce

?  伪分布式模式

相当于只有一个节点的集群。主从节点都位于同一主机,从MapReduce层面来看,也就是Jobtracker与TaskTracker位于同一节点;从文件系统的角度来看,也就是NameNode与DataNode位于同一节点;

?  完全分布式模式

主从节点分开的完全分布式模式。

 

2. 安装包准备

需要安装包:

(1)    jdk-6u31-linux-x64-rpm.bin  (JDK至少要求1.5.x以上的版本)

(2)    hadoop-0.20.1.tar.gz  ( Hadoop的版本,建议选择至少此版本以上的Hadoop版本)

一般的机器上已经安装了Openssh了,因而不需要再安装SSH相关的包。这三个组件在所有的节点上都要事先安装好。

       这里使用三台机器搭建Hadoop环境。Name Node节点的主机名为namenode,Data Node节点的主机名分别为datanode1和datanode2.
        解释一下名词:
NameNode:Hadoop集群的主节点的俗称,它是HDFS文件系统的管理者,存储HDFS文件系统的元数据并管理HDFS文件系统;
DataNode:Hadoop集群的从节点的俗称,它是HDFS文件系统存储的基础。存储HDFS文件系统的实际数据;
        关于Hadoop的其他名词的详细解释,我会在后续将陆续发出的博文中详细说明,敬请各位看官留意!

3. 操作系统配置

1.     新建用户。在 HDFS 文件系统中的每个节点(包括 namenode 节点和 datanode 节点)上,新建 hdfs 用户,并保证 hdfs 用户的当前目录一致。

(1)    必须使用useradd hdfs –m 创建,否则不会再home目录下创建对应的用户目录;

(2)    Passwd hdfs命令为hdfs用户设置密码;
Hadoop一般推荐不使用Root用户搭建集群,但实际上用root搭建集群也没多大关系,我后来使用的Hadoop集群都直接使用root用户的。如果使用root用户权限来搭建Hadoop集群,那这一步就可以省略掉:

2.     HDFS 中的节点配置 在 root 用户中输入命令 yast ,使用 yast 工具。 Network Devices >Network settings >Hostname/DNS

(1)    namenode 节点。 hostname 修改为“namenode”,domian name修改为“hdfs”;

(2)    datanode 节点。 hostname 修改为“datanodeXXX”,domian name 修改为“ hdfs ”,其中“ XXX ”最好为该节点的编号。
使用其他方式修改主机名也是可以的,这里仅是其中一种方法,但是要确保修改的持久有效性,必须是通过配置文件的修改。

3.     HDFS 中的每个节点添加通讯对方主机名(可以列出包括自己在内的所有节点)。即在/etc/hosts文件中加入如下内容:

127.0.0.1             localhost

128.5.150.159   datanode1     

128.5.150.81    datanode2     

128.5.150.57    namenode        

     

4. 安装JDK

Hadoop 是基于 Java 编写的,为了运行 HDFS 文件系统,同时也为了后续的开发,需要安装 JDK,而且版本要求1.5.x以上 

1.     切换到 root 用户,并将安装包jdk-6u31-linux-x64-rpm.bin拷贝至 /usr/local/ 目录, chmod 755 使 root 用户获得执行安装包的权限。

2.     执行./ jdk-6u31-linux-x64-rpm.bin开始安装,提示输入Enter时敲回车键,安装结束。
如果使用的安装包为rpm,可以直接使用rpm命令安装,更为方便。

3.     配置 JAVA 环境在 /etc/profile 文件尾添加三项 :

export JAVA_HOME=/usr/java/jdk1.6.0_31

export CLASSPATH=/use/java/jdk1.6.0_31/lib:/usr/java/jdk1.6.0_31/jre/lib:$CLASSPATH

export PATH=/usr/java/jdk1.6.0_31/bin:/usr/java/jdk1.6.0_31/jre/bin:$PATH

4.     root 用户中, chmod 755 /etc/profile ,使普通用户获得对该文件的执行权限。在 hdfs 的登录会话中,执行“ . /etc/profile ”( “ . ”与“ / ”之间有空格)使修改生效,使用 echo 命令确认这三项设置是否成功。

5. 配置 SSH 服务

注意:以下的操作全部由hdfs用户进行,非root用户进行。如果是以root用户的权限来部署Hadoop,那么对应的用户就是root用户

namenode 节点,使用 ssh 工具生成公钥 / 私钥对,并把公钥分发给 datanode 节点,可以实现 datanode 对来自 namenode 节点网络通讯请求的认证。

1.     首先,在 namenode 节点生成公钥 / 私钥对 :

hdfs@namenode:~> ssh-keygen  -t  dsa  -P  ’’

ssh-keygen 代表生成密钥 ;-t(注意区分大小写)表示指定生成的密钥类型 ;

dsa dsa 密钥认证的意思,即密钥类型 ;-P 用于提供密语

Generating public/private rsa key pair.

Enter file in which to save the key (/home/hdfs/.ssh/id_rsa): 按回车

Enter passphrase (empty for no passphrase): 输入 hdfs 登录密码

Enter same passphrase again: 再次输入 hdfs 登录密码

Your identification has been saved in /home/hdfs/.ssh/id_rsa.

Your public key has been saved in /home/hdfs/.ssh/id_rsa.pub.

注:其中 id_dsa 存放了产生的私钥, id_dsa.pub 存放了公钥。

2.     接着,分发 namenode 节点的公钥。将 namenode 节点 id_rsa.pub 文件中的内容复制到所有节点的 /home/h/.ssh/authorized_keys 文件中。

·         namenode 节点:

o    authorized_keys 不存在。执行命令 cp id_rsa.pub authorized_keys

o    authorized_keys 存在。执行命令 cat  id_rsa.pub >> authorized_keys

·         datanode 节点:

o    在 namenode 节点中,对每一台 datanode 节点,执行命令 scp id_dsa.pub datanode205:/home/hdfs/.ssh/

o    在 datanode 节点,仿照 namenode 节点的处理方法,将 namenode 节点的公钥拷贝到 authorized_keys 文件中。

3.     在每台机器上chmod 644 authorized_keys。这一步非常关键,必须保证authorized_keys只对其所有者有读写权限,其他人不允许有写的权限,否则SSH可能不会工作的。

4.     ssh 验证。 在 namenode 节点执行 ssh datanode1. ,如果能不输入密码能登录到 datanode1 ,则说明安装成功。

6. 安装与配置Hadoop

6.1 安装Hadoop

namenode 节点 中,将 hadoop-0.20.1.tar.gz ,解压到 /home/hdfs/ 目录下即可。

6.2 namenode 节点配置

namenode 节点的 hadoopconf 目录下 。

6.2.1
   hadoop-env.sh文件配置

在文件中加入:

export JAVA_HOME=“你的Java 安装地址”,我这里是/usr/java/jdk1.6.0_31

export JAVA_HOME=/usr/java/jdk1.6.0_31

6.2.2 core-site.xml 文件配置

core-site.xml文件中的两个中添加以下两段:

1.文件系统的名称。配置 HDFS 文件系统外部访问地址,即 namenode 节点 IP 以及访问端口号。

  fs.default.name

  hdfs://namenode:9100

 

2.配置Hadoop数据块存储目录:

  hadoop.tmp.dir

  /home/hdfs/hadoopdatastore

  A base for other temporary directories.





6.2.3 hdfs-site.xml 文件配置。

配置上传文件备份的份数,不能超过 datanode 节点个数,默认为 3 个。  dfs.replication

3

Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time.



6.2.4 mapred-site.xml文件配置

在文件中配置如下内容:

    mapred.job.tracker

   namenode:9200



6.2.5 masters 文件配置

修改文件中的localhostnamenode节点的主机名“ namenode ”。


6.2.6 slaves 文件配置

修改文件中的localhostdatanode节点的主机名“datanode1”“datanode2”,每行一个主机名。

6.3 Datanode节点配置

namenode 节点,依次执行命令 scp -r hadoop-0.21.0/  datanodeX:/home/hdfs/ ,将 namenode 节点的安装文件复制到每一个datanode 节点。

7. 启动与停止 Hadoop

1.先格式化namenode节点,在Namenode节点执行如下命令:

bin/Hadoop NameNode -format

2.然后简单启动所有守护:

bin/start-all.sh

3.查看集群状态,验证安装部署Hadoop成功

Hadoop dfsadmin -report

或者通过 以下的方式产看集群状态。在集群中的任意节点上打开浏览器,分别输入网址:

(MapReduceWeb页面)

(HDFSWeb页面)

如果都能查看,说明 Hadoop 已经安装成功。

4. 停止Hadoop:

bin/stop-all.sh


阅读(7190) | 评论(4) | 转发(6) |
给主人留下些什么吧!~~

niao59292013-08-13 15:04:11

登高望远海:其实我本人对Java真的不了解,对JDK和OpenJDK也不了解。Hadoop主要是JAVA编写,OpenJDK应该是否支持部署Hadoop我本人没研究过。你说的性能和效率才是高可用集群分布式系统最应该考虑的方面,这是对传统分布式集群系统来说的。其实Hadoop集群在这两个方面表现得都很好,高吞吐量保证了性能、任务的并行性保证了效率。除此之外,Hadoop集群相对于传统的分布式集群,还具有更好的容错性和横向扩展性。如果只是考虑效率和性能,扩展性和可靠性不考虑的话,无论对应用升级还是集群扩展来说,都是不合理的。也就是说后两个特点是跟传统集群相比,是额外的很有价值的地方。

如果HADOOP必须依托在ORACLEJDK下,个人觉得是存在忧虑的

回复 | 举报

登高望远海2013-08-12 23:47:59

niao5929:不知道能不能部署在OPENJDK上呢??!!现在最需要考虑的就是JDK一定要是自由开源的,这样其实可以更好的优化JVM的性能!!性能和效率才是高可用集群分布式系统最应该考虑的

其实我本人对Java真的不了解,对JDK和OpenJDK也不了解。Hadoop主要是JAVA编写,OpenJDK应该是否支持部署Hadoop我本人没研究过。你说的性能和效率才是高可用集群分布式系统最应该考虑的方面,这是对传统分布式集群系统来说的。其实Hadoop集群在这两个方面表现得都很好,高吞吐量保证了性能、任务的并行性保证了效率。除此之外,Hadoop集群相对于传统的分布式集群,还具有更好的容错性和横向扩展性。如果只是考虑效率和性能,扩展性和可靠性不考虑的话,无论对应用升级还是集群扩展来说,都是不合理的。也就是说后两个特点是跟传统集群相比,是额外的很有价值的地方。

回复 | 举报

plqdmryd2013-08-12 16:10:45

路过看看

niao59292013-08-12 09:32:09

不知道能不能部署在OPENJDK上呢??!!现在最需要考虑的就是JDK一定要是自由开源的,这样其实可以更好的优化JVM的性能!!性能和效率才是高可用集群分布式系统最应该考虑的