一、OS环境准备
1.主机名
# vim /etc/hosts
10.10.100.240 phoenix
2.ssh登录互信认证
# ssh-keygen -t rsa 一路回车
# cd /root/.ssh/
# cat id_rsa.pub >>authorized_keys 配置本机互信
# ssh-copy-id 其他节点的hostname 与其他设备互信命令(多节点时使用)
3.关闭防火墙
# systemctl stop {iptables,firewalld}
# systemctl disable {iptables,firewalld}
4.关闭selinux
永久关闭:
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
临时关闭:
# setenforce 0
# getenforce 查看selinux状态
二、配置JAVA环境
1. 下载jdk包:https://www.oracle.com/java/technologies/downloads/
可以通过Java archive查找jdk8版本使用,较为经典稳定
2.配置java环境,解压jdk安装包到 /usr/local 目录下,配置环境变量
# tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local/
# vim /etc/profile
在文件尾部添加如下内容
#/usr/local/jdk1.8.0_221/
export JAVA_HOME=/usr/local/jdk1.8.0_221/
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# source /etc/profile
3.查看java环境是否配置成功
三、配置伪分布式Hadoop环境
1.下载包:http://archive.apache.org/dist/hadoop/core/hadoop-3.2.3/
2.解压hadoop安装包到 /home 目录下
# tar -zxvf hadoop-3.2.3.tar.gz -C /home/
3.创建hadoop用户,指定家目录为/home/hadoop-3.2.3/
# useradd -u hadoop -d /home/hadoop-3.2.3/
# chown -R hadoop.hadoop /home/hadoop-3.2.3/
# chmod -R 755 /home/hadoop-3.2.3/
4.修改 hadoop 配置文件,配置hadoop需要使用的java环境
# vim /home/hadoop-3.2.3/etc/hadoop/hadoop-env.sh
大概55行配置:
export JAVA_HOME=/usr/local/jdk1.8.0_221/
# vi /home/hadoop-3.2.3/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop-3.2.3/data/dfs/name</value>
</property>
<property>
<name>dfs.datanode.name.dir</name>
<value>file:/home/hadoop-3.2.3/data/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions</name>
<value>1</value>
</property>
</configuration>
# vim /home/hadoop-3.2.3/etc/hadoop/core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop-3.2.3/data/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://phoenix:9000</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
</configuration>
# vim /home/hadoop-3.2.3/etc/hadoop/slaves
写入
phoenix
5.修改 hadoop 环境变量
# vim /etc/profile
export HADOOP_HOME=/home/hadoop-3.2.3
export PATH=$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH
# source /etc/profile
6.格式化并启动 hadoop
格式化命令只能 1 次,多次执行就会造成 namenode 与 datanode 的 ID 值不一致,namenode 无法启动
# hdfs namenode -format 或者
# hadoop namenode -format
使用hadoop用户启动
# su - hadoop
如果su进来bash变成如下(说明hadoop用户没有环境变量文件):
-bash-4.2$
解决:
# cp /etc/skel/.bash* /home/hadoop-3.2.3/
重新进入hadoop用户
#su - hadoop
$ start-all.sh
$ jps -ml
7.登录页面查看hdfs
http://10.10.100.240:9870/dfshealth.html#tab-overview
注:
Hadoop2.x的namenode界面访问端口默认是:50070
Hadoop3.x的namenode界面访问端口默认是:9870
可以通过hdfs-site.xml修改
# vim /home/hadoop-3.2.3/etc/hadoop/hdfs-site.xml
<property>
<name>dfs.namenode.http-address</name>
<value>0.0.0.0:50070</value>
</property>
7.登录页面查看hadoop集群
http://10.10.100.240:8088/cluster
四、Hbase部署在伪分布式Hadoop上
注:网上大量的资料说明部署Hbase单机版本不需要使用hadoop组件
1.下载hbase二进制包:https://archive.apache.org/dist/hbase/ ,或者使用wget命令下载:
推荐使用hbase-2.2.4版本
2.解压hbase二进制包到 /home 目录下,配置权限
# tar -zxvf hbase-2.2.4-bin.tar.gz -C /home/
# chown -R hadoop.hadoop /home/hbase-2.2.4/
# chmod -R 755 /home/hbase-2.2.4/
3.设置hbase配置文件,设置hbase运行的java环境
# vim /home/hbase-2.2.4/conf/hbase-env.sh
大概在68行配置
export JAVA_HOME=/usr/local/jdk1.8.0_221/
注:127行的默认配置(# export HBASE_MANAGES_ZK=true)含义为:hbase启动使用自建zookeeper,如果不使用hbase自建的zookeeper,需要额外下载zookeepr包部署。
# vim /home/hbase-2.2.4/conf/hbase-site.xml
添加以下内容
<configuration>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hbase-2.2.4/zookeeper</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://phonenix:9000/hbase</value>
</property>
<!--
<property>
<name>dfs.replication</name>
<value>true</value>
</property>
-->
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
</configuration>
默认情况下 <configuration></configuration> 节点里面是空的,需要添加 hbase 和 ZooKeeper 数据写入的目录:
提示:这两个目录地址可以根据需求自由设置。另外,这两个文件夹无需事先创建,HBase 会自动创建好。也可以自己创建好
注意ZooKeeper数据文件路径要写,百度上很多教程没写,自带zookeeper没启动,报各种错
# vi /home/hbase-2.2.4/conf/regionservers
写入
phoenix
4.配置hbase环境变量,启动hbase
# vim /etc/profile
export HBASE_HOME=/home/hbase-2.2.4
export PATH=$HBASE_HOME/bin:$PATH
# source /etc/profile
使用hadoop用户启动
# su - hadoop
$ start-hbase.sh
$ jps -ml
注:一定要使用hadoop用户启动,否则可能会出现 HMaster 或者 HRegionServer 连接不上zookeeper,导致报错HMaster exiting;
如果zookeeper连接不上,建议清空zookeeper配置尝试重新启动 Hbase;
# rm -rf /home/hbase-2.2.4/zookeeper/*
5.登录hbase管理页面
http://10.10.100.240:16010/master-status
注:生产环境最好在防火墙上把2181,16000,16010,16020端口都开放,否则访问ui界面和java api调用不通报各种错
附:
1,启动命令行工具
执行如下命令启动 HBase 的 shell 命令行工具:
# hbase shell
2,创建、查看表
(1)使用 create 命令创建一个新表(这里表名称为 test,列簇名为 cf)
> create 'test', 'cf'
(2)使用 list 命令可以列出所有的表:
> list
(3)使用 describe 命令查看详细信息,包括配置默认值:
> describe 'test'
3,插入、查询数据
(1)要将数据放入表中,可以使用 put 命令,比如下面命令连续插入 3 条数据:
> put 'test', 'row1', 'cf:a', 'value1'
> put 'test', 'row2', 'cf:b', 'value2'
> put 'test', 'row3', 'cf:c', 'value3'
(2)使用 scan 命令可以查看表中的所有数据:
> scan 'test'
(3)使用 get 命令则可以获取单行的数据:
> get 'test', 'row1'
4,禁用、删除表
(1)如果要删除表或更改其设置,以及在某些其他情况下,则需要先使用 disable 命令禁用该表:
> disable 'test'
(2)如果表被禁用,可以使用 enable 命令重新启用它:
> enable 'test'
(3)将表禁用后,我们就可以使用 drop 命令删除表:
> drop 'test'
五、搭建Phoenix
1,什么是 Phoenix?
- Phoenix 是构建在 HBase 上的一个 SQL 层,能让我们用标准的 JDBC APIs 而不是 HBase 客户端 APIs 来创建表,插入数据和对 HBase 数据进行查询。
- Phoenix 完全使用 Java 编写,作为 HBase 内嵌的 JDBC 驱动。Phoenix 查询引擎会将 SQL 查询转换为一个或多个 HBase 扫描,并编排执行以生成标准的 JDBC 结果集。
- Phoenix 直接使用 HBase API、协同处理器与自定义过滤器,对于简单查询来说,其性能量级是毫秒,对于百万级别的行数来说,其性能量级是秒。
2,Phoenix 与 HBase 的关系
(1)Phoenix 与 HBase 中的表是独立的,两者之间没有必然的关系。
- Phoenix 与 HBase 集成后会创建六张系统表:SYSTEM.CATALOG、SYSTEM.FUNCTION、SYSTEM.LOG、SYSTEM.SEQUENCE、SYSTEM.STATS,其中 SYSTEM.CATALOG 表用于存放 Phoenix 创建表时的元数据。
- Phoenix 创建表时会自动调用 HBase 客户端创建相应的表,并且在 SYSTEM.CATALOG 系统表中记录 Phoenix 创建表时的元数据,其主键的值对应 HBase 的 RowKey,非主键的列对应 HBase 的 Column(列族不指定时为 0,且列会进行编码)
(2)如果是通过 Phoenix 创建的表,那么必须通过 Phoenix 客户端来对表进行操作,因为通过 Phoenix 创建的表其非主键的列会进行编码。
3,准备工作
由于 Phoenix 是内嵌在 HBase 的 JDBC 驱动,因此我们先要安装 JDK、HBase 和 Zookeeper(以上已经安装好),并配置好 JAVA_HOME 环境变量。
4,下载 Phoenix 安装包
(1)首先访问 Phoenix 官网(https://phoenix.apache.org/download.html)根据 HBase 版本下载相应的安装包:
如果没有上图,就去 Apache Archive 这里下载
(2)将下载下来的压缩包上传到 Master 节点(比如 /home 目录下),执行如下命令进行解压:
# tar -zxvf apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz -C /home
# chown -R hadoop.hadoop /home/apache-phoenix-5.0.0-HBase-2.0-bin/
# chmod -R 755 /home/apache-phoenix-5.0.0-HBase-2.0-bin/
(3)接着进入解压后的目录,将目录下的所有 jar 包拷贝到集群中每个节点(主节点也要拷贝)的 hbase 的 lib 目录下:
注意:网上说只要拷贝 phoenix-5.0.0-HBase-2.0-server.jar 就行了,但我测试发现后面执行 sqlline.py 会一直停在中途,无法成功。同时访问 HBase 的 Web UI 页面可以看到其一直处于 RIT 状态(Regions In Transition)
# cp /home/apache-phoenix-5.0.0-HBase-2.0-bin/*.jar /home/hbase-2.2.4/lib/
(4)同时将 hbase/conf 目录下 hbase-site.xml 文件放到 phoenix 的 bin 目录下:
# cp /home/hbase-2.2.4/conf/hbase-site.xml /home/apache-phoenix-5.0.0-HBase-2.0-bin/bin
5,配置环境变量
(1)执行如下命令编辑 profile 文件:
# vim /etc/profile
# For Phoenix
export PHOENIX_HOME=/home/apache-phoenix-5.0.0-HBase-2.0-bin
export PHOENIX_CLASSPATH=$PHOENIX_HOME
export PATH=$PHOENIX_HOME/bin:$PATH
# source /etc/profile
6,重启 HBase
# stop-hbase.sh
# start-hbase.sh
7,启动 Phoenix
(1)执行如下命令进入 phoenix 的终端(启动脚本 sqlline.py 参数是 Zookeeper 节点);
# sqlline.py 10.10.100.240:2181
(2)首次进入 phoenix 终端会自动建立的 phoenix 系统表,我们执行如下命令可以查看当前所有的表:
> !table
(3)执行如下命令则可退出 phoenix 的终端:
> !exit
(4)访问 HBase 的 Web UI 页面也可以看到新创建的这些表: