使用Oozie调度Spark2x访问HBase以及Hive
前提条件
已经配置完成导入并配置Oozie样例工程的前提条件。
开发环境配置
- 参考获取MRS应用开发样例工程,获取样例代码解压目录中“src\oozie-examples”目录下的样例工程文件夹“ooziesecurity-examples”中的OozieSparkHBaseExample和OozieSparkHiveExample样例工程。
- 将准备MRS应用开发用户时得到的keytab文件“user.keytab”和“krb5.conf”用户认证凭据文件复制到OozieSparkHBaseExample和OozieSparkHiveExample样例工程的“\src\main\resources”路径。
- 修改样例工程中的如下参数,请参考表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目录里面。
- 根据3配置的路径,在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
- 将表格中的文件上传到对应目录,请参考表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文件路径进行修改。
- 修改上传后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”。
- 如果开启了ZooKeeper SSL,需要在上传后HDFS的“/user/developuser/myjobs/apps/spark2x”目录下的“hbase-site.xml”文件中新增以下内容:
<property> <name>HBASE_ZK_SSL_ENABLED</name> <value>true</value> </property>
- 执行以下命令创建Hive表。
可以在Hue WebUI中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'