
# 使用Oozie调度Spark访问HBase以及Hive
#### 前提条件
已经配置完成[导入并配置Oozie样例工程](https://support.huaweicloud.com/devg-lts-mrs/mrs_07_370007.html)的前提条件
#### 开发环境配置
1. 参考[获取MRS应用开发样例工程](https://support.huaweicloud.com/devg-lts-mrs/mrs_07_010002.html)，获取样例代码解压目录中"src\\oozie-examples\\oozienormal-examples"目录下的样例工程文件夹中OozieMapReduceExample、OozieSparkHBaseExample和OozieSparkHiveExample样例工程。
2. 修改样例工程中的如下参数，请参考[表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.233: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\\oozienormal-examples\\OozieSparkHBaseExample"，然后执行**mvn clean package -DskipTests**，打包成功之后在target目录里面。
   
   
3. 根据上面配置的路径，在HDFS客户端上新建如下文件夹： 
   /user/developuser/myjobs/apps/spark2x/lib
   /user/developuser/myjobs/apps/spark2x/hbase
   /user/developuser/myjobs/apps/spark2x/hive
   
   
4. 将表格中的文件上传到对应目录，请参考[表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"目录                                                                                                                                                                |
   | Spark客户端目录（如"/opt/client/Spark2x/spark/jars"）      | jar包           | Oozie的share HDFS的"/user/oozie/share/lib/spark2x"目录 说明： 请使用Oozie用户上传文件，执行**su - oozie**切换到Oozie用户 上传结束后再重启oozie服务。 |
   | 将待使用样例工程的项目打包成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文件路径进行修改。                            |
      
   
   
5. 修改上传后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"。
6. 执行以下命令创建Hive表。 
   可以在Hue UI里hive面板里面直接输入以下的SQL。
   图1执行Hive SQL命令   
   ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001298931993.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);**
   
   
7. 使用**hbase shell** ，执行以下命令创建HBase表。
   
   **create 'SparkHBase',{NAME=\>'cf1'}**
   **put 'SparkHBase','01','cf1:name','Max'**
   **put 'SparkHBase','01','cf1:age','23'**
   
   
 
