更新时间:2024-08-03 GMT+08:00

使用Oozie调度Spark访问HBase以及Hive

前提条件

已经配置完成导入并配置Oozie样例工程的前提条件。

开发环境配置

  1. 参考获取MRS应用开发样例工程,获取样例代码解压目录中“src\oozie-examples”目录下的样例工程文件夹“ooziesecurity-examples”中的OozieSparkHBaseExample和OozieSparkHiveExample样例工程。
  2. 准备MRS应用开发用户时得到的keytab文件“user.keytab”和“krb5.conf”用户认证凭据文件复制到OozieSparkHBaseExample和OozieSparkHiveExample样例工程的“\src\main\resources”路径。
  3. 修改样例工程中的如下参数,请参考表1

    表1 文件参数修改列表

    文件名

    参数名

    取值样例

    src\main\resources\application.properties

    submit_user

    提交任务的用户

    developuser

    oozie_url_default

    https://Oozie业务IP:21003/oozie/

    https://10.10.10.176:21003/oozie/

    src\main\resources\job.properties

    userName

    提交任务的用户

    developuser

    examplesRoot

    默认值或根据实际情况修改

    myjobs

    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>

    进入项目根目录,比如“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”目录

    hbase-site.xml

    准备MRS应用开发用户时得到的keytab文件

    user.keytab

    krb5.conf

    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

    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'