
# 在Linux环境中调测HBase应用
#### 操作场景
HBase应用程序支持在安装HBase客户端的Linux环境中运行。在程序代码完成开发后，您可以上传Jar包至Linux环境中运行应用。
MRS 3.6.0-LTS及之后版本的HBase客户端仅支持JDK 17和JDK 8，如果需要在Linux中调测JDK 21版本的程序，仅支持非客户端运行方式，具体操作请参见[未安装客户端时编译并运行程序]。
#### 前提条件
- 已安装客户端时：
  - 已安装HBase客户端。
  
  - 当客户端所在主机不是集群中的节点时，需要在客户端所在节点的**hosts**文件中设置主机名和IP地址映射。主机名和IP地址请保持一一对应。
   
- 未安装HBase客户端时：
  - Linux环境已安装JDK，版本号需要和IntelliJ IDEA导出Jar包使用的JDK版本一致。
  
  - 当Linux环境所在主机不是集群中的节点时，需要在节点的**hosts**文件中设置主机名和IP地址映射。主机名和IP地址请保持一一对应。
   
 
#### 已安装客户端时编译并运行程序
1. 导出Jar包。 
   构建jar包方式有以下两种：
   - 方法一： 选择"Maven \> *样例工程名称* \> Lifecycle \> clean"，双击"clean"运行maven的clean命令。
     选择"Maven \> *样例工程名称* \> Lifecycle \> install"，双击"install"运行maven的install命令。
     图1maven工具clean和install   
     ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001252531670.png) 
   
   
   
   - 方法二：在IDEA的下方Terminal窗口进入"pom.xml"所在目录，手动输入**mvn clean install** 命令进行编译。
     图2idea termial输入"mvn clean install"   
     ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001299051149.png "点击放大")
     编译完成，打印"Build Success"，生成target目录，生成jar包在target目录中。
     图3编译完成，生成jar包   
     ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001252212186.png "点击放大") 
   
   
   
   
2. 是否运行HBase/Phoenix对接SpringBoot样例： 
   - 是，执行以下步骤运行样例：
     1. 在Linux环境新建运行目录，将"target"目录下的"hbase-springboot-\*.jar"放到该路径下，并上传配置文件到[1](https://support.huaweicloud.com/devg-lts-mrs/mrs_07_290073.html#mrs_07_290073__li566513386597)配置的对应路径下。
     
     2. 切换到运行目录，执行以下命令，运行Jar包。 **java -jar hbase-springboot-\*.jar**
        
      
   
   - 否，执行[3]。
   
   
   
   
3. 导出样例项目依赖的jar包。
   
   在IDEA的下方Terminal窗口或其他命令行工具进入"pom.xml"所在目录。
   执行命令**mvn dependency:copy-dependencies -DoutputDirectory=lib**。
   在"pom.xml"所在目录将生成lib文件夹，其中包含样例项目所依赖的jar包。
   
   
4. 执行Jar包。 
   1. 在Linux客户端下执行Jar包的时候，需要用安装用户切换到客户端目录： **cd** *$BIGDATA_CLIENT_HOME*
      ![](https://support.huaweicloud.com/devg-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
      "$BIGDATA_CLIENT_HOME"为HBase客户端安装目录，例如"/opt/client"。
      
   
   2. 然后执行： **source bigdata_env**
      ![](https://support.huaweicloud.com/devg-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
      启用多实例功能后，为其他HBase服务实例进行应用程序开发时还需执行以下命令，切换指定服务实例的客户端。
      例如HBase2：**source /opt/client/HBase2/component_env**。
      
   
   3. 将应用开发环境中生成的样例项目Jar包（非依赖jar包）上传至客户端运行环境的"$BIGDATA_CLIENT_HOME/HBase/hbase/lib"目录，根据具体样例项目"README.md"检查"$BIGDATA_CLIENT_HOME/HBase/hbase/conf"目录，将样例工程中配置文件及认证文件复制至该目录。
   
   4. 进入目录"$BIGDATA_CLIENT_HOME/HBase/hbase"，执行以下命令运行Jar包。 **hbase** *com.huawei.bigdata.hbase.examples.TestMain*
      其中，*hbase com.huawei.bigdata.hbase.examples.TestMain*为举例，具体以实际样例代码为准。
      
   
   
   
   
 
 #### 未安装客户端时编译并运行程序
1. 导出Jar包。
   
   构建jar包方式有以下两种：
   - 方法一： 选择"Maven \> *样例工程名称* \> Lifecycle \> clean"，双击"clean"运行maven的clean命令。
     选择"Maven \> *样例工程名称* \> Lifecycle \> install"，双击"install"运行maven的install命令。
     图4maven工具clean和install   
     ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001252531670.png) 
   
   
   
   - 方法二：在IDEA的下方Terminal窗口进入"pom.xml"所在目录，手动输入**mvn clean install** 命令进行编译。
     图5idea termial输入"mvn clean install"   
     ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001299051149.png "点击放大")
     编译完成，打印"Build Success"，生成target目录，生成jar包在target目录中。
     图6编译完成，生成jar包   
     ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001252212186.png "点击放大") 
   
   
   
   
2. 是否运行HBase/Phoenix对接SpringBoot样例： 
   - 是，执行以下步骤运行样例：
     1. 在Linux环境新建运行目录，将"target"目录下的"hbase-springboot-\*.jar"放到该路径下，并上传配置文件到[1](https://support.huaweicloud.com/devg-lts-mrs/mrs_07_290073.html#mrs_07_290073__li566513386597)配置的对应路径下。
     
     2. 切换到运行目录，执行以下命令，运行Jar包。 **java -jar hbase-springboot-\*.jar**
        
      
   
   - 否，执行[3]。
   
   
   
   
3. 准备依赖的Jar包和配置文件。
   
   1. 在Linux环境新建目录，例如"/opt/test"，并创建子目录"lib"和"conf"。将样例工程中"lib"的Jar包导出，导出步骤请参考[3]，以及[1]导出的Jar包，上传到Linux的"lib"目录。将样例工程中"conf"的配置文件上传到Linux中"conf"目录。
   
   2. 在"/opt/test"根目录新建脚本"run.sh"，修改内容如下，根据运行的JDK版本选择最终的执行方式，例如需要使用JDK 17/21执行，则取消"Using JDK 17/21"下一行代码注释，并注释"Using JDK 8"的下一行代码，并保存：
      ```
      #!/bin/sh
      BASEDIR=`cd $(dirname $0);pwd`
      cd ${BASEDIR}
      for file in ${BASEDIR}/lib/*.jar
      do
      i_cp=$i_cp:$file
      echo "$file"
      done
      for file in ${BASEDIR}/conf/*
      do
      i_cp=$i_cp:$file
      done
      #Using JDK 17/21
      #java --add-modules jdk.unsupported --add-opens java.base/java.nio=ALL-UNNAMED -cp .${i_cp} com.huawei.bigdata.hbase.examples.TestMain
      #Using JDK 8
      java -cp .${i_cp} com.huawei.bigdata.hbase.examples.TestMain
      ```
      其中，*com.huawei.bigdata.hbase.examples.TestMain*为举例，具体以实际样例代码为准。
      
   
   
   
   
4. 切换到"/opt/test"，执行以下命令，运行Jar包。 
   **sh run.sh**
   
   
 
#### 查看Linux调测结果
HBase应用程序运行完成后，可通过如下方式查看应用程序的运行情况。
- 通过运行结果查看应用程序运行情况。
- 通过HBase日志获取应用程序运行情况。
- 登录HBase WebUI查看应用程序运行情况。可参见"更多信息 \> 对外接口 \> Web UI "。
- 通过HBase shell命令查看应用程序运行情况。可参见"更多信息 \> 对外接口 \> Shell "。
各样例程序运结果如下：
- 通过运行日志可查看应用提交后的执行详情，例如，hbase-example样例运行成功后，显示信息如下：
  ```
  2020-07-13 14:36:12,736 INFO  [main] basic.CreateTableSample: Create table sampleNameSpace:sampleTable successful!
  2020-07-13 14:36:15,426 INFO  [main] basic.ModifyTableSample: Modify table sampleNameSpace:sampleTable successfully.
  2020-07-13 14:36:16,708 INFO  [main] basic.MultiSplitSample: Mmulti split table sampleNameSpace:sampleTable successfully.
  2020-07-13 14:36:17,299 INFO  [main] basic.PutDataSample: Successfully put 9 items data into sampleNameSpace:sampleTable.
  2020-07-13 14:36:18,992 INFO  [main] basic.ScanSample: Scan data successfully.
  2020-07-13 14:36:20,532 INFO  [main] basic.DeleteDataSample: Successfully delete data from table sampleNameSpace:sampleTable.
  2020-07-13 14:36:21,006 INFO  [main] acl.AclSample: Grant ACL for table sampleNameSpace:sampleTable successfully.
  2020-07-13 14:36:27,836 INFO  [main] index.CreateIndexSample: Successfully add index for table sampleNameSpace:sampleTable.
  ```
  
- HBase/Phoenix对接SpringBoot运行结果： 在浏览器中访问链接"http://*样例运行节点IP地址* :8080/hbase/HBaseDemo"和"http://*样例运行节点IP地址*:8080/hbase/PhoenixDemo"，IDEA正常打印日志，请求返回"finish HBase"和"finish Phoenix"，如下图所示：
  图7返回"finish HBase"   
  ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001942483597.png "点击放大")
  图8返回"finish Phoenix"   
  ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001906924410.png "点击放大") 
 
