
# 使用DBeaver访问Phoenix
#### 应用场景
DBeaver是一个SQL客户端和数据库管理工具。对于关系数据库，使用JDBC API通过JDBC驱动程序与数据库交互。对于其他数据库（NoSQL），使用专有数据库驱动程序。
本章节以DBeaver 6.3.5版本为例，讲解如何使用DBeaver访问MRS 3.1.0未开启Kerberos认证的集群，且该集群的HBase服务未开启Ranger鉴权。
#### 方案架构
HBase以表的形式存储数据，数据模型如[图 HBase数据模型]所示。表中的数据划分为多个Region，并由Master分配给对应的RegionServer进行管理。
每个Region包含了表中一段RowKey区间范围内的数据，HBase的一张数据表开始只包含一个Region，随着表中数据的增多，当一个Region的大小达到容量上限后会分裂成两个Region。可以在创建表时定义Region的RowKey区间，或者在配置文件中定义Region的大小。
图1HBase数据模型   
![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002091545646.png "点击放大")
Phoenix是构建在HBase之上的一个SQL中间层，提供一个客户端可嵌入的JDBC驱动，Phoenix查询引擎将SQL输入转换为一个或多个HBase scan，编译并执行扫描任务以产生一个标准的JDBC结果集。
#### 约束与限制
- 已安装DBeaver 6.3.5版本，DBeaver软件下载链接为：<https://dbeaver.io/files/6.3.5/dbeaver-ce-6.3.5-x86_64-setup.exe>。
- 已安装JDK 1.8.0_*x。*
 
#### 步骤一：配置DBeaver安装环境
1. 向DBeaver安装目录下的"dbeaver.ini"文件中增加JDK 1.8.0_*x* 的bin目录，例如：C:\\Program Files\\Java\\jdk1.8.0_121\\bin，则新增如下内容：
   图2新增JDK的bin目录   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002124997441.png "点击放大") 
2. 在<https://archive.apache.org/dist/phoenix/apache-phoenix-5.0.0-HBase-2.0/bin/apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz>中下载Phoenix软件包并解压，获取"phoenix-5.0.0-HBase-2.0-client.jar"。
3. 创建并购买一个包含HBase组件的MRS 3.1.0未开启Kerberos认证的集群，详情可参考[创建MRS集群](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0513.html)。
4. 安装包含HBase的客户端，并从客户端安装节点上的"*客户端安装目录*/HBase/hbase/conf"目录下载"hbase-site.xml"文件。使用压缩软件打开获取到的"phoenix-5.0.0-HBase-2.0-client.jar"，将"hbase-site.xml"拖拽到该Jar文件中。
 
#### 步骤二：在DBeaver配置访问Phoenix参数
1. 打开DBeaver，选择"文件 \> 新建 \> DBeaver \> 数据库连接"。
   图3创建数据库连接   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000001976400028.png "点击放大") 
2. 单击"下一步"，在选择新连接类型界面选中"Apache Phoenix"并单击"下一步"。
   图4选择数据连接类型   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002012960441.png) 
3. 单击"编辑驱动设置"。
   图5编辑驱动设置   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002012839925.png "点击放大") 
4. 单击"添加文件"，选择准备好的"phoenix-5.0.0-HBase-2.0-client.jar"，如果有多个驱动包，需先删除，只保留手动添加的"phoenix-5.0.0-HBase-2.0-client.jar"。
   图6删除原有的驱动包   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000001976240316.png "点击放大")
   图7添加Phoenix Jar包   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000001976400032.png "点击放大") 
5. 单击"找到类"，加载完成后在左侧框中选择"org.apache.phoenix.jdbc.PhoenixDriver"。
   图8加载驱动类   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002012962049.png "点击放大") 
6. 添加Zookeeper Base Path。
   1. 登录FusionInsight Manager，选择"集群 \> 服务 \> HBase"，单击"HMaster WebUI"右侧的超链接，登录HBase WebUI界面，搜索"Zookeeper Base Path"，并获取该值，如下图所示"Zookeeper Base Path"的值为"/hbase"：
      图9查看Zookeeper Base Path   
      ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002012839933.png "点击放大") 
   
   2. 将"ZooKeeper Base Path"值配置到URL模板中，即在原有的URL地址后面增加":/hbase"即可，并单击确定：
      图10配置URL模板   
      ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000001976240320.png "点击放大") 
    
7. 配置EIP。如果本地Windows与集群之间网络不通，需要为每个HBase节点以及ZooKeeper节点配置EIP，并且在本地Windows的hosts文件添加所有节点的公网IP对应主机域名的映射关系，例如： ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000001976400036.png "点击放大")
   ![](https://support.huaweicloud.com/bestpractice-mrs/public_sys-resources/note_3.0-zh-cn.png)
   如果使用的是Windows云服务器，并且与集群的网络是通的，则无需配置EIP。
   
8. 登录FusionInsight Manager，选择"集群 \> 服务 \> ZooKeeper \> 实例"。 选择任一节点，将该节点对应的EIP填入主机框中（如果使用的是Windows云服务器，并且与集群的网络是通的，直接填写节点的业务IP地址即可）。
   图11配置主机   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002012960461.png "点击放大") 
9. 单击"测试连接"，如[图10 测试连接]所示表示对接成功，单击"确定"。
   图12测试连接   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002012839937.png) 
10. 以客户端安装用户登录安装HBase客户端的节点，执行以下命令创建新的命名空间*MY_NS* ：
    **cd** *客户端安装目录*
    **source bigdata_env**
    **hbase shell**
    **create_namespace "** *MY_NS* **"**
    
 
#### 步骤三：在DBeaver验证连接结果
1. 打开DBeaver，选择"SQL编辑器 \> 新建SQL编辑器"，即可执行相关SQL语句，例如：
   1. 在编辑器中输入以下命令并选择"SQL 编辑器 \> 执行 SQL 语句"，即可在**default** 中创建表*TEST* ：
      **CREATE TABLE IF NOT EXISTS** *TEST* **(id VARCHAR PRIMARY KEY, name VARCHAR);**
      **UPSERT INTO TEST(id,name) VALUES ('1','Jamie');**
      
   
   2. 在编辑器中输入以下命令并选择"SQL 编辑器 \> 执行 SQL 语句"，即可在*MY_NS* 中创建表*TEST* 并插入数据：
      **CREATE TABLE IF NOT EXISTS** *MY_NS.TEST* **(id integer not null primary key, name varchar);**
      **UPSERT INTO** *MY_NS.TEST* **VALUES(1,'John');**
      **UPSERT INTO** *MY_NS.TEST* **VALUES(2,'Tom');**
      **UPSERT INTO** *MY_NS.TEST* **VALUES(3,'Manson');**
      **UPSERT INTO** *MY_NS.TEST* **VALUES(4,'Aurora');**
      
    
2. 右键单击连接名称，单击"刷新"，再单击连接名称左侧的![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002125157209.png)，即可查看在**default** 和*MY_NS* 中新建的表：
   图13查看表   
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002089597784.png) 
 
