hadoop2.2.0集群安装和配置
hadoop2.0已经发布了稳定版本了,增加了很多特性,比如HDFS HA、YARN等。
注意:apache提供的hadoop-2.2.0的安装包是在32位操作系统编译的,因为hadoop依赖一些C++的本地库,
所以如果在64位的操作上安装hadoop-2.2.0就需要重新在64操作系统上重新编译
集群规划:
主机名 IP
安装的软件 运行的进程
cloud1 192.168.61.128jdk、hadoopNameNode、DFSZKFailoverController
cloud2 192.168.61.129jdk、hadoopNameNode、DFSZKFailoverController
cloud3 192.168.61.130jdk、hadoopResourceManager
cloud4 192.168.61.131jdk、hadoop、zookeeperDataNode、NodeManager、JournalNode、
QuorumPeerMain
cloud5 192.168.61.132jdk、hadoop、zookeeperDataNode、NodeManager、JournalNode、
QuorumPeerMain
cloud6 192.168.61.133jdk、hadoop、zookeeperDataNode、NodeManager、JournalNode、
QuorumPeerMain
以上所有机器使用的用户均为cloud
说明:
在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。
Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态
,以便能够在它失败时快速进行切换。hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的
QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数
JournalNode即认为写入成功。通常配置奇数个JournalNode
这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active
NameNode挂掉了,会自动切换Standby NameNode为standby状态
修改主机名和IP的映射关系
使用的服务器是云主机(如华为用主机、阿里云主机等)映射的ip地址要填写内网地址
vi /etc/hosts
192.168.61.128 cloud1
192.168.61.129 cloud2
192.168.61.130 cloud3
192.168.61.131 cloud4
192.168.61.132 cloud5
192.168.61.133 cloud6
关闭系统防火墙
service iptables stop
chkconfig iptables off
reboot
安装jdk:
使用root用户
在usr目录下新建java目录。
将jdk上传到linux中
在/usr/java下
chmod 755 jdk-6u45-linux-i586.bin
./jdk-6u45-linux-i586.bin
mv jdk1.6.0_45 jdk
vi /etc/profile
export JAVA_HOME=/usr/java/jdk
export HADOOP_HOME=/home/cloud/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
source /etc/profile
先把hadoop的环境变量也 配置上(注意每个HADOOP_HOME的路径)
使用ssh将安装好的jdk传到其他的机器上,在再其他的机器上修改profile文件即可
以上安装步骤所有机器都要执行
安装Zookeeper集群
将zk上传到linux中安装
tar -zxvf zookeeper-3.4.5.tar.gz
修改配置
mv zookeeper-3.4.5 zookeeper
cd ~/zookeeper/conf/
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
修改:dataDir=/home/cloud/zookeeper/tmp
在最后添加:
server.1=cloud4:2888:3888
server.2=cloud5:2888:3888
server.3=cloud6:2888:3888
保存退出
然后创建一个tmp文件夹
mkdir ~/zookeeper/tmp
再创建一个空文件
touch ~/zookeeper/tmp/myid
最后向该文件写入ID
echo 1 > ~/zookeeper/tmp/myid
将配置好的zookeeper拷贝到其他节点
scp -r ~/zookeeper/ cloud5:/home/cloud/
scp -r ~/zookeeper/ cloud6:/home/cloud/
注意:修改cloud5、cloud6对应/cloud/zookeeper/tmp/myid内容
cloud5:
echo 2 > ~/zookeeper/tmp/myid
cloud6:
echo 3 > ~/zookeeper/tmp/myid
安装hadoop集群(先在cloud1上安装完毕之后再通过ssh传递到其他机器):
tar -zxvf hadoop-2.2.0-64bit.tar.gz
mv hadoop-2.2.0 hadoop
cd ~/hadoop/etc/hadoop
修改hadoop-env.sh
加入
export JAVA_HOME=/usr/java/jdk
修改core-site.xml
<configuration>
<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/cloud/hadoop/tmp</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>cloud4:2181,cloud5:2181,cloud6:2181</value>
</property>
</configuration>
修改hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>cloud1:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>cloud1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>cloud2:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>cloud2:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://cloud4:8485;cloud5:8485;cloud6:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/cloud/hadoop/journal</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/cloud/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
修改mapred-site.xml
<configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改yarn-site.xml
<configuration>
<!-- 指定resourcemanager地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>cloud3</value>
</property>
<!-- 指定nodemanager启动时加载server的方式为shuffle server -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
修改slaves
cloud4
cloud5
cloud6
slaves是指定子节点的位置,因为要在cloud1上启动HDFS、
在cloud3启动yarn,所以cloud1上的slaves文件指定的是datanode的位置,cloud3上的slaves文件指定的
是nodemanager的位置
配置ssh免密码登陆
在每台机器上都执行下列命令
chmod -R 755 /home/cloud
mkdir ~/.ssh
ssh-keygen -t rsa
ssh-keygen -t dsa
之后在cloud1上收集各个机器的公钥
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
ssh cloud2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh cloud3 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh cloud4 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh cloud5 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh cloud6 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
将公钥拷贝到其他节节点
scp ~/.ssh/authorized_keys cloud2:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys cloud3:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys cloud4:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys cloud5:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys cloud6:~/.ssh/authorized_keys
在每台机器上都执行(很重要,注意配置ssh的时候要使用cloud用户来配置)
chmod -R 700 ~/.ssh
将配置好的hadoop拷贝到其他节点
scp -r ~/hadoop/ cloud2:~/
scp -r ~/hadoop/ cloud3:~/
scp -r ~/hadoop/ cloud4:~/
scp -r ~/hadoop/ cloud5:~/
scp -r ~/hadoop/ cloud6:~/
启动zookeeper集群(分别在cloud4、cloud5、cloud6上启动zk)
cd ~/zookeeper/bin/
./zkServer.sh start
#查看状态:一个leader,两个follower
./zkServer.sh status
启动journalnode(在cloud1上启动所有journalnode,注意:是调用的hadoop-daemons.sh这个脚本,注意是复数s的那个脚本)
cd ~/hadoop
~/hadoop/sbin/hadoop-daemons.sh start journalnode
#运行jps命令检验,cloud4、cloud5、cloud6上多了JournalNode进程
格式化HDFS(在bin目录下)
#在cloud1上执行命令:
./hdfs namenode -format
#格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里
我配置的是~/hadoop/tmp,然后将~/hadoop/tmp拷贝到cloud2的~/hadoop/下。
scp -r ~/hadoop/tmp/ cloud2:~/hadoop/
格式化ZK(在cloud1上执行即可,在bin目录下)
./hdfs zkfc -formatZK
启动HDFS(在cloud1上执行)
~/hadoop/sbin/start-dfs.sh
启动YARN(#####注意#####:是在cloud3上执行start-yarn.sh,把namenode和
resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就
要分别在不同的机器上启动)
~/hadoop/sbin/start-yarn.sh
到此,hadoop2.2.0配置完毕,可以统计浏览器访问:
http://192.168.61.128:50070
NameNode 'cloud1:9000' (active)
http://192.168.61.129:50070
NameNode 'cloud2:9000' (standby)
验证HDFS HA
首先向hdfs上传一个文件
hadoop fs -put /etc/profile /profile
hadoop fs -ls /
然后再kill掉active的NameNode
kill -9 <pid of NN>
通过浏览器访问:http://192.168.1.202:50070
NameNode 'cloud2:9000' (active)
这个时候cloud02上的NameNode变成了active
在执行命令:
hadoop fs -ls /
-rw-r--r-- 3 root supergroup 1926 2014-02-06 15:36 /profile
刚才上传的文件依然存在!!!
手动启动那个挂掉的NameNode
sbin/hadoop-daemon.sh start namenode
通过浏览器访问:http://192.168.1.201:50070
NameNode 'cloud1:9000' (standby)
验证YARN:
运行一下hadoop提供的demo中的WordCount程序:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar
wordcount /profile /out
OK,大功告成!!!
hadoop2.2.0集群安装和配置的更多相关文章
- hadoop-2.6.0集群开发环境配置
		
hadoop-2.6.0集群开发环境配置 一.环境说明 1.1安装环境说明 本例中,操作系统为CentOS 6.6, JDK版本号为JDK 1.7,Hadoop版本号为Apache Hadoop 2. ...
 - Linux基于Hadoop2.8.0集群安装配置Hive2.1.1及基础操作
		
前言 安装Apache Hive前提是要先安装hadoop集群,并且hive只需要在hadoop的namenode节点集群里安装即可,安装前需保证Hadoop已启(动文中用到了hadoop的hdfs命 ...
 - CentOS下Hadoop-2.2.0集群安装配置
		
对于一个刚开始学习Spark的人来说,当然首先需要把环境搭建好,再跑几个例子,目前比较流行的部署是Spark On Yarn,作为新手,我觉得有必要走一遍Hadoop的集群安装配置,而不仅仅停留在本地 ...
 - hadoop2.20.0集群安装教程
		
一.安装的需要软件及集群描述 1.软件: Vmware9.0:虚拟机 Hadoop2.2.0:Apache官网原版稳定版本 JDK1.7.0_07:Oracle官网版本 Ubuntu12.04LTS: ...
 - hadoop2.2.0集群安装
		
位说明. 位).Jdk使用的1.7(1.6也可以).网络配置好,相互可以ping通,java环境安装完毕. 第一部分 Hadoop 2.2 下载 位). 下载地址:http://apache.cl ...
 - Hadoop-2.6.0 集群的 安装与配置
		
1. 配置节点bonnie1 hadoop环境 (1) 下载hadoop- 2.6.0 并解压缩 [root@bonnie1 ~]# wget http://apache.fayea.com/had ...
 - Ubuntu12.04-x64编译Hadoop2.2.0和安装Hadoop2.2.0集群
		
本文Blog地址:http://www.cnblogs.com/fesh/p/3766656.html 本文对Hadoop-2.2.0源码进行重新编译(64位操作系统下不重新编译会有版本问题) ...
 - 在Hadoop-2.2.0集群上安装 Hive-0.13.1 with MySQL
		
fesh个人实践,欢迎经验交流!本文Blog地址:http://www.cnblogs.com/fesh/p/3872872.html 软件环境 操作系统:Ubuntu14.04 JDK版本:jdk1 ...
 - hadoop 2.2.0集群安装详细步骤(简单配置,无HA)
		
安装环境操作系统:CentOS 6.5 i586(32位)java环境:JDK 1.7.0.51hadoop版本:社区版本2.2.0,hadoop-2.2.0.tar.gz 安装准备设置集群的host ...
 
随机推荐
- twitter api取出的日期格式化
			
import pickle import datetime crate_time_list=[] twitter_id_list=[] twitter_url_list=[] twitter_text ...
 - SSH的简单入门体验(Struts2.1+Spring3.1+Hibernate4.1)- 查询系统(下)
			
我们继续吧,SSH最大的优点就是实现的系统的松耦合,能够将后台和前台有机的分离开来. 一.目录结构 一个好的程序要有一个好的开始.我们先来看看整个目录结构吧 主要的是三层架构概念,或者说是mvc的概念 ...
 - jQuery获取标签中的元素
			
获取双标签之间的内容 在JavaScript中,获取双标签之间的内容是这样的: <!DOCTYPE html> <html lang="en"> <h ...
 - html中给元素添加背景图片或者gif动图
			
添加背景图片有四种常用的方式,分别是: repeat 完全平铺 repeat-x 横向平铺 repeat-y 纵向平铺 no-repeat 不平铺 使用示例: <!DOC ...
 - Java 5大内存区域和对象的创建过程
			
1.Java运行时数据区 方法区,堆线程共享.虚拟机栈,本地方法栈和程序计数器线程私有. 2.程序计数器(PC计数器) 占用较小的一块内存空间,当执行Java方法时记录正在执行的虚拟机字节码指令地址, ...
 - 关系和非关系型数据库区别(以及oracle和mysql的区别)
			
一.关系型数据库 关系型数据库,是指采用了关系模型来组织数据的数据库. 关系模型是在1970年由IBM的研究员E.F.Codd博士首先提出的,在之后的几十年中,关系模型的概念得到了充分的发展并逐 ...
 - [BZOJ1475]方格取数 网络流 最小割
			
1475: 方格取数 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1025 Solved: 512[Submit][Status][Discuss] ...
 - STL模板整理 priority_queue
			
priority_queue 优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序,每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来 ...
 - 洛谷  P3371 【模板】单源最短路径 【链式前向星+SPFA】
			
题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含三个整数N.M.S,分别表示点的个数.有向边的个数.出发点的编号. 接下来M行每行包含三 ...
 - CentOS5.5下直接安装MySQL5.6
			
1.安装平台:CentOS5.5 2.由于从MySQL5.0升到MySQL5.6出现重大问题,为了不影响进度,暂时先直接安装MySQL5.6 2.1首先确认yum源,这里使用http://repo.m ...