1.总体思路
- 准备主从服务器;
- 准备专用帐号;
- 配置主从服务器可以无密码SSH互相登录;
- 安装JDK;
- 解压安装Hadoop;
- 配置hdfs、yarn、mapreduce等主从关系;
- 安装Zookeeper;
- 安装HBase。
2.环境介绍
- VirtualBox;
- 三台Centos7 64bit;
- 创建专用用户hadoop。
集群环境至少需要3个节点,也就是至少需要3台服务器设备:1个Master,2个Slave,节点之间局域网连接,可以相互ping通,下面通过表格的方式,列出3台服务器设备的具体配置信息:
Hostname | IP | User | Password | Role |
master | 192.168.1.101 | hadoop | 123456 | namenode |
slave1 | 192.168.1.105 | hadoop | 123456 | datanode |
slave2 | 192.168.1.106 | hadoop | 123456 | datanode |
为了便于维护,集群环境配置项最好使用相同用户名、用户密码、相同hadoop、hbase、zookeeper目录结构。
3.软件版本
- hadoop-2.7.3.tar.gz
- zookeeper-3.4.9.tar.gz
- hbase-1.2.3-bin.tar.gz
以上软件可在 http://www.apache.org/dyn/closer.cgi 下载。
4.环境准备
4.1.创建专用用户hadoop
很简单,使用root账户登录三台节点,创建hadoop账户。
$ useradd hadoop
$ passwd hadoop #设置密码为123456
4.2.添加hosts映射关系
分别在三个节点上添加hosts映射关系:
$ vim /etc/hosts
添加的内容如下:
192.168.1.101 master
192.168.1.105 slave1
192.168.1.106 slave2
4.3.集群之间SSH无密码登录
CentOS默认安装了ssh,如果没有你需要先安装ssh 。
集群环境的使用必须通过ssh无密码登陆来执行,本机登陆本机必须无密码登陆,主机与从机之间必须可以双向无密码登陆,从机与从机之间无限制。
4.3.1.设置master无密码自登陆
主要有三步:
- 生成公钥和私钥;
- 导入公钥到认证文件;
- 更改权限。
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 700 ~/.ssh && chmod 600 ~/.ssh/*
测试,第一次登录可能需要yes确认,之后就可以直接登录了:
$ ssh localhost
Last login: Sat Jul 18 22:57:44 2015 from localhost
对于 slave1 和 slave2,进行无密码自登陆设置,操作同上。
4.3.2.设置主机->从机的无密码登录
$ cat ~/.ssh/id_rsa.pub | ssh hadoop@slave1 'cat - >> ~/.ssh/authorized_keys'
$ cat ~/.ssh/id_rsa.pub | ssh hadoop@slave2 'cat - >> ~/.ssh/authorized_keys'
测试:
[hadoop@master ~]$ ssh hadoop@slave1
Last login: Sat Jul 18 23:25:41 2015 from master
[hadoop@master ~]$ ssh hadoop@slave2
Last login: Sat Jul 18 23:25:14 2015 from master
4.3.3.设置从机->主机的无密码登录
分别在slave1、slave2上执行:
$ cat ~/.ssh/id_rsa.pub | ssh hadoop@master 'cat - >> ~/.ssh/authorized_keys'
5.安装配置JDK环境
这是安装三个软件的前提,推荐大家使用rpm安装,非常简单。我专门写了一篇博客,请移步阅读《Centos6.6 64位安装配置JDK 8教程》,虽然我现在使用的Centos7,此教程不受系统版本影响的。
6.Hadoop安装配置
在master节点上,将hadoop、hbase、zookeeper的安装包都解压到/home/hadoop(也就是hadoop账户的默认家目录),并重命名为hadoop、hbase、zookeeper。Hadoop的配置文件都在~/hadoop/etc/目录下,接下来对hadoop进行配置。
6.1.配置core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
</configuration>
6.2.配置hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
6.3.配置mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
6.4.配置hadoop-env.sh
将
export JAVA_HOME=${JAVA_HOME}
改为
export JAVA_HOME=/usr/java/default
6.5.配置yarn-env.sh
将
export JAVA_HOME=${JAVA_HOME}
改为
export JAVA_HOME=/usr/java/default
6.6.配置yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8035</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>768</value>
</property>
</configuration>
6.7.修改masters文件
vi masters ,加入以下配置内容:
master
6.8.修改slaves文件
vi slaves,加入以下配置内容:
slave1
slave2
6.9.文件拷贝
使用scp命令进行从本地到远程(或远程到本地)的文件拷贝操作:
scp -r /home/hadoop/hadoop slave1:/home/hadoop
scp -r /home/hadoop/hadoop slave2:/home/hadoop
6.10.启动HDFS集群
进入master的~/hadoop目录,执行以下操作:
$ bin/hadoop namenode -format
格式化namenode,第一次启动服务前执行的操作,以后不需要执行。
在master节点上,执行如下命令,启动hadoop集群:
[hadoop@master ~]$ ~/hadoop/sbin/start-dfs.sh
Starting namenodes on [master]
master: starting namenode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-namenode-master.out
slave2: starting datanode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-datanode-slave2.out
slave1: starting datanode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-datanode-slave1.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-secondarynamenode-master.out
[hadoop@master ~]$
在master节点上,执行如下命令,是否可以看到下面几个进程:
[hadoop@master ~]$ jps
2598 SecondaryNameNode
2714 Jps
2395 NameNode
[hadoop@master ~]$
在两台slave上执行如下命令,是否可以看到下面几个进程:
[hadoop@slave1 ~]$ jps
2394 Jps
2317 DataNode
[hadoop@slave1 ~]$
#############
[hadoop@slave2 ~]$ jps
2396 Jps
2319 DataNode
[hadoop@slave2 ~]$
6.11.启动YARN
在master节点上,执行如下命令,启动YARN:
[hadoop@master ~]~/hadoop/sbin/start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /home/hadoop/hadoop/logs/yarn-hadoop-resourcemanager-master.out
slave2: starting nodemanager, logging to /home/hadoop/hadoop/logs/yarn-hadoop-nodemanager-slave2.out
slave1: starting nodemanager, logging to /home/hadoop/hadoop/logs/yarn-hadoop-nodemanager-slave1.out
[hadoop@master ~]$ jps
使用jps,如果出现 ResourceManager 这个进程,证明yarn已经启动成功了。
6.12.验证集群
最后,验证集群计算,执行Hadoop自带的examples,执行如下命令:
~/hadoop/bin/hadoop jar ~/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar randomwriter out
在浏览器浏览:
http://192.168.1.101:8088/
http://192.168.1.101:50070/
看是否能打开,以了解一下集群的信息。
7.配置配置Zookeeper
解压zookeeper安装包,并重命名为zookeeper,然后进行以下操作。
7.1.修改配置文件zoo.cfg
进入~/zookeeper/conf目录,拷贝zoo_sample.cfg文件为zoo.cfg
$ cp zoo_sample.cfg zoo.cfg
对zoo.cfg进行编辑,内容如下:
dataDir=/home/hadoop/zookeeper/data
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
7.2.新建并编辑myid文件
在dataDir目录下新建myid文件,输入一个数字(master为1,slave1为2,slave2为3),比如master主机上的操作如下:
$ mkdir /home/hadoop/zookeeper/data
$ echo "1" > /home/hadoop/zookeeper/data/myid
同样,你也可以使用scp命令进行远程复制,只不过要修改每个节点上myid文件中的数字。
7.3.启动ZooKeeper集群
在ZooKeeper集群的每个结点上,执行启动ZooKeeper服务的脚本:
$ ~/zookeeper/bin/zkServer.sh start
这里要强调的是,需要在三台机器上都启动Zookeeper。只在master启动是不行的。
8.安装配置HBase
将hbase安装包进行解压,并重命名为hbase,然后进行如下配置。
8.1.修改hbase-env.sh
export JAVA_HOME=/usr/java/default
export HBASE_CLASSPATH=/home/hadoop/hadoop/etc/hadoop/
export HBASE_MANAGES_ZK=false
8.2.配置hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.master</name>
<value>master</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>60000000</value>
</property>
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
</configuration>
8.3.更改 regionservers
在 regionservers 文件中添加slave列表:
slave1
slave2
8.4.分发并同步安装包
将整个hbase安装目录都远程拷贝到所有slave服务器:
$ scp -r /home/hadoop/hbase slave1:/home/hadoop
$ scp -r /home/hadoop/hbase slave2:/home/hadoop
8.5.启动HBase
在master节点上,执行如下命令:
[hadoop@master ~]$ ~/hbase/bin/start-hbase.sh
starting master, logging to /home/hadoop/hbase/bin/../logs/hbase-hadoop-master-master.out
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
slave1: starting regionserver, logging to /home/hadoop/hbase/bin/../logs/hbase-hadoop-regionserver-slave1.out
slave2: starting regionserver, logging to /home/hadoop/hbase/bin/../logs/hbase-hadoop-regionserver-slave2.out
slave1: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
slave1: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
slave2: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
slave2: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
[hadoop@master ~]$
在master节点,使用 jps 查看进程:
[hadoop@master ~]$ jps
3586 Jps
2408 NameNode
2808 ResourceManager
3387 HMaster
2607 SecondaryNameNode
3231 QuorumPeerMain
[hadoop@master ~]$
在slave节点,使用 jps 查看进程:
[hadoop@slave1 ~]$ jps
2736 HRegionServer
2952 Jps
2313 DataNode
2621 QuorumPeerMain
[hadoop@slave1 ~]$
如果看到了HMaster和HRegionServer则标识HBase启动成功。
8.6.使用shell操作HBase
[hadoop@master ~]$ ~/hbase/bin/hbase shell
2016-10-27 11:52:47,394 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.2.3, rbd63744624a26dc3350137b564fe746df7a721a4, Mon Aug 29 15:13:42 PDT 2016
hbase(main):001:0> list
TABLE
member
1 row(s) in 0.4470 seconds
=> ["member"]
hbase(main):002:0> version
1.2.3, rbd63744624a26dc3350137b564fe746df7a721a4, Mon Aug 29 15:13:42 PDT 2016
hbase(main):004:0> status
1 active master, 0 backup masters, 2 servers, 0 dead, 1.5000 average load
hbase(main):005:0> exit
如果能够顺利执行,则代表HBase,启动成功了。里面的member表是我后来创建的,你也可以使用create命令创建一个。
9.常见问题
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Hadoop 2已经将HDFS和YARN分开管理,这样分开管理,可以使HDFS更方便地进行HA或Federation,实现HDFS的线性扩展(Scale out),从而保证HDFS集群的高可用性。从另一个方面们来说,HDFS可以作为一个通用的分布式存储系统,而为第三方的分布式计算框架提供方便,就像类似YARN的计算框架,其他的如,Spark等等。
YARN就是MapReduce V2,将原来Hadoop 1.x中的JobTracker拆分为两部分:一部分是负责资源的管理(Resource Manager),另一部分负责任务的调度(Scheduler)。
10.参考链接
https://www.iwwenbo.com/hadoop-hbase-zookeeper/ (特别要感谢此作者,我是通过他的教程顺利完成安装的,但是由于hadoop,zookeeper,hbase使用的版本过老了,这次我写到教程加入了YARN的配置和个人的理解。)
http://blog.csdn.net/shirdrn/article/details/9731423
http://blog.csdn.net/renfengjun/article/details/25320043
http://blog.csdn.net/young_kim1/article/details/50324345