Hadoop2.2.0分布式安装配置详解[2/3]
前言
本文主要通过对hadoop2.2.0集群配置的过程加以梳理,所有的步骤都是通过自己实际测试。文档的结构也是根据自己的实际情况而定,同时也会加入自己在实际过程遇到的问题。搭建环境过程不重要,重要点在于搭建过程中遇到的问题,解决问题的过程。
可能自己遇到的问题在一些由经验的老者手上都不是问题,但是这些问题着实让自己耽误了很长时间,最后问题解决也是费了太大心血。也通过这篇文档,表现出来,算是总结,为后者提供意见。
Hadoop2.2.0体系结构
要想理解本节内容,首先需要了解hadoop1的体系结构。这里不过多的介绍基于hadoop1的体系架构,早在之前,曾搭建hadoop1.2.1伪分布式集群,详细请看hadoop学习(一)hadoop-1.2.1伪分布式配置及遇到的问题。这里主要介绍hadoop2的体系架构。
hadoop1的核心组成是两部分,即HDFS和MapReduce。在hadoop2中变为HDFS和Yarn。
新的HDFS中的NameNode不再是只有一个了,可以有多个(目前只支持2个)。每一个都有相同的职能。
这两个NameNode的地位如何:一个是active状态的,一个是standby状态的。当 集群运行时,只有active状态的NameNode是正常工作的,standby状态的NameNode是处于待命状态的,时刻同步active状态 NameNode的数据。一旦active状态的NameNode不能工作,通过手工或者自动切换,standby状态的NameNode就可以转变为 active状态的,就可以继续工作了。这就是高可靠。
当NameNode发生故障时,他们的数据如何保持一致:在这里,2个NameNode的数据其实是实时共享的。新HDFS采用了一种共享机制,JournalNode集群或者NFS进行共享。NFS是操作系统层面的,JournalNode是hadoop层面的,我们这里使用JournalNode集群进行数据共享。
如何实现NameNode的自动切换:这就需要使用ZooKeeper集群进行选择了。HDFS集群中的两个NameNode都在ZooKeeper中注册,当active状态的NameNode出故障时,ZooKeeper能检测到这种情况,它就会自动把standby状态的NameNode切换为active状态。
HDFS Federation(HDFS联盟):联盟的出现是有原因的。我们知道 NameNode是核心节点,维护着整个HDFS中的元数据信息,那么其容量是有限的,受制于服务器的内存空间。当NameNode服务器的内存装不下数据后,那么HDFS集群就装不下数据了,寿命也就到头了。因此其扩展性是受限的。HDFS联盟指的是有多个HDFS集群同时工作,那么其容量理论上就不受限了,夸张点说就是无限扩展。你可以理解成,一个总集群中,可以虚拟出两个或两个以上的单独的小集群,各个小集群之间数据是实时共享的。因为hadoop集群中已经不在单独存在namenode和datanode的概念。当一个其中一个小集群出故障,可以启动另一个小集群中的namenode节点,继续工作。因为数据是实时共享,即使namenode或datanode一起死掉,也不会影响整个集群的正常工作。
集群节点任务安排:
这点很重要,我们事先一定要先理解,节点之间任务是如何安排的。如果事先不理解为什么是这样,后面还会遇到更多的问题。这就需要,理解journalnode、zookeeper、datanode、namenode之间关系。自己也是在这上面耽误了很长时间,希望读者这点多注意下。
6台主机。
Journalnode和zookeeper保持奇数点,这点大家要有个概念,最少不少于3个节点。这里暂不讲解。
两个namenode上面已经说明,其实在hadoop2中几点之间namenode和datanode之间的划分已经不是那么明确了。这只是采用后4台机器作为namenode。这里也存在一个问题:如果把datanode和namenode放在一起,对数据的读取IO的效率肯定会有一定的影响,不同机器之间还是要通过网线和http请求完成数据之间的共享。实际中,两者是可以在一起。但是我不知道在一起和不在一起之间的主要区别在哪儿,上面的解释只是个人意见,如果读者有更好的意见可以留言,大家一起讨论。
在集群搭建之间,各主机设置静态IP、更改主机名称、主机之间ssh互联等相关设置这里不在多讲。如有需要,请参考:hadoop学习(五)Hadoop2.2.0完全分布式安装详解(1)配置文档。
下面就进入正式的集群的安装过程:
下面所有的过程都是在hadoop1机器上完成的,之后把文件复制到其他节点中。
Zookeeper安装过程:
1、下载解压zookeeper
下载地址:http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.5/
解压到指定目录:这里目录:/home/tom/yarn/hadoop-2.2.0/app/
在hadoop目录中创建app目录。把文件解压到hadoop的app目录中,是为了以后整个项目可以整体移植。包括后面,我们会安装HBase、Hive等软件,都是解压到app的目录中。
2、修改配置文件
2.1进入zookeeper中conf目录:
拷贝命名zoo_sample.cfg 为zoo.cfg。我们一般不修改配置文件默认的示例文件,修改赋值其子文件。
编辑zoo.cfg
- tickTime=2000
- initLimit=10
- syncLimit=5
- dataDir=/home/tom/yarn/hadoop-2.2.0/app/zookeeper-3.4.5/zkdata
- dataLogDir=/home/tom/yarn/hadoop-2.2.0/app/zookeeper-3.4.5/zkdatalog
- clientPort=2181
- server.1=hadoop1:2888:3888
- server.2=hadoop2:2888:3888
- server.3=hadoop3:2888:3888
- server.4=hadoop4:2888:3888
- server.5=hadoop5:2888:3888
2.2创建zkdata和zkdatalog两个文件夹
在zookeeper的目录中,创建上述两个文件夹。进入zkdata文件夹,创建文件myid,填入1。这里写入的1,是在zoo.cfg文本中的server.1中的1。当我们把所有文件都配置完毕,我们把hadoop1中yarn目录复制到其它机器中,我们在修改每台机器中对应的myid文本,hadoop2中的myid写入2。其余节点,安照上面配置,依此写入相应的数字。Zkdatalog文件夹,是为了指定zookeeper产生日志指定相应的路径。
3、添加环境变量
本机环境变量添是在/etc/profile目录中添加的。
- export ZOOKEEPER_HOME=/home/tom/yarn/hadoop-2.2.0/app/zookeeper-3.4.5
- PATH=$ZOOKEEPER_HOME/bin:$PATH
添加ZOOKEEPER_HOME/bin目录可以在原有的PATH后面加入
:$ZOOKEEPER_HOME/bin
关于环境变量修改/etc目录下的profile文件,也可以在根目录下的.bashrc目录下添加环境变量。这两者有什么区别:.bashrc是对当前目录用户的环境变量,profile文件是对所有用户都开放的目录。当系统加载文件中,先从profile找相应的路劲,如果没有会在.bashrc文件中找对应的环境变量路径。这两者大家稍至了解。
然后 source /etc/profile
上面3个步骤就安装zookeeper完毕。然后就是测试zookeeper,这个放到后面等hadoop1上整体配置完毕,scp到其它主机上后,再一起测试。
Hadoop配置
1、下载解压hadoop2.2.0
路径:http://apache.dataguru.cn/hadoop/common/hadoop-2.2.0/
解压到:/home/tom/yarn/下。其实这一步应该在解压zookeeper之前。不再多讲。
2、修改配置文件
这里要修改配置文件一共包括6个,分别是在hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、 yarn-site.xml和slaves。
修改文件的目录地址:/home/tom/yarn/hadoop-2.2.0/etc/hadoop/
2.1文件hadoop-env.sh
添加jdk环境变量:
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45
2.2文件coer-site.xml
- <configuration>
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://cluster1</value>
- </property>
- 【这里的值指的是默认的HDFS路径。这里只有一个HDFS集群,在这里指定!该值来自于hdfs-site.xml中的配置】
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/home/tom/yarn/yarn_data/tmp</value>
- </property>
- 【这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录。用户也可以自己单独指定这三类节点的目录。这里的yarn_data/tmp目录与文件都是自己创建的】
- <property>
- <name>ha.zookeeper.quorum</name>
- <value>hadoop1:2181,hadoop2:2181,hadoop3:2181,hadoop4:2181,hadoop5:2181</value>
- </property>
- 【这里是ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点】
- </configuration><span style="font-size:14px;"><span style="font-family:宋体;"></span></span>
2.3文件hdfs-site.xml
- 重点核心文件:
- <configuration>
- <property>
- <name>dfs.replication</name>
- <value>2</value>
- </property>
- 【指定DataNode存储block的副本数量。默认值是3个,我们现在有4个DataNode,该值不大于4即可。】
- <property>
- <name>dfs.permissions</name>
- <value>false</value>
- </property>
- <property>
- <name>dfs.permissions.enabled</name>
- <value>false</value>
- </property>
- <property>
- <name>dfs.nameservices</name>
- <value>cluster1</value>
- </property>
- 【给hdfs集群起名字】
- <property>
- <name>dfs.ha.namenodes.cluster1</name>
- <value>hadoop1,hadoop2</value>
- </property>
- 【指定NameService是cluster1时的namenode有哪些,这里的值也是逻辑名称,名字随便起,相互不重复即可】
- <property>
- <name>dfs.namenode.rpc-address.cluster1.hadoop1</name>
- <value>hadoop1:9000</value>
- </property>
- 【指定hadoop101的RPC地址】
- <property>
- <name>dfs.namenode.http-address.cluster1.hadoop1</name>
- <value>hadoop1:50070</value>
- </property>
- 【指定hadoop101的http地址】
- <property>
- <name>dfs.namenode.rpc-address.cluster1.hadoop2</name>
- <value>hadoop2:9000</value>
- </property>
- <property>
- <name>dfs.namenode.http-address.cluster1.hadoop2</name>
- <value>hadoop2:50070</value>
- </property>
- <property>
- <name>dfs.namenode.servicerpc-address.cluster1.hadoop1</name>
- <value>hadoop1:53310</value>
- </property>
- <property>
- <name>dfs.namenode.servicerpc-address.cluster1.hadoop2</name>
- <value>hadoop2:53310</value>
- </property>
- <property>
- <name>dfs.ha.automatic-failover.enabled.cluster1</name>
- <value>true</value>
- </property>
- 【指定cluster1是否启动自动故障恢复,即当NameNode出故障时,是否自动切换到另一台NameNode】
- <!--指定JournalNode -->
- <property>
- <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485;hadoop4:8485;hadoop5:8485/cluster1</value>
- </property>
- 【指定cluster1的两个NameNode共享edits文件目录时,使用的JournalNode集群信息】
- <property>
- <name>dfs.client.failover.proxy.provider.cluster1</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
- </property>
- 【指定cluster1出故障时,哪个实现类负责执行故障切换】
- <property>
- <name>dfs.journalnode.edits.dir</name>
- <value>/home/tom/yarn/yarn_data/tmp/journal</value>
- </property>
- 【指定JournalNode集群在对NameNode的目录进行共享时,自己存储数据的磁盘路径。tmp路径是自己创建,journal是启动journalnode自动生成】
- <property>
- <name>dfs.ha.fencing.methods</name>
- <value>sshfence</value>
- </property>
- 【一旦需要NameNode切换,使用ssh方式进行操作】
- <property>
- <name>dfs.ha.fencing.ssh.private-key-files</name>
- <value>/home/tom/.ssh/id_rsa</value>
- </property>
- 【如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置】
- <property>
- <name>dfs.ha.fencing.ssh.connect-timeout</name>
- <value>10000</value>
- </property>
- <property>
- <name>dfs.namenode.handler.count</name>
- <value>100</value>
- </property>
- </configuration>
2.4文件mapred-site.xml
2.5文件yarn-site.xml
- <configuration>
- <property>
- <name>yarn.resourcemanager.hostname</name>
- <value>hadoop1</value>
- </property>
- 【自定义ResourceManager的地址,还是单点】
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce.shuffle</value>
- </property>
- </configuration>
2.6文件slaves
添加:这里指定哪台机器是datanode,这里指定4台机器。你甚至可以把集群所有机器都当做datanode
- hadoop3
- hadoop4
- hadoop5
- hadoop6
3、添加环境变量
环境变量的添加方法大都相同。这里给出我所有环境变量配置,大家可以根据自己的需要参考一下。
这里我们只要添加HADOOP_HOME环境变量。
- JAVA_HOME=/usr/lib/jvm/jdk1.7.0_51
- export PATH=$PATH:$JAVA_HOME/bin
- export HBASE_HOME=/home/tom/hadoop-2.2.0/app/hbase-0.94.6-cdh4.4.0
- export HIVE_HOME=/home/tom/hadoop-2.2.0/app/hive-0.12.0/
- export HADOOP_HOME=/home/tom/hadoop-2.2.0
- export PATH=$PATH:$HBASE_HOME/bin:$HIVE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
- export ZOOKEEPER_HOME=/home/tom/yarn/hadoop-2.2.0/app/zookeeper-3.4.5
- export PATH=$PATH:$ZOOKEEPER_HOME/bin
4、复制到其它节点
在hadoop的的根目录下(即:/home/tom目录下):因为我们所有的环境都装载在hadoop1的tom目录下。
执行:
- scp -r yarn hadoop2:/home/tom
- scp -r yarn hadoop3:/home/tom
- scp -r yarn hadoop4:/home/tom
- scp -r yarn hadoop5:/home/tom
- scp -r yarn hadoop6:/home/tom
注意点:
1、因为我们是把整个yarn目录复制到其他节点中,zookeeper也包含在内。事先我们定义zookeeper是在1-5台机器上部署。这里我们虽然把zookeeper拷贝到6机器中,但是我们再zookeeper配置文件中没有配置6机器的节点,在启动zookeeper的时候,6机器也不需要启动。
2、现在要做的是进入zookeeper目录下的zkdata目录,修改myid文件:各个myid内容对应zoo.cfg文件中server对应的编号。
按照上面的3个大步骤,以及在注释中自己要创建的文件夹,指定相应的路径之后,整体的hadoop环境算是搭建完毕。下面就是等测试。
看似简单的不能再简单的搭建过程,这是你弄明白之后的事情。在从hadoop1到2之间的过度,主要的变化是namenode和mapreduce到yarn架构之间的变化。就在这简单的配置过程中,加上可参考网上众多配置教程,也耽误了太长时间。不是文件难配置,而是在出现问题,不知道怎么解决,就一直卡在那儿。咨询过一些大牛,但是他们也是搪塞,没有给出真正问题的原因。其中有一个问题,在QQ群中,咨询过一个人,从他那边才得到启发,把其中的一个问题给解决掉。这也是我们遇到的问题,没有一个平台,导致在一些别人看似不是问题的问题上耽误太长时间。
上面的任务完成后。下面才是非常关键的步骤,任务的重中之重,同时也是问题出现的地方,也是卡时间最多的地方:测试整个集群的性能。
引自:http://blog.csdn.net/yczws1/article/details/23566383
Hadoop2.2.0分布式安装配置详解[2/3]的更多相关文章
- Hadoop2.2.0分布式安装配置详解[1/3]
前言 在寒假前的一段时间,开始调研Hadoop2.2.0搭建过程,当时苦于没有机器,只是在3台笔记本上,简单跑通一些数据.一转眼一两个月过去了,有些东西对已经忘了.现在实验室申请下来了,分了10台机器 ...
- Hadoop2.2.0分布式安装配置详解[3/3]
测试启动 按照下面的每一步执行,执行完一定要看输出的信息,注意warn或error或fatal的情况.因为这都是可能是问题出现的地方.出现一个问题,不解决,可能就会影响接下来的测试.这才是真正的工作量 ...
- vs2017+opencv4.0.1安装配置详解(win10)
一.说明 笔者之前已经安装过了vs2017,对应的opencv是3.4.0版本的.但现在想体验下opencv4的改变之处,所以下载了最新的opencv4.0.1. vs2017的安装请自行搜索安装,本 ...
- Eclipse IDE for C/C++ Developers安装配置详解
Eclipse IDE for C/C++ Developers安装配置详解(转) 转自:http://hi.baidu.com/ltb6w/item/986532efd712460f570f1ddc ...
- Cloudera CDH 、Impala本地通过Parcel安装配置详解及什么是Parcel
本文引用自:Cloudera CDH .Impala本地通过Parcel安装配置详解及什么是Parcelhttp://www.aboutyun.com/forum.php?mod=viewthread ...
- lvs keepalived 安装配置详解【转】
lvs keepalived 安装配置详解 张映 发表于 2012-06-20 分类目录: 服务器相关 前段时间看了一篇文章,lvs做负载均衡根F5差不多,说实话不怎么相信,因为F5没玩过,也无法比较 ...
- ubuntu14.04 server ftp 服务安装配置详解
ubuntu14.04 server ftp 服务安装配置详解 cheungmine 2016-01-27 http://wiki.ubuntu.com.cn/Vsftpd 0 安装好vsftpd服务 ...
- JDK10安装配置详解
JDK10安装配置详解 1. 下载jdk10 1.1 官网下载jdk7的软件包: 地址:http://www.oracle.com/technetwork/java/javase/dow ...
- redis cluster 集群 安装 配置 详解
redis cluster 集群 安装 配置 详解 张映 发表于 2015-05-01 分类目录: nosql 标签:cluster, redis, 安装, 配置, 集群 Redis 集群是一个提供在 ...
随机推荐
- hihocoder 1341 Constraint Checker【string】
hihocoder 1341 解释:这道题题目还是比较容易理解,就是根据输入的若干个不等式,校验后面输入的数据是否都满足前面的不等式,满足就输出Yes,只要有一个不满足就输出No.如“A<B&l ...
- poj 2155(未完成)
线段树套线段树模板题 链接:http://poj.org/problem?id=2155 题解: 代码: #include <bits/stdc++.h> using namespace ...
- python2与python3的差异
最近在学习python3,遇到过几次python3与python2的的问题,python2使用,而到了python3就不适用了,就整理了一下自己到目前为止所遇到了几个问题(以下是小白见解) 1.pyt ...
- Hdu-1358Period(KMP算法之next数组的应用)
题解:对于串pattern来说,如果0~i-1这个位置中循环,那么i%(i-next[i])==0 ,循环次数为 i/(i-next[i]),循环长度为 i-next[i] 例如对于串ababab来说 ...
- VB.NET 编程元素支持更改总结
Visual Basic 2005 更改了它支持各种编程元素的方式,主要是为了提供与公共语言运行库的互操作性.许多 Visual Basic 6.0 元素被重新命名,重新分类或与 Visual Bas ...
- Python学习——web框架
对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. WSGI(Web Server Gateway Interface)是一种规范,它定义了使用p ...
- socket 远程命令
# -*- coding: utf-8 -*- # 斌彬电脑 from socket import * import subprocess server = socket(AF_INET, SOCK_ ...
- [BZOJ2639]矩形计算
[BZOJ2639]矩形计算 题目大意: 给定一个\(n\times m(n,m\le200)\)的矩阵.\(q(q\le10^5)\)次询问,每次询问一个子矩阵中所有数字出现次数的平方和. 思路: ...
- Django拾遗--pagination、sitemap、admin、form
Django拾遗--pagination.sitemap.admin.form pagination 其实这个分页模块的原理就是根据设定的每页条数来分割queryset.查询结果/每页子项数目=页数 ...
- java学习手册
http://www.runoob.com/java/java-environment-setup.html