# 系统信息

3台系统: centos6.8内核:4   内存:4G  硬盘:50G

# 主机名称,ip地址

master: 192.168.1.110

slave1: 192.168.1.111

slave2: 192.168.1.112


######################## 软件下载地址 ######################## 

链接:https://pan.baidu.com/s/1dFuBnKt 密码:rhwu

########################   基础初始配置 ########################

# 版本选择

jdk-8u77-linux-x64.rpm

zookeeper-3.4.9.tar.gz

hbase-1.3.1-bin.tar.gz

hadoop-2.7.4.tar.gz


# 配置hosts文件,三台机器都需要

[root@master ~]# cat /etc/hosts

192.168.1.110 master

192.168.1.111 slave1

192.168.1.112 slave2


# 配置用户

1
2
groupadd -g 4000 hadoop
useradd  -g 4000 -u 4001 hadoop


# 所有的主机 hbase,zookeeper 安装目录都在此处

1
2
mkdir  /opt/hadoop
chown  hadoop.hadoop  /opt/hadoop/  -R


########################  时间配置 ########################

# 双机互信

主要有三步:

①生成公钥和私钥

②导入公钥到认证文件

③更改权限


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@master ~] # ssh-keygen -t rsa
Generating public /private  rsa key pair.
Enter  file  in  which  to save the key ( /root/ . ssh /id_rsa ): 
Enter passphrase (empty  for  no passphrase): 
Enter same passphrase again: 
Your identification has been saved  in  /root/ . ssh /id_rsa .
Your public key has been saved  in  /root/ . ssh /id_rsa .pub.
The key fingerprint is:
ee:15:03:c7:3a:a2:8e:6a:c1:0c:74:d3:97:34:77:04 root@master
The key's randomart image is:
+--[ RSA 2048]----+
|    . .o.Eoo     |
| . o . oo..      |
|. . . . . o      |
|.        +       |
|+     . S o      |
| +   . o . o     |
|  . .   . .      |
| . o   . .       |
|o.. .   .        |
+-----------------+
[root@master ~] # cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[root@master ~] # chmod 700 ~/.ssh && chmod 600 ~/.ssh/*


# 主机与从机之间必须可以双向无密码登陆,从机与从机之间无限制

1
2
scp  ~/. ssh /authorized_keys  slave1: /root/ . ssh /
scp  ~/. ssh /authorized_keys  slave2: /root/ . ssh /


# 同步时间

1
2
[root@master zookeeper] # ansible hbase -m cron -a "name='ntpdate' hour='*/1' job='/usr/sbin/ntpdate 192.168.1.110 &> /dev/null'"
[root@master zookeeper] # ansible hbase -m shell -a "crontab -l"


#  时间一定要保持一致


########################  防火墙配置 ########################


# 防火墙配置  所有的主机上都得配置,或者开放 (2181,2888:3888端口,这部分端口是zookeeper端口)

1
2
3
[root@slave2 zookeeper] # iptables -I INPUT -s 192.168.1.0/24 -j ACCEPT
[root@slave2 zookeeper] # service iptables save
[root@slave2 zookeeper] # service iptables restart


########################  JDK配置 ########################


# 安装jdk,并配置环境变量,三台机器都需要安装 

# 设置环境变量

1
2
3
[root@slave2 ~] # cat /etc/profile.d/java.sh 
     export  JAVA_HOME= /usr/java/default
     export  PATH=$JAVA_HOME /bin :$PATH

# 重新加载配置文件使之生效

[root@slave2 ~]# source /etc/profile.d/java.sh


# 查看是否配置完成,3台机器都需要测试

[root@slave2 ~]# java -version

java version "1.8.0_77"

Java(TM) SE Runtime Environment (build 1.8.0_77-b03)

Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)


######################## zookeeper集群配置 ########################

# 参考文档: http://blog.csdn.net/reblue520/article/details/52279486


# 注意:zookeeper因为有主节点和从节点的关系,所以部署的集群台数最好为奇数个,否则可能出现脑裂导致服务异常


# 下载地址: http://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz

# 注意三台机器都需要安装,如果对ansible熟悉的话 可以直接使用它

1
2
mkdir  /opt/hadoop
chown  hadoop.hadoop  /opt/hadoop/  -R


# 安装zookeeper 

1
2
3
4
[root@master ~] # cd /opt/hadoop/
[root@master hadoop] # ls
zookeeper-3.4.9. tar .gz
[root@master hadoop] # tar xf zookeeper-3.4.9.tar.gz


# 弄一个软链接,配置文件直接指向这个地址,未来方便更新版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@master hadoop] # ln -sv zookeeper-3.4.9 zookeeper
"zookeeper"  ->  "zookeeper-3.4.9"
 
[root@master conf] # cd /opt/hadoop/zookeeper/conf
[root@master conf] # cp zoo_sample.cfg zoo.cfg
 
[root@master conf] # cat zoo.cfg 
     tickTime=2000
     initLimit=10
     syncLimit=5
     dataDir= /opt/hadoop/zookeeper/data
     dataLogDir= /opt/hadoop/zookeeper/logs
     clientPort=2181
     server.1=master:2888:3888
     server.2=slave1:2888:3888
     server.3=slave2:2888:3888


# 创建数据以及日志目录,将设置属主属组权限

1
2
[root@master conf] # mkdir /opt/hadoop/zookeeper/data
[root@master conf] # mkdir /opt/hadoop/zookeeper/logs


# 在zoo.cfg中的dataDir指定的目录下,新建myid文件。

# 例如:$ZK_INSTALL/data下,新建myid。在myid文件中输入1。表示为server.1。

echo "1" > data/myid   这里表示的是server.1  如果是第二个机器那么表示server.2


启动:在集群中的每台主机上执行如下命令

bin/zkServer.sh start 


查看状态,可以看到其中一台为主节点,其他两台为从节点:

bin/zkServer.sh status


# 启动zookeeper集群

1
2
3
4
[root@master zookeeper] # bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config:  /opt/hadoop/zookeeper/bin/ .. /conf/zoo .cfg
Mode: leader


# 从节点

1
2
3
4
[root@slave1 zookeeper] # bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config:  /opt/hadoop/zookeeper/bin/ .. /conf/zoo .cfg
Starting zookeeper ... STARTED


#  启动报错  说明没有配置myid文件,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2017-12-04 11:56:21,306 [myid:] - INFO  [main:QuorumPeerConfig@124] - Reading configuration from:  /opt/hadoop/zookeeper/bin/ .. /conf/zoo .cfg
2017-12-04 11:56:21,323 [myid:] - INFO  [main:QuorumPeer$QuorumServer@149] - Resolved  hostname : slave2 to address: slave2 /192 .168.1.112
2017-12-04 11:56:21,324 [myid:] - INFO  [main:QuorumPeer$QuorumServer@149] - Resolved  hostname : slave1 to address: slave1 /192 .168.1.111
2017-12-04 11:56:21,324 [myid:] - INFO  [main:QuorumPeer$QuorumServer@149] - Resolved  hostname : master to address: master /192 .168.1.110
2017-12-04 11:56:21,325 [myid:] - INFO  [main:QuorumPeerConfig@352] - Defaulting to majority quorums
2017-12-04 11:56:21,326 [myid:] - ERROR [main:QuorumPeerMain@85] - Invalid config, exiting abnormally
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing  /opt/hadoop/zookeeper/bin/ .. /conf/zoo .cfg
     at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:144)
     at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:101)
     at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
Caused by: java.lang.IllegalArgumentException:  /opt/hadoop/zookeeper/data/myid  file  is missing
     at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:362)
     at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:140)
     ... 2  more
Invalid config, exiting abnormally


# 这里是因为防火墙开着,没有开放端口的原因

1
2
3
4
5
2016-03-26 03:48:07,957 [myid:1] - WARN [QuorumPeer[myid=1] /0 :0:0:0:0:0:0:0:2181:QuorumCnxManager@400] - Cannot  open  channel to 3 at election address S2/这里是地址
java.net.ConnectException: 主机无法连接 
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)


########################   hbase 与hadoop的版本需要对应 ########################

  http://blog.csdn.net/shuaigexiaobo/article/details/78114221    低版本与高版本会安不上,还需要注意jdk版本


######################## hadoop 集群配置 ########################


# 软件放置路径为初级配置的路径 /opt/hadoop

1
2
3
[root@master hadoop] # tar xf hadoop-2.7.4.tar.gz 
[root@master hadoop] # ln -sv hadoop-2.7.4 hadoop
"hadoop"  ->  "hadoop-2.7.4"


# 配置属主属组权限 

1
[root@master hadoop] # chown hadoop.hadoop /opt/hadoop/hadoop-2.7.4 -R


# 环境变量设置 

1
2
3
4
5
6
7
8
9
10
vim  /etc/profile .d /hadoop .sh
export  HADOOP_HOME= /opt/hadoop/hadoop
export  HADOOP_INSTALL=$HADOOP_HOME  
export  HADOOP_MAPRED_HOME=$HADOOP_HOME  
export  HADOOP_COMMON_HOME=$HADOOP_HOME  
export  HADOOP_HDFS_HOME=$HADOOP_HOME  
export  YARN_HOME=$HADOOP_HOME  
export  HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME /lib/native  
export  PATH=$PATH:$HADOOP_HOME /sbin :$HADOOP_HOME /bin  
# export HADOOP_SSH_OPTS="-p 22"


# 复制到其它主机中

1
2
[root@master hadoop] # scp /etc/profile.d/hadoop.sh slave1:/etc/profile.d/
[root@master hadoop] # scp /etc/profile.d/hadoop.sh slave2:/etc/profile.d/


# 加载环境变量

1
[root@master hadoop] # soure /etc/profile.d/hadoop.sh


# 查看是否生效

1
2
3
[root@master hadoop] # hadoop version
Hadoop 2.7.4
Subversion https: //shv @git-wip-us.apache.org /repos/asf/hadoop .git -r cd915e1e8d9d0131462a0b7301586c175728a282


# hadoop配置文件在放置于/opt/hadoop/hadoop/etc/hadoop

1
2
3
4
5
6
7
vim  core-site.xml     # 添加如下内容
<configuration>
     <property>
         <name>fs.default.name< /name >
         <value>hdfs: //master :9000< /value >
     < /property >
< /configuration >
1
2
3
vim hadoop- env .sh 
#export JAVA_HOME=${JAVA_HOME}
export  JAVA_HOME= /usr/java/default


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
vim hdfs-site.xml    # 配置hdfs文件数据节点以及名称节点
<configuration>
    <property>
         <name>dfs.name. dir < /name >
         <value> /opt/hadoop/hadoop/name < /value >
     < /property >
     <property>
         <name>dfs.data. dir < /name >
         <value> /opt/hadoop/hadoop/data < /value >
     < /property >
     <property>
         <name>dfs.replication< /name >
         <value>3< /value >
     < /property >
< /configuration >
 
mkdir  /opt/hadoop/hadoop/name
mkdir  /opt/hadoop/hadoop/data
1
2
3
4
5
6
7
8
[root@master hadoop] # cp mapred-site.xml.template mapred-site.xml
[root@master hadoop] # vim !$
<configuration>
     <property>
         <name>mapred.job.tracker< /name >
         <value>master:9001< /value >
     < /property >
< /configuration >


# 配置从节点 先删除localhost

1
2
3
/opt/hadoop/hadoop/etc/hadoop/slaves
slave1
slave2


# 三台机器都是一样的配置,放置相同的路径

1
2
[root@master hadoop] # scp -r hadoop-2.7.4 slave1:/opt/hadoop/
[root@master hadoop] # scp -r hadoop-2.7.4 slave2:/opt/hadoop/


# 使用ansible或者手动直接软链接过去就行

1
[root@master hadoop] # ansible hbase -m shell -a 'ln -sv /opt/hadoop/hadoop-2.7.4 /opt/hadoop/hadoop'


# 配置属主属组文件

1
[root@master hadoop] # ansible hbase -m shell -a 'chown hadoop.hadoop /opt/hadoop/hadoop -R'


# 进入master的/opt/hadoop/hadoop目录,执行以下操作

1
# bin/hadoop namenode -format                # 格式化namenode,第一次启动服务前执行的操作,以后不需要执行


# 启动hadoop服务

1
2
3
4
5
[root@master logs] # sbin/start-all.sh
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
17 /12/04  15:56:51 WARN util.NativeCodeLoader: Unable to load native-hadoop library  for  your platform... using  builtin -java classes where applicable
Starting namenodes on [master]
master: starting namenode, logging to  /opt/hadoop/hadoop-2 .7.4 /logs/hadoop-root-namenode-master .out


# 查看进程   会发现多了资源名称节点以及namanode

1
2
3
4
5
6
[root@master logs] # jps
5057 ResourceManager
4900 SecondaryNameNode
4709 NameNode
5208 Jps
2734 QuorumPeerMain


# 登陆其它节点  会发现多了一个数据节点

1
2
3
4
5
[root@slave2 hadoop] # jps   
2624 QuorumPeerMain
3489 NodeManager
3378 DataNode
3603 Jps



######################## hbase集群配置 ########################

# 软件放置路径为初级配置的路径 /opt/hadoop

1
2
3
[root@master hadoop] # tar xf hbase-1.3.1-bin.tar.gz
[root@master hadoop] # ln -sv hbase-1.3.1 hbase
"hbase"  ->  "hbase-1.3.1"

# 配置文件目录 /opt/hadoop/hbase/conf

vim hbase-env.sh

1
2
3
export  JAVA_HOME= /usr/java/default/
export  HBASE_CLASSPATH= /opt/hadoop/hadoop/etc/hadoop
export  HBASE_MANAGES_ZK= false           # 不使用自带的zk,使用独立的zookeeper


vim hbase-site.xml    # 配置站点信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<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 >                                      # 这里指的是zook的端口
     < /property >
     <property>
         <name>hbase.zookeeper.quorum< /name >                      # 主机名一定要对应上
         <value>master,slave1,slave2< /value >
     < /property >
     <property>
         <name>zookeeper.session.timeout< /name >                   # zook的session超时时长
         <value>60000000< /value >
     < /property >
     <property>
         <name>dfs.support.append< /name >
         <value> true < /value >
     < /property >
< /configuration >

vim regionservers# 配置从节点 一定要对应上

1
2
slave1
slave2


# 设置软链接,方便未来升级

[root@master hadoop]# ansible hbase -m shell -a "ln -sv /opt/hadoop/hbase-1.3.1 /opt/hadoop/hbase"

# 设置属主属组权限

[root@master hadoop]# ansible hbase -m shell -a "chown hadoop.hadoop /opt/hadoop/hbase-1.3.1 -R"


# 启动三台机器上的 hbase服务

[root@master hadoop]# ansible hbase -m shell -a "/opt/hadoop/hbase-1.3.1/bin/start-hbase.sh"



# 只需要启动master上的,其它机器上会自动启动

[root@master hadoop]# /opt/hadoop/hbase/bin/start-hbase.sh 

# 查看master上的服务

1
2
3
4
5
6
7
[root@master hadoop] # jps
5057 ResourceManager
4900 SecondaryNameNode
6516 HMaster
4709 NameNode
6809 Jps
2734 QuorumPeerMain

# 查看slave上的从节点服务

1
2
3
4
5
6
7
[root@slave1 ~] # jps
3510 NodeManager
3399 DataNode
2680 QuorumPeerMain
5464 Jps
5049 HMaster
4730 HRegionServer


# 进入hbase shell进行验证

 /opt/hadoop/hbase/bin/hbase shell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2017-12-04 16:20:28,690 WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library  for  your platform... using  builtin -java classes where applicable
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding  in  [jar: file : /opt/hadoop/hbase-1 .3.1 /lib/slf4j-log4j12-1 .7.5.jar! /org/slf4j/impl/StaticLoggerBinder .class]
SLF4J: Found binding  in  [jar: file : /opt/hadoop/hadoop-2 .7.4 /share/hadoop/common/lib/slf4j-log4j12-1 .7.10.jar! /org/slf4j/impl/StaticLoggerBinder .class]
SLF4J: See http: //www .slf4j.org /codes .html #multiple_bindings for an explanation.
SLF4J: Actual binding is of  type  [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell; enter  'help<RETURN>'  for  list of supported commands.
Type  "exit<RETURN>"  to leave the HBase Shell
Version 1.3.1, r930b9a55528fe45d8edce7af42fef2d35e77677a, Thu Apr  6 19:36:54 PDT 2017
 
hbase(main):001:0> 
hbase(main):002:0* list
TABLE                                                                                                                                               
0 row(s)  in  0.2350 seconds
 
=> []
hbase(main):003:0> create  'scores' 'grade' 'course'
0 row(s)  in  2.4310 seconds
 
=> Hbase::Table - scores
hbase(main):004:0> list
TABLE                                                                                                                                               
scores                                                                                                                                              
1 row(s)  in  0.0080 seconds
 
=> [ "scores" ]



####  此处打开的地址都是 master 的IP   ,  192.168.1.110

image.png

image.pngimage.png