使用Oozie调度Spark访问HBase以及Hive
前提条件
已经配置完成导入并配置Oozie样例工程的前提条件
开发环境配置
- 参考获取MRS应用开发样例工程,获取样例代码解压目录中“src\oozie-examples\oozienormal-examples”目录下的样例工程文件夹中OozieMapReduceExample、OozieSparkHBaseExample和OozieSparkHiveExample样例工程。
- 修改样例工程中的如下参数,请参考表1。
表1 文件参数修改列表 文件名
参数名
值
取值样例
src\main\resources\application.properties
submit_user
提交任务的用户
developuser
oozie_url_default
https://Oozie业务IP:21003/oozie/
https://10.10.10.233: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\oozienormal-examples\OozieSparkHBaseExample”,然后执行mvn clean package -DskipTests,打包成功之后在target目录里面。
- 根据上面配置的路径,在HDFS客户端上新建如下文件夹:
/user/developuser/myjobs/apps/spark2x/lib
/user/developuser/myjobs/apps/spark2x/hbase
/user/developuser/myjobs/apps/spark2x/hive
- 将表格中的文件上传到对应目录,请参考表2。
表2 文件上传列表 初始文件路径
文件
上传目标目录
Spark客户端目录(如“/opt/client/Spark2x/spark/conf”)
hive-site.xml
HDFS的“/user/developuser/myjobs/apps/spark2x”目录
hbase-site.xml
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文件路径进行修改。
- 修改上传后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”。
- 执行以下命令创建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);
- 使用hbase shell,执行以下命令创建HBase表。
create 'SparkHBase',{NAME=>'cf1'}
put 'SparkHBase','01','cf1:name','Max'
put 'SparkHBase','01','cf1:age','23'