通过Oozie 4.1.0.3在Spark中运行Hive查询

时间:2015-10-13 11:15:24

标签: hadoop spark-hive

使用Oozie版本4.1.0.3在Spark中运行Hive Query时获取表未找到异常,作为java操作。

从hdfs路径复制hive-site.xml和hive-default.xml

使用的workflow.xml:

<start to="scala_java"/>
<action name="scala_java">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<job-xml>${nameNode}/user/${wf:user()}/${appRoot}/env/devbox/hive-  site.xml</job-xml>
<configuration>
<property>
<name>oozie.hive.defaults</name>
<value>${nameNode}/user/${wf:user()}/${appRoot}/env/devbox/hive-default.xml</value>
</property>
<property>
<name>pool.name</name>
<value>${etlPoolName}</value>
</property>
<property>
<name>mapreduce.job.queuename</name>
<value>${QUEUE_NAME}</value>
</property>
</configuration>
<main-class>org.apache.spark.deploy.SparkSubmit</main-class>
<arg>--master</arg>
<arg>yarn-cluster</arg>
<arg>--class</arg>
<arg>HiveFromSparkExample</arg>
<arg>--deploy-mode</arg>
<arg>cluster</arg>
<arg>--queue</arg>
<arg>testq</arg>
<arg>--num-executors</arg>
<arg>64</arg>
<arg>--executor-cores</arg>
<arg>5</arg>
<arg>--jars</arg>
<arg>datanucleus-api-jdo-3.2.6.jar,datanucleus-core-3.2.10.jar,datanucleus-    rdbms-3.2.9.jar</arg>
<arg>TEST-0.0.2-SNAPSHOT.jar</arg>
<file>TEST-0.0.2-SNAPSHOT.jar</file>
</java>

INFO yarn.ApplicationMaster:最终应用状态:FAILED,exitCode:15,(原因:用户类引发异常:找不到表test_hive_spark_t1)

线程“驱动程序”中的异常org.apache.hadoop.hive.ql.metadata.InvalidTableException:找不到表test_hive_spark_t1

    at org.apache.hadoop.hive.ql.metadata.Hive.getTable(Hive.java:980)

    at org.apache.hadoop.hive.ql.metadata.Hive.getTable(Hive.java:950)

    at org.apache.spark.sql.hive.HiveMetastoreCatalog.lookupRelation(HiveMetastoreCatalog.scala:79)

    at org.apache.spark.sql.hive.HiveContext$$anon$1.org$apache$spark$sql$catalyst$analysis$OverrideCatalog$$super$lookupRelation(HiveContext.scala:255)

    at org.apache.spark.sql.catalyst.analysis.OverrideCatalog$$anonfun$lookupRelation$3.apply(Catalog.scala:137)

    at org.apache.spark.sql.catalyst.analysis.OverrideCatalog$$anonfun$lookupRelation$3.apply(Catalog.scala:137)

    at scala.Option.getOrElse(Option.scala:120)

    at org.apache.spark.sql.catalyst.analysis.OverrideCatalog$class.lookupRelation(Catalog.scala:137)
    at org.apache.spark.sql.hive.HiveContext$$anon$1.lookupRelation(HiveContext.scala:255)

2 个答案:

答案 0 :(得分:0)

A。 X-default 配置文件仅供用户参考;它们是在安装时从JAR中的硬编码默认值创建的。

包含有用信息的 X-site 配置文件,例如如何连接到Metastore(默认为“只是启动嵌入式Derby DB,里面没有数据” ...可能会解释“找不到表格的消息!”

B。 Hadoop组件在CLASSPATH中搜索 X-site 配置文件 ;如果他们在那里找不到,他们会默默地回退到默认

所以你必须告诉Oozie通过<file>指令将它们下载到本地CWD。 (除了显式的Hive Action,它使用另一个显式的约定,用于其特定的 hive-site ,但这不是这种情况)

答案 1 :(得分:0)

  1. 不需要hive-default.xml。
  2. 创建一个自定义的hive-site.xml,它仅具有hive.metastore.uris属性。
  3. 将--files hive-site.xml中的自定义hive-site.xml作为spark参数传递。
  4. 删除job-xml属性和oozie-hive-defaults。