Hadoop之完全分布式安装

Posted wanmeilingdu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop之完全分布式安装相关的知识,希望对你有一定的参考价值。

一、基础环境准备

a. 配置好各个机器的IP地址等,我这边是三台虚拟机,列表如下:

   master  192.168.149.131  centos6.5 x64
   slave1  192.168.149.132  centos6.5 x64
   slave2  192.168.149.133  centos6.5 x64

b. 在每台机器上的/etc/hosts文件后面追加下图的ip映射,如下:

   192.168.149.131 master
   192.168.149.132 slave1
   192.168.149.133 slave2

c. 在每台机器上关闭Linux系统防火墙
service iptables stop #关闭防火墙服务,重启后失效
chkconfig iptables off #关闭开机启动防火墙服务,重启后生效
d. 在每台机器上安装jdk并配置环境变量
本人使用的是下载好的rpm包(jdk-7u67-linux-x64.rpm),执行命令安装jdk:rpm -ivh jdk-7u67-linux-x64.rpm;默认安装到/usr/java/目录下,然后命令修改当前用户的环境变量:vi ~/.bash_profile ,修改结果如下:

JAVA_HOME=/usr/java/jdk1.7.0_67/
PATH=$PATH:$HOME/bin:$PATH:$JAVA_HOME/bin
export PATH

执行source命令,使配置的环境变量生效:

source ~/.bash_profile

二、SSH免密码登录

使用命令生成ssh的公钥和私钥,并拷贝到其他机器上,例如在master节点上,依次执行以下命令:

ssh-keygen -t rsa      #生成公钥私钥,需要敲四下回车键
ssh-copy-id -i master  #将本机的公钥复制到远程机器的authorized_keys文件中,需要输入yes确认和master的登录密码
ssh-copy-id -i slave1  #将本机的公钥复制到远程机器的authorized_keys文件中,需要输入yes确认和slave1的登录密码
ssh-copy-id -i slave2  #将本机的公钥复制到远程机器的authorized_keys文件中,需要输入yes确认和slave2的登录密码

验证配置是否成功:

[root@master ~]# ssh slave1
Last login: Thu May 19 04:36:01 2016 from 192.168.149.1
[root@slave1 ~]# exit
logout
Connection to slave1 closed.

然后在slave1和slave2机器上依次执行如上的命令,注意细节的修改哦!!!

三、安装Zookeeper

a. 这里使用的zookeeper是3.4.6,首先解压tar.gz

tar -zxvf zookeeper-3.4.6.tar.gz

b. 切换到zookeeper目录的conf目录,修改zoo.sample.cfg为zoo.cfg

mv zoo.sample.cfg zoo.cfg

c. 配置zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/opt/soft/zookeeper-3.4.6/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=192.168.149.131:2888:3888
server.2=192.168.149.132:2888:3888
server.3=192.168.149.133:2888:3888

server.1=192.168.149.131:2888:3888
2888是通信端口,3888是zookeeper选举端口,这里用ip也可以,用主机名也可以。
注意配置文件中的datadir
dataDir=/opt/soft/zookeeper-3.4.6/data
这个目录要真实存在才可以;
d. 接下来要在/opt/soft/zookeeper-3.4.6/data目录中增加一个文件"myid"
vi myid
文件里面写入1,然后保存,这表示是server.1;
好了,这样就配置好了
f. 将配置好的zookeeper-3.4.6目录分发拷贝到slave1、slave2

scp -r zookeeper-3.4.6/ root@slave1:/opt/soft/
scp -r zookeeper-3.4.6/ root@slave2:/opt/soft/

注意要修改data目录中myid的内容为相应的2和3
g. 启动zookeeper
在每台机器上,切换到zookeeper-3.4.6目录执行以下命令:

bin/zkServer.sh start #启动
bin/zkServer.sh status #查看状态

查看结果:

[root@master zookeeper-3.4.6]# bin/zkServer.sh status
JMX enabled by default
Using config: /opt/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
[root@master zookeeper-3.4.6]# 
[root@slave1 zookeeper-3.4.6]# bin/zkServer.sh status
JMX enabled by default
Using config: /opt/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: leader
[root@slave1 zookeeper-3.4.6]# 
[root@slave2 zookeeper-3.4.6]# bin/zkServer.sh status
JMX enabled by default
Using config: /opt/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
[root@slave2 zookeeper-3.4.6]# 

四、Hadoop完全分布式、高可用和YARN的安装配置

a. 解压hadoop-2.7.2.tar.gz,我这里用的是我自己在64机器上编译的,如何编译见Hadoop2.7.2源码在64位Centos Linux下编译 ,编译好的tar包可以在这里下载,也可以在hadoop官网上下载,使用官网的tar包,除了会在启动的时候有个警告(warn),无其他使用问题。

tar -zxvf hadoop-2.7.2.tar.gz
rm -rf hadoop-2.7.2/share/doc/   #删除doc文档

b. 配置hadoop-env.sh

vi etc/hadoop/hadoop-env.sh

修改JAVA_HOME为本机安装的jdk目录

export JAVA_HOME=/usr/java/jdk1.7.0_67/

c. 配置core-site.xml

vi etc/hadoop/core-site.xml

在configuration标签中添加如下内容,保存退出

<!--hdfs集群访问地址-->
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>
<!--zookeeper地址-->
<property>
  <name>ha.zookeeper.quorum</name>
  <value>master:2181,slave1:2181,slave2:2181</value>
</property>
<!--hadoop数据存放数据,hdfs启动时会自动创建-->
<property>
  <name>hadoop.tmp.dir</name>
  <value>/data</value>
</property>

d. 配置hdfs-site.xml

vi etc/hadoop/hdfs-site.xml

在configuration标签中添加如下内容,保存退出

<!--hdfs集群名称,和core-site.xml中的对应-->
<property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
</property>
<!--hdfs集群的两个namenode节点-->
<property>
  <name>dfs.ha.namenodes.mycluster</name>
  <value>nn1,nn2</value>
</property>
<!--hdfs集群的两个namenode节点之一的rpc访问地址端口-->
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  <value>master:8020</value>
</property>
<!--hdfs集群的两个namenode节点之一的rpc访问地址端口-->
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value>slave1:8020</value>
</property>
<!--hdfs集群的两个namenode节点之一的http访问地址端口-->
<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value>master:50070</value>
</property>
<!--hdfs集群的两个namenode节点之一的http访问地址端口-->
<property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value>slave1:50070</value>
</property>
<!--hdfs集群journalnode地址-->
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>
</property>
<!--hdfs集群namenode高可用配置-->
<property>
  <name>dfs.client.failover.proxy.provider.mycluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--hdfs集群namenode高可用方式-->
<property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
</property>
<property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/root/.ssh/id_rsa</value>
</property>
<!--hdfs集群高可用超时配置-->
<property>
  <name>dfs.ha.fencing.ssh.connect-timeout</name>
  <value>30000</value>
</property>
<!--hdfs集群journalnode edits文件存放目录-->
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/opt/hadoop/data</value>
</property>
<!--hdfs集群高可用启用配置-->
<property>
  <name>dfs.ha.automatic-failover.enabled</name>
  <value>true</value>
</property>

e. 配置yarn-site.xml

mv etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
vi etc/hadoop/yarn-site.xml

在configuration标签中添加如下内容,保存退出

<!--启用YARN-->
<property>
  <name>yarn.resourcemanager.ha.enabled</name>
  <value>true</value>
</property>
<!--YARN集群的id,可以随便写-->
<property>
  <name>yarn.resourcemanager.cluster-id</name>
  <value>cluster1</value>
</property>
<!--配置YARN的高可用的两个节点-->
<property>
  <name>yarn.resourcemanager.ha.rm-ids</name>
  <value>rm1,rm2</value>
</property>
<!--配置YARN的高可用的两个节点之一-->
<property>
  <name>yarn.resourcemanager.hostname.rm1</name>
  <value>master</value>
</property>
<!--配置YARN的高可用的两个节点之一-->
<property>
  <name>yarn.resourcemanager.hostname.rm2</name>
  <value>slave1</value>
</property>
<!--配置YARN的节点访问地址-->
<property>
  <name>yarn.resourcemanager.webapp.address.rm1</name>
  <value>master:8088</value>
</property>
<!--配置YARN的节点访问地址-->
<property>
  <name>yarn.resourcemanager.webapp.address.rm2</name>
  <value>slave1:8088</value>
</property>
<!--配置YARN依赖的zookeeper集群地址-->
<property>
  <name>yarn.resourcemanager.zk-address</name>
  <value>master:2181,slave1:2181,slave2:2181</value>
</property>
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>

f. 配置mapred-site.xml

vi etc/hadoop/mapred-site.xml

在configuration标签中添加如下内容,保存退出

<property>
	<name>mapreduce.framework.name</name>
	<value>yarn</value>
</property>

g. 配置slaves文件

vi etc/hadoop/slaves

清空内容,添加如下内容:

master
slave1
slave2

h. 分发拷贝hadoop-2.7.2目录到其他机器上

scp -r hadoop-2.7.2/ root@slave1:/opt/soft/
scp -r hadoop-2.7.2/ root@slave2:/opt/soft/

i. 配置hadoop的环境变量

vi ~/.bash_profile

添加完后的内容如下所示:

JAVA_HOME=/usr/java/jdk1.7.0_67/
PATH=$PATH:$HOME/bin:$PATH:$JAVA_HOME/bin
HADOOP_HOME=/opt/soft/hadoop-2.7.2/
PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export PATH

使设置的环境变量生效:

source ~/.bash_profile

五、Hadoop集群的启动

a. 先决条件:保证zookeeper已经启动…
b. 启动三台journalnode

hadoop-daemon.sh start journalnode

c. 在其中一个namenode上格式化

hdfs namenode -format

d. 把刚刚格式化之后的元数据拷贝到另外一个namenode上

scp -r /data/dfs/ root@slave1:/data/

e. 在其中一个namenode上初始化zkfc

hdfs zkfc -formatZK

f. 停止上面节点

stop-all.sh

g. 启动

start-all.sh

h. 其中一个yarn resourcemananger 需要手动启动

yarn-daemon.sh start resourcemanager

i.通过jps命令查看启动的hadoop进程

以上是关于Hadoop之完全分布式安装的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop之完全分布式安装

Hadoop之搭建完全分布式运行模式

大数据实战之Centos搭建完全分布式Hadoop集群

HBase入门基础教程 HBase之单机模式与伪分布式模式安装

HBase基础教程1HBase之单机模式与伪分布式模式安装(转)

Hadoop基础教程4Hadoop之完全分布式环境搭建