
# 使用Oozie调度Spark访问HBase以及Hive
#### 前提条件
已经配置完成[导入并配置Oozie样例工程](https://support.huaweicloud.com/devg-lts-mrs/mrs_07_160007.html)的前提条件。
#### 开发环境配置
1. 参考[获取MRS应用开发样例工程](https://support.huaweicloud.com/devg-lts-mrs/mrs_07_010002.html)，获取样例代码解压目录中"src\\oozie-examples"目录下的样例工程文件夹"ooziesecurity-examples"中的OozieSparkHBaseExample和OozieSparkHiveExample样例工程。
2. 将[准备MRS应用开发用户](https://support.huaweicloud.com/devg-lts-mrs/mrs_07_020002.html)时得到的keytab文件"user.keytab"和"krb5.conf"用户认证凭据文件复制到OozieSparkHBaseExample和OozieSparkHiveExample样例工程的"\\src\\main\\resources"路径。
3. 修改样例工程中的如下参数，请参考[表1]。
   
    表1文件参数修改列表 
   | 文件名                                                                               | 参数名                       | 值                                        | 取值样例                                                                                                                                                                                                       |
   |:---|:---|:---|:---|
   | src\\main\\resources\\application.properties  | submit_user               | 提交任务的用户                                  | developuser                                                                                                                                                                                                |
   | src\\main\\resources\\application.properties  | oozie_url_default         | https://*Oozie业务IP*:21003/oozie/         | https://10.10.10.176:21003/oozie/                                                                                                                                                                          |
   | src\\main\\resources\\job.properties       | userName                  | 提交任务的用户                                  | developuser                                                                                                                                                                                                |
   | src\\main\\resources\\job.properties       | examplesRoot              | 默认值或根据实际情况修改                             | myjobs                                                                                                                                                                                                     |
   | src\\main\\resources\\job.properties       | oozie.wf.application.path | 默认值或根据实际情况修改                             | ${nameNode}/user/${userName}/${examplesRoot}/apps/spark2x 须知： 需要保证此路径和"src\\main\\resources\\workflow.xml"文件中的\<jar\>标签和\<spark-opts\>标签路径一致。 |
   | src\\main\\resources\\workflow.xml                                                | \<jar\> \</jar\>          | 将"OoizeSparkHBase-1.0.jar"修改成实际打包的jar包名称 | \<jar\>${nameNode}/user/${userName}/${examplesRoot}/apps/spark2x/lib/OoizeSparkHBase-1.0.jar\</jar\>                                                                                                       |
      
   ![](https://support.huaweicloud.com/devg-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   进入项目根目录，比如"D:\\sample_project\\src\\oozie-examples\\ooziesecurity-examples\\OozieSparkHBaseExample"，然后执行**mvn clean package -DskipTests**命令，打包成功之后在target目录里面。
   
   
4. 根据上面配置的路径，在HDFS客户端上新建如下文件夹： 
   **hdfs dfs -mkdir -p** **/user/developuser/myjobs/apps/spark2x/lib**
   **hdfs dfs -mkdir -p /user/developuser/myjobs/apps/spark2x/hbase**
   **hdfs dfs -mkdir -p /user/developuser/myjobs/apps/spark2x/hive**
   
   
5. 将表格中的文件上传到对应目录，请参考[表2]。
   
    表2文件上传列表 
   | 初始文件路径                                                                                     | 文件             | 上传目标目录                                                                                                                                                                                 |
   |:---|:---|:---|
   | Spark客户端目录（如"/opt/client/Spark2x/spark/conf"）                                              | hive-site.xml  | HDFS的"/user/developuser/myjobs/apps/spark2x"目录                                                                                                                                         |
   | Spark客户端目录（如"/opt/client/Spark2x/spark/conf"）                                              | hbase-site.xml | HDFS的"/user/developuser/myjobs/apps/spark2x"目录                                                                                                                                         |
   | [准备MRS应用开发用户](https://support.huaweicloud.com/devg-lts-mrs/mrs_07_020002.html)时得到的keytab文件 | user.keytab    | HDFS的"/user/developuser/myjobs/apps/spark2x"目录                                                                                                                                         |
   | [准备MRS应用开发用户](https://support.huaweicloud.com/devg-lts-mrs/mrs_07_020002.html)时得到的keytab文件 | krb5.conf      | HDFS的"/user/developuser/myjobs/apps/spark2x"目录                                                                                                                                         |
   | Spark客户端目录（如"/opt/client/Spark2x/spark/jars"）                                              | jar包           | Oozie的share HDFS的"/user/oozie/share/lib/spark2x/"目录                                                                                                                                    |
   | 将待使用样例工程的项目打包成jar包,比如OoizeSparkHBase-1.0.jar                                               | jar包           | HDFS的"/user/developuser/myjobs/apps/spark2x/lib/"目录                                                                                                                                    |
   | OozieSparkHiveExample样例工程目录"src\\main\\resources"                                          | workflow.xml   | HDFS的"/user/developuser/myjobs/apps/spark2x/hive/"目录 说明： \<spark-opts\> 中的spark-archive-2x.zip路径需要根据实际HDFS文件路径进行修改。    |
   | OozieSparkHBaseExample样例工程目录"src\\main\\resources"                                         | workflow.xml   | HDFS的"/user/developuser/myjobs/apps/spark2x/hbase/"目录 说明： \<spark-opts\> 中的spark-archive-2x.zip路径需要根据实际HDFS文件路径进行修改。 |
      
   
   
6. 修改上传后HDFS的"/user/developuser/myjobs/apps/spark2x"目录下的"hive-site.xml"中"hive.security.authenticator.manager"参数的值，从"org.apache.hadoop.hive.ql.security.SessionStateUserMSGroupAuthenticator"改为"org.apache.hadoop.hive.ql.security.SessionStateUserGroupAuthenticator"。
7. 如果开启了ZooKeeper SSL，需要在上传后HDFS的"/user/developuser/myjobs/apps/spark2x"目录下的"hbase-site.xml"文件中新增以下内容： 
   ```
   <property>
   <name>HBASE_ZK_SSL_ENABLED</name>
   <value>true</value>
   </property>
   ```
   
   
8. 执行以下命令创建Hive表。 
   可以在Hue UI里Hive面板里面直接输入以下的SQL语句。
   图1执行Hive SQL   
   ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001299212049.png "点击放大")
   **CREATE DATABASE test;**
   **CREATE TABLE IF NOT EXISTS \`test\`.\`usr\` (user_id int comment 'userID',user_name string comment 'userName',age int comment 'age')PARTITIONED BY (country string)STORED AS PARQUET;**
   **CREATE TABLE IF NOT EXISTS \`test\`.\`usr2\` (user_id int comment 'userID',user_name string comment 'userName',age int comment 'age')PARTITIONED BY (country string)STORED AS PARQUET;**
   **INSERT INTO TABLE test.usr partition(country='CN') VALUES(1,'maxwell',45),(2,'minwell',30),(3,'mike',22);**
   **INSERT INTO TABLE test.usr partition(country='USA') VALUES(4,'minbin',35);**
   
   
9. 使用**hbase shell** ，执行以下命令创建HBase表。
   
   **create 'SparkHBase',{NAME=\>'cf1'}**
   **put 'SparkHBase','01','cf1:name','Max'**
   **put 'SparkHBase','01','cf1:age','23'**
   
   
 
