一、目的
本文描述了Hadoop、HBase、Zookeeper分布式集群环境的搭建及配置,具体执行步骤如下:
- 环境准备;
- 安装JDK并配置环境变量;
- 安装配置Hadoop集群;
- 安装配置Zookeeper集群;
- 安装配置HBase集群。
接下来对安装配置的具体细节进行描述。
二、环境准备
1.软件下载
在搭建环境之前,我们应该准备好以下软件:
hadoop-2.7.1.tar.gz
zookeeper-3.4.6.tar.gz
hbase-0.98.16.1-hadoop2-bin.tar.gz
以上软件包的下载地址:http://www.apache.org/dyn/closer.cgi ;
2.环境配置
2.1 服务器主从配置
集群环境至少需要3个节点,也就是至少需要3台服务器设备:1个Master,2个Slave,节点之间局域网连接,可以相互ping通,下面通过表格的方式,列出3台服务器设备的具体配置信息:
Hostname | IP | User | Password |
---|---|---|---|
master | 192.168.59.133 | hadoop | 123456 |
slave1 | 192.168.59.134 | hadoop | 123456 |
slave2 | 192.168.59.135 | hadoop | 123456 |
这里使用的操作系统均为CentOS 6.5,如果为Windows系统,环境稍微有点不同,具体参考这里。为了便于维护,集群环境配置项最好使用相同用户名、用户密码、相同hadoop、hbase、zookeeper目录结构。
注: 可以通过编辑/etc/sysconfig/network文件来修改 hostname 。
2.2 添加Hosts映射关系
分别在三个节点上添加hosts映射关系:
$ vim /etc/hosts
添加的内容如下:
192.168.59.133 master
192.168.59.134 slave1
192.168.59.135 slave2
2.3 集群之间SSH无密码登陆
CentOS默认安装了ssh,如果没有你需要先安装ssh 。
集群环境的使用必须通过ssh无密码登陆来执行,本机登陆本机必须无密码登陆,主机与从机之间必须可以双向无密码登陆,从机与从机之间无限制。
2.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,进行无密码自登陆设置,操作同上。
2.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
2.3.3 设置从机->主机的无密码登录
分别在slave1、slave2上执行:
$ cat ~/.ssh/id_rsa.pub | ssh hadoop@master 'cat - >> ~/.ssh/authorized_keys'
三、安装配置JDK环境
JDK环境是必须安装的,且版本应该在JAVA 1.5.X版本以上,建议选择Sun公司发行的JAVA版本,在安装好的CentOS上,会自带OpenJdk,我们需要先卸载掉,然后再安装sun公司的jdk,这里我们使用rpm方式安装,版本为jdk-8u65-linux-x64.rpm。
为了节省篇幅,增加文章的可读性,JDK的具体安装步骤,请移步CentOs安装JDK。
四、安装配置Hadoop集群环境
Hadoop支持以下三种配置模式:
- 单机模式;
- 伪分布模式;
- 完全分布式模式;
这里介绍的启动方式是完全分布式模式,其他两种方式请参见这里;将hadoop、hbase、zookeeper的安装包都解压到/home/hadoop/个人主文件夹下,并重命名为hadoop、hbase、zookeeper。Hadoop的配置文件都在~/hadoop/etc/目录下,接下来对hadoop进行配置。
1.配置core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
2.配置hadoop-env.sh
添加JDK路径:
export JAVA_HOME=/usr/java/jdk1.8.0_51
3.配置hdfs-site.xml
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/hadoop/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/hadoop/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
4.配置mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
</configuration>
5.修改masters文件
vi master ,加入以下配置内容:
master
6.修改slaves文件
vi slaves,加入以下配置内容
slave1
slave2
注意:三台机器上都进行相同的配置,都放在相同的路径下。
使用scp命令进行从本地到远程(或远程到本地)的文件拷贝操作:
scp -r /home/hadoop/hadoop slave1:/home/hadoop
scp -r /home/hadoop/hadoop slave2:/home/hadoop
7.启动hadoop集群
进入master的~/hadoop目录,执行以下操作:
$ bin/hadoop namenode -format
格式化namenode,第一次启动服务前执行的操作,以后不需要执行。
然后启动hadoop:
$ sbin/start-all.sh
通过jps命令能看到除jps外有5个进程:
$ jps
4866 NodeManager
4370 NameNode
4899 Jps
4648 SecondaryNameNode
4779 ResourceManager
4460 DataNode
五、安装配置Zookeeper集群
解压zookeeper安装包,并重命名为zookeeper,然后进行以下操作。
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=192.168.59.133:2888:3888
server.2=192.168.59.134:2888:3888
server.3=192.168.59.135:2888:3888
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文件中的数字
3.启动ZooKeeper集群
在ZooKeeper集群的每个结点上,执行启动ZooKeeper服务的脚本
$ ~/zookeeper/bin/zkServer.sh start
注意事项:
1)如果启动报类似异常:QuorumCnxManager@384] – Cannot open channel to 2 at election address slave-02/192.168.0.178:3888 是可以忽略的,因为该服务启动时会尝试连接所有节点,而其他节点尚未启动。通过后面部分可以看到,集群在选出一个Leader后,最后稳定 了。其他结点可能也出现类似问题,属于正常。
2)关闭防火墙。
在hadoop集群环境(linux系统)中最好关闭防火墙,不然会出现很多问题,例如namenode找不到datanode等。如果不关闭防火墙,客户端使用API操作HDFS以及ZooKeeper,可能就会出现下面常见的两种异常:
- 使用API操作HDFS时会出现异常:java.net.NoRouteToHostException: No route to host
- 使用API操作ZK时会出现异常:org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for xxxx
3)使用root权限登陆后,输入关闭防火墙命令:
$ /etc/init.d/iptables stop
$ service iptables stop
4)修改禁用selinux: /etc/selinux/config文件,设置”SELINUX=disabled”
六、安装配置HBase集群
将hbase安装包进行解压,并重命名为hbase,然后进行如下配置。
1.配置hbase-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_51
export HBASE_CLASSPATH=/home/hadoop/hadoop/etc/hadoop/
export HBASE_MANAGES_ZK=false
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>
3.更改 regionservers
在 regionservers 文件中添加slave列表:
slave1
slave2
4.分发并同步安装包
将整个hbase安装目录都远程拷贝到所有slave服务器:
$ scp -r /home/hadoop/hbase slave1:/home/hadoop
$ scp -r /home/hadoop/hbase slave2:/home/hadoop
六、启动集群
1.启动ZooKeeper
~/zookeeper/bin/zkServer.sh start
2.启动hadoop
~/hadoop/sbin/start-all.sh
3.启动hbase
~/hbase/bin/start-base.sh
4.启动后,master上进程和slave进程列表
[hadoop@master ~]$ jps
6225 Jps
2897 SecondaryNameNode # hadoop进程
2710 NameNode # hadoop master进程
3035 ResourceManager # hadoop进程
5471 HMaster # hbase master进程
2543 QuorumPeerMain # zookeeper进程
[hadoop@slave1 ~]$ jps
4689 Jps
2533 QuorumPeerMain # zookeeper进程
2589 DataNode # hadoop slave进程
4143 HRegionServer # hbase slave进程
5.进入hbase shell进行验证
[hadoop@master ~]$ hbase/bin/hbase shell
2015-07-20 00:42:11,725 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.0.1.1, re1dbf4df30d214fca14908df71d038081577ea46, Sun May 17 12:34:26 PDT 2015
hbase(main):001:0> list
TABLE
0 row(s) in 1.6950 seconds
=> []
hbase(main):002:0> status
2 servers, 0 dead, 1.0000 average load
hbase(main):003:0>
最新评论
网飞没问题, 迪士尼+有解决方案么?
pp助手是安卓手机用的,根本下载用不来苹果
已解决
这样的话数据库里的结构为{"attachment":{"content":"xxx"}}, 要怎么才能变成{"content":"xxx"},从而使结构保持一致?
赞! make test不过的坑都写到的,谢谢楼主~
谢谢你
用了root用户还是一直502是怎么回事呢
student id 是空的