余自庚寅年麦月误入Linux领域,先从事文件系统与IO之技,后及性能基准之术,上诸述之领域,吾虽有知晓,然未能精通,实为憾事!
全部博文(31)
分类: HADOOP
2013-08-11 14:07:43
Hadoop支持以下三种模式的Hadoop集群:
? 单机模式
相当于没有HDFS文件系统,只是支持MapReduce
? 伪分布式模式
相当于只有一个节点的集群。主从节点都位于同一主机,从MapReduce层面来看,也就是Jobtracker与TaskTracker位于同一节点;从文件系统的角度来看,也就是NameNode与DataNode位于同一节点;
? 完全分布式模式
主从节点分开的完全分布式模式。
需要安装包:
(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的其他名词的详细解释,我会在后续将陆续发出的博文中详细说明,敬请各位看官留意!
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
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 命令确认这三项设置是否成功。
注意:以下的操作全部由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 ,则说明安装成功。
在 namenode 节点 中,将 hadoop-0.20.1.tar.gz ,解压到 /home/hdfs/ 目录下即可。
在 namenode 节点的 hadoop的conf 目录下 。
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 以及访问端口号。
2.配置Hadoop数据块存储目录:
6.2.3 hdfs-site.xml 文件配置。
配置上传文件备份的份数,不能超过 datanode 节点个数,默认为 3 个。
6.2.4 mapred-site.xml文件配置
在文件中配置如下内容:
6.2.5 masters 文件配置
修改文件中的localhost为namenode节点的主机名“ namenode ”。
6.2.6 slaves 文件配置
修改文件中的localhost为datanode节点的主机名“datanode1”“datanode2”,每行一个主机名。
在 namenode 节点,依次执行命令 scp -r hadoop-0.21.0/ datanodeX:/home/hdfs/ ,将 namenode 节点的安装文件复制到每一个datanode 节点。
1.先格式化namenode节点,在Namenode节点执行如下命令:
bin/Hadoop NameNode -format
2.然后简单启动所有守护:
bin/start-all.sh
3.查看集群状态,验证安装部署Hadoop成功
Hadoop dfsadmin -report
或者通过 以下的方式产看集群状态。在集群中的任意节点上打开浏览器,分别输入网址:
(MapReduce的Web页面)
(HDFS的Web页面)
如果都能查看,说明 Hadoop 已经安装成功。
4. 停止Hadoop:
bin/stop-all.sh
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集群相对于传统的分布式集群,还具有更好的容错性和横向扩展性。如果只是考虑效率和性能,扩展性和可靠性不考虑的话,无论对应用升级还是集群扩展来说,都是不合理的。也就是说后两个特点是跟传统集群相比,是额外的很有价值的地方。
回复 | 举报