单机环境安装Zookeeper+Hadoop+Hbase+Phoenix
环境准备
系统环境:Centos 7.6
配置映射
[root@ java]# vim /etc/hosts
添加如下配置:
# 文件末尾增加
本机IP地址 hadoop001
使用软件版本说明
因为Apache的Hadoop版本和Hbase的版本不太稳定所以本文所用的都为CDH版本
<nav>
<a href="# 一.安装JDK">一.安装JDK</a>
<a href="#1.1 下载并解压">1.1 下载并解压</a>
<a href="#1.2 设置环境变量">1.2 设置环境变量</a>
<a href="#1.3 检查是否安装成功">1.3 检查是否安装成功</a>
<a href="#二.安装Zookeeper">二.安装Zookeeper</a>
<a href="#2.1 下载">2.1 下载</a>
<a href="#2.2 解压">2.2 解压</a>
<a href="#2.3 配置环境变量">2.3 配置环境变量</a>
<a href="#2.4 修改配置">2.4 修改配置</a>
<a href="#2.5 启动">2.5 启动</a>
<a href="#2.6 验证是否安装成功">2.6 验证是否安装成功</a>
<a href="#三.安装Hadoop">三.安装Hadoop</a>
<a href="#3.1 配置免密登录">3.1 配置免密登录</a>
<a href="#3.1.1 生成公私钥">3.1.1 生成公私钥</a>
<a href="#3.1.2 授权">3.1.2 授权</a>
<a href="#3.2 Hadoop(HDFS)环境搭建">3.2 Hadoop(HDFS)环境搭建</a>
<a href="#3.2.1 下载并解压">3.2.1 下载并解压</a>
<a href="#3.2.2 配置环境变量">3.2.2 配置环境变量</a>
<a href="#3.2.3 修改Hadoop配置">3.2.3 修改Hadoop配置</a>
<a href="#3.2.4 关闭防火墙">3.2.4 关闭防火墙</a>
<a href="#3.2.5 初始化">3.2.5 初始化</a>
<a href="#3.2.6 启动HDFS">3.2.6 启动HDFS</a>
<a href="#3.2.7 验证是否启动成功">3.2.7 验证是否启动成功</a>
<a href="#3.3 Hadoop(YARN)环境搭建">3.3 Hadoop(YARN)环境搭建</a>
<a href="#3.3.1 修改配置">3.3.1 修改配置</a>
<a href="#3.3.2 启动服务">3.3.2 启动服务</a>
<a href="#3.3.3 验证是否启动成功">3.3.3 验证是否启动成功</a>
<a href="#四.安装Hbase">四.安装Hbase</a>
<a href="#4.1 软件下载解压">4.1 软件下载解压</a>
<a href="#4.2 配置环境变量">4.2 配置环境变量</a>
<a href="#4.3 进行HBase相关配置">4.3 进行HBase相关配置</a>
<a href="#4.4 启动Hbase">4.4 启动Hbase</a>
<a href="#4.5 验证是否安装成功">4.5 验证是否安装成功</a>
<a href="#五.安装Phoenix">五.安装Phoenix</a>
<a href="#5.1 下载并解压">5.1 下载并解压</a>
<a href="#5.2 拷贝Jar包">5.2 拷贝Jar包</a>
<a href="#5.3 重启 Region Servers">5.3 重启 Region Servers</a>
<a href="#5.4 启动Phoenix">5.4 启动Phoenix</a>
<a href="#5.5 验证是否安装成功">5.5 验证是否安装成功</a>
一.安装JDK
JDK 版本:jdk 1.8.0_20
<a name="1.1 下载并解压">1.1 下载并解压</a>
在官网 下载所需版本的 JDK,这里我下载的版本为JDK 1.8 ,下载后进行解压:
[root@ java]# tar -zxvf jdk-8u201-linux-x64.tar.gz
<a name="1.2 设置环境变量">1.2 设置环境变量</a>
[root@ java]# vi /etc/profile
添加如下配置:
export JAVA_HOME=/usr/java/jdk1.8.0_201
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
执行 source
命令,使得配置立即生效:
[root@ java]# source /etc/profile
<a name="1.3. 检查是否安装成功">1.3. 检查是否安装成功</a>
[root@ java]# java -version
显示出对应的版本信息则代表安装成功。
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
<a name="二.安装Zookeeper">二.安装Zookeeper</a>
<a name="2.1 下载">2.1 下载</a>
下载对应版本 Zookeeper,这里我下载的版本 3.4.14
。官方下载地址:https://archive.apache.org/dist/zookeeper/
# wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
<a name="2.2 解压">2.2 解压</a>
# tar -zxvf zookeeper-3.4.14.tar.gz
<a name="2.3 配置环境变量">2.3 配置环境变量</a>
# vim /etc/profile
添加环境变量:
export ZOOKEEPER_HOME=/usr/app/zookeeper-3.4.14
export PATH=$ZOOKEEPER_HOME/bin:$PATH
使得配置的环境变量生效:
# source /etc/profile
<a name="2.4 修改配置">2.4 修改配置</a>
进入安装目录的 conf/
目录下,拷贝配置样本并进行修改:
# cp zoo_sample.cfg 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=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/log
# 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
配置参数说明:
- tickTime:用于计算的基础时间单元。比如 session 超时:N*tickTime;
- initLimit:用于集群,允许从节点连接并同步到 master 节点的初始化连接时间,以 tickTime 的倍数来表示;
- syncLimit:用于集群, master 主节点与从节点之间发送消息,请求和应答时间长度(心跳机制);
- dataDir:数据存储位置;
- dataLogDir:日志目录;
- clientPort:用于客户端连接的端口,默认 2181
<a name="2.5 启动">2.5 启动</a>
由于已经配置过环境变量,直接使用下面命令启动即可:
zkServer.sh start
<a name="2.6 验证是否安装成功">2.6 验证是否安装成功</a>
使用 JPS 验证进程是否已经启动,出现 QuorumPeerMain
则代表启动成功。
[root@hadoop001 bin]# jps
3814 QuorumPeerMain
<a name="三.安装Hadoop">三.安装Hadoop</a>
<a name="3.1 配置免密登录">3.1 配置免密登录</a>
Hadoop 组件之间需要基于 SSH 进行通讯。
<a name="3.1.1 生成公私钥">3.1.1 生成公私钥</a>
执行下面命令行生成公匙和私匙:
ssh-keygen -t rsa
<a name="3.1.2 授权">3.1.2 授权</a>
进入 ~/.ssh
目录下,查看生成的公匙和私匙,并将公匙写入到授权文件:
[root@@hadoop001 sbin]# cd ~/.ssh
[root@@hadoop001 .ssh]# ll
-rw-------. 1 root root 1675 3 月 15 09:48 id_rsa
-rw-r--r--. 1 root root 388 3 月 15 09:48 id_rsa.pub
# 写入公匙到授权文件
[root@hadoop001 .ssh]# cat id_rsa.pub >> authorized_keys
[root@hadoop001 .ssh]# chmod 600 authorized_keys
<a name="3.2 Hadoop(HDFS)环境搭建">3.2 Hadoop(HDFS)环境搭建</a>
<a name="3.2.1 下载并解压">3.2.1 下载并解压</a>
下载 Hadoop 安装包,这里我下载的是 CDH 版本的,下载地址为:http://archive.cloudera.com/cdh5/cdh/5/
# 解压
tar -zvxf hadoop-2.6.0-cdh5.16.2.tar.gz
<a name="3.2.2 配置环境变量">3.2.2 配置环境变量</a>
# vi /etc/profile
配置环境变量:
export HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.16.2
export PATH=${HADOOP_HOME}/bin:$PATH
执行 source
命令,使得配置的环境变量立即生效:
# source /etc/profile
<a name="3.2.3 修改Hadoop配置">3.2.3 修改Hadoop配置</a>
进入 ${HADOOP_HOME}/etc/hadoop/
目录下,修改以下配置:
1. hadoop-env.sh
# JDK安装路径
export JAVA_HOME=/usr/java/jdk1.8.0_201/
2. core-site.xml
<configuration>
<property>
<!--指定 namenode 的 hdfs 协议文件系统的通信地址-->
<name>fs.defaultFS</name>
<value>hdfs://hadoop001:8020</value>
</property>
<property>
<!--指定 hadoop 存储临时文件的目录-->
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
</configuration>
3. hdfs-site.xml
指定副本系数和临时文件存储位置:
<configuration>
<property>
<!--由于我们这里搭建是单机版本,所以指定 dfs 的副本系数为 1-->
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
4. slaves
配置所有从属节点的主机名或 IP 地址,由于是单机版本,所以指定本机即可,编辑slaves设置为:
hadoop001
<a name="3.2.4 关闭防火墙">3.2.4 关闭防火墙</a>
不关闭防火墙可能导致无法访问 Hadoop 的 Web UI 界面:
# 查看防火墙状态
sudo firewall-cmd --state
# 关闭防火墙:
sudo systemctl stop firewalld.service
<a name="3.2.5 初始化">3.2.5 初始化</a>
第一次启动 Hadoop 时需要进行初始化,进入 ${HADOOP_HOME}/bin/
目录下,执行以下命令:
[root@hadoop001 bin]# ./hdfs namenode -format
<a name="3.2.6 启动HDFS">3.2.6 启动HDFS</a>
进入 ${HADOOP_HOME}/sbin/
目录下,启动 HDFS:
[root@hadoop001 sbin]# ./start-dfs.sh
<a name="3.2.7 验证是否启动成功">3.2.7 验证是否启动成功</a>
方式一:执行 jps
查看 NameNode
和 DataNode
服务是否已经启动:
[root@hadoop001 hadoop-2.6.0-cdh5.16.2]# jps
9137 DataNode
9026 NameNode
9390 SecondaryNameNode
方式二:查看 Web UI 界面,端口为 50070
:
<div><img src="http://ww1.sinaimg.cn/large/c4d294bfly1gawcrlnew0j22bg16o48d.jpg"/></div>
<a name="3.3 Hadoop(YARN)环境搭建"></a>
<a name="3.3.1 修改配置">3.3.1 修改配置</a>
进入 ${HADOOP_HOME}/etc/hadoop/
目录下,修改以下配置:
1. mapred-site.xml
# 如果没有mapred-site.xml,则拷贝一份样例文件后再修改
cp mapred-site.xml.template mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
2. yarn-site.xml
<configuration>
<property>
<!--配置 NodeManager 上运行的附属服务。需要配置成 mapreduce_shuffle 后才可以在 Yarn 上运行 MapReduce 程序。-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
<a name="3.3.2 启动服务">3.3.2 启动服务</a>
进入 ${HADOOP_HOME}/sbin/
目录下,启动 YARN:
./start-yarn.sh
<a name="3.3.3 验证是否启动成功">3.3.3 验证是否启动成功</a>
方式一:执行 jps
命令查看 NodeManager
和 ResourceManager
服务是否已经启动:
[root@hadoop001 hadoop-2.6.0-cdh5.16.2]# jps
9137 DataNode
9026 NameNode
12294 NodeManager
12185 ResourceManager
9390 SecondaryNameNode
方式二:查看 Web UI 界面,端口号为 8088
:
<div><img src="http://ww1.sinaimg.cn/large/c4d294bfly1gawcteetpvj22bg16qwr9.jpg"/></div>
<a name="四.安装Hbase">四.安装Hbase</a>
HBase 的版本必须要与 Hadoop 的版本兼容,不然会出现各种 Jar 包冲突。这里我 Hadoop 安装的版本为 hadoop-2.6.0-cdh5.16.2
,为保持版本一致,选择的 HBase 版本为 hbase-1.2.0-cdh5.14.2
。所有软件版本如下:
- Hadoop 版本: hadoop-2.6.0-cdh5.16.2
- HBase 版本: hbase-1.2.0-cdh5.14.2
- JDK 版本:JDK 1.8
这里为版本兼容情况
<div align="center"> <img src="http://ww1.sinaimg.cn/large/c4d294bfly1gawbiwzz7bj20r50n2myr.jpg"/></div>
<a name="4.1 软件下载解压">4.1 软件下载解压</a>
下载后进行解压,下载地址:http://archive.cloudera.com/cdh5/cdh/5/
# tar -zxvf hbase-1.2.0-cdh5.14.2.tar.gz
<a name="4.2 配置环境变量">4.2 配置环境变量</a>
# vim /etc/profile
添加环境变量:
export HBASE_HOME=/usr/app/hbase-1.2.0-cdh5.14.2
export PATH=$HBASE_HOME/bin:$PATH
使得配置的环境变量生效:
# source /etc/profile
<a name="4.3 进行HBase相关配置">4.3 进行HBase相关配置</a>
1.修改安装目录下的 conf/hbase-env.sh
,指定 JDK 的安装路径:
# The java implementation to use. Java 1.7+ required.
export JAVA_HOME=/usr/java/jdk1.8.0_201
# 使用外部zookeeper管理hbase
export HBASE_MANAGES_ZK=flase
2.修改安装目录下的 conf/hbase-site.xml
,增加如下配置 (hadoop001 为主机名):
<configuration>
<!--指定 HBase 以分布式模式运行-->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!--指定 HBase 数据存储路径为 HDFS 上的 hbase 目录,hbase 目录不需要预先创建,程序会自动创建-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop001:8020/hbase</value>
</property>
<!--指定 zookeeper 数据的存储位置-->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/zookeeper/data</value>
</property>
<!--指定 Hbase Web UI 默认端口-->
<property>
<name>hbase.master.info.port</name>
<value>60010</value>
</property>
<!--指定外置zookeeper-->
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop001:2181</value>
</property>
</configuration>
3.修改安装目录下的 conf/regionservers
,指定 region servers 的地址,修改后其内容如下:
hadoop001
<a name="4.4 启动Hbase">4.4 启动Hbase</a>
# bin/start-hbase.sh
<a name="4.5 验证是否安装成功">4.5 验证是否安装成功</a>
验证方式一 :使用 jps
命令查看进程。其中 HMaster
,HRegionServer
是 HBase 的进程,HQuorumPeer
是 HBase 内置的 Zookeeper 的进程,其余的为 HDFS 和 YARN 的进程。
[root@hadoop001 conf]# jps
28688 NodeManager
25824 GradleDaemon
10177 Jps
22083 HRegionServer
20534 DataNode
20807 SecondaryNameNode
18744 Main
20411 NameNode
21851 HQuorumPeer
28573 ResourceManager
21933 HMaster
验证方式二 :访问 HBase Web UI 界面,需要注意的是 1.2 版本的 HBase 的访问端口为 60010
<div><img src="http://ww1.sinaimg.cn/large/c4d294bfly1gawcusk23aj22bc170ail.jpg"/></div>
<a name="五.安装Phoenix">五.安装Phoenix</a>
Phoenix
是 HBase 的开源 SQL 中间层,它允许你使用标准 JDBC 的方式来操作 HBase 上的数据。在 Phoenix
之前,如果你要访问 HBase,只能调用它的 Java API,但相比于使用一行 SQL 就能实现数据查询,HBase 的 API 还是过于复杂。Phoenix
的理念是 we put sql SQL back in NOSQL
,即你可以使用标准的 SQL 就能完成对 HBase 上数据的操作。同时这也意味着你可以通过集成 Spring Data JPA
或 Mybatis
等常用的持久层框架来操作 HBase。
其次 Phoenix
的性能表现也非常优异,Phoenix
查询引擎会将 SQL 查询转换为一个或多个 HBase Scan,通过并行执行来生成标准的 JDBC 结果集。它通过直接使用 HBase API 以及协处理器和自定义过滤器,可以为小型数据查询提供毫秒级的性能,为千万行数据的查询提供秒级的性能。同时 Phoenix 还拥有二级索引等 HBase 不具备的特性,因为以上的优点,所以 Phoenix
成为了 HBase 最优秀的 SQL 中间层。
<a name="5.1 下载并解压">5.1 下载并解压</a>
官方针对 Apache 版本和 CDH 版本的 HBase 均提供了安装包,按需下载即可。官方下载地址: http://phoenix.apache.org/download.html
# 下载
wget http://mirror.bit.edu.cn/apache/phoenix/apache-phoenix-4.14.0-cdh5.14.2/bin/apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz
# 解压
tar tar apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz
<a name="5.2 拷贝Jar包">5.2 拷贝Jar包</a>
按照官方文档的说明,需要将 phoenix server jar
添加到所有 Region Servers
的安装目录的 lib
目录下。
这里由于我搭建的是 HBase 伪集群,所以只需要拷贝到当前机器的 HBase 的 lib 目录下。如果是真实集群,则使用 scp 命令分发到所有 Region Servers
机器上。
cp /usr/app/apache-phoenix-4.14.0-cdh5.14.2-bin/phoenix-4.14.0-cdh5.14.2-server.jar /usr/app/hbase-1.2.0-cdh5.14.2/lib
<a name="5.3 重启 Region Servers">5.3 重启 Region Servers</a>
# 停止Hbase
stop-hbase.sh
# 启动Hbase
start-hbase.sh
<a name="5.4 启动Phoenix">5.4 启动Phoenix</a>
在 Phoenix 解压目录下的 bin
目录下执行如下命令,需要指定 Zookeeper 的地址:
- 如果 HBase 采用 Standalone 模式或者伪集群模式搭建,则默认采用内置的 Zookeeper 服务,端口为 2181;
- 如果是 HBase 是集群模式并采用外置的 Zookeeper 集群,则按照自己的实际情况进行指定。
# ./sqlline.py hadoop001:2181
<a name="5.5 验证是否安装成功">5.5 验证是否安装成功</a>
启动后则进入了 Phoenix 交互式 SQL 命令行,可以使用 !table
或 !tables
查看当前所有表的信息
<div><img src="http://ww1.sinaimg.cn/large/c4d294bfly1gawcxfmjfjj227m0xsdz6.jpg"/></div>