在 HDP 的 spark2 sql 中无法访问 Hive 表

Posted

技术标签:

【中文标题】在 HDP 的 spark2 sql 中无法访问 Hive 表【英文标题】:Hive table not accessible in spark2 sql in HDP 【发布时间】:2018-01-20 02:08:22 【问题描述】:

我正在 HDP 中运行以下工作。

export SPARK-MAJOR-VERSION=2 spark-submit --class com.spark.sparkexamples.Audit --master yarn --deploy-mode cluster \ --files /bigdata/datalake/app/config/metadata.csv BRNSAUDIT_v4.jar dl_raw.ACC /bigdatahdfs/landing/AUDIT/BW/2017/02/27/ACC_hash_total_and_count_20170227.dat TH 20170227

失败并出现以下错误:

找不到表或视图:dl_raw.ACC;第 1 行,第 94 行; '聚合 [count(1) AS rec_cnt#58L, 'count('BRCH_NUM) AS hashcount#59, 'sum('ACC_NUM) AS hashsum#60] +- 'Filter (('trim('country_code) = trim(TH )) && ('from_unixtime('unix_timestamp('substr('bus_date, 0, 11), MM/dd/yyyy), yyyyMMdd) = 20170227)) +- 'UnresolvedRelation dl_raw.`ACC'*

而表存在于 Hive 中,并且可以从 spark-shell 访问。

这是火花会话的代码。

val sparkSession = SparkSession.builder .appName("spark session example") .enableHiveSupport() .getOrCreate() 
sparkSession.conf.set("spark.sql.crossJoin.enabled", "true") 
val df_table_stats = sparkSession.sql("""select count(*) as rec_cnt,count(distinct BRCH_NUM) as hashcount, sum(ACC_NUM) as hashsum 
                                         from dl_raw.ACC 
                                         where trim(country_code) = trim('BW') 
                                         and from_unixtime(unix_timestamp(substr(bus_date,0,11),'MM/dd/yy‌​yy'),'yyyyMMdd')='20‌​170227'
                                      """)

【问题讨论】:

【参考方案1】:

在提交 spark 作业时在 --files 参数中包含 hive-site.xml。

【讨论】:

【参考方案2】:

您还可以将 hive-site.xml 配置文件从 hive-conf 目录复制到 spark-conf 目录。这应该可以解决您的问题。

cp /etc/hive/conf/hive-site.xml /etc/spark2/conf

【讨论】:

以上是关于在 HDP 的 spark2 sql 中无法访问 Hive 表的主要内容,如果未能解决你的问题,请参考以下文章

在 HDP 2.6 上运行的 Zeppelin 0.7.0 上的 Spark2.2 解释器

将 Spark Dataframe 写入 HDP2.6 中的 Hive 可访问表

如何在 HDP 中的 zeppelin-spark2 中将库安装到 python

Spark 仓库 VS Hive 仓库

org.apache.spark.sql.AnalysisException:给定pyspark中的输入列,无法解析'sub_tot`'

如何让独立服务 Zeppelin 看到 Hive?