为啥在创建表时出现“需要 Hive 支持”错误?

Posted

技术标签:

【中文标题】为啥在创建表时出现“需要 Hive 支持”错误?【英文标题】:Why do I get a "Hive support is required" error when creating table?为什么在创建表时出现“需要 Hive 支持”错误? 【发布时间】:2017-06-09 17:31:22 【问题描述】:

在 Cloudera 中使用 pyspark,我使用“hiveContext”创建了一个数据框。然后我尝试使用 hive 将数据框放入一个 sql 表中。

这是我的代码:

from pyspark.sql import HiveContext
hiveContext = HiveContext(SpContext)

from pyspark.sql.types import StructType

schema = StructType.fromJson('fields': ['metadata': ,
   'name': 'Date','nullable': True,'type': 'string',
  'metadata': , 'name': 'Time', 'nullable': True, 'type': 'string',
  'metadata': , 'name': 'Global_active_power', 'nullable': True, 'type': 'integer',
  'metadata': , 'name': 'Global_reactive_power', 'nullable': True, 'type': 'string',
  'metadata': ,'name': 'Voltage','nullable': True,'type': 'integer',
  'metadata': , 'name': 'Global_intensity', 'nullable': True, 'type': 'integer',
  'metadata': , 'name': 'Sub_metering_1', 'nullable': True, 'type': 'string',
  'metadata': , 'name': 'Sub_metering_2', 'nullable': True, 'type': 'integer',
  'metadata': , 'name': 'Sub_metering_3', 'nullable': True, 'type': 'string',
  ],
 'type': 'struct')

power_cons_hive = power_cons

power_cons_hive_df=hiveContext.createDataFrame(power_cons_hive, schema)

然后我注册一个表:

power_cons_hive_df.registerTempTable("mytempTable")

最后,当我执行以下代码时:

hiveContext.sql("CREATE TABLE power_consumption STORED AS ORC AS SELECT * FROM mytempTable")

我收到此错误(我正在显示初始错误块,因为有很多):

Py4JJavaError: An error occurred while calling o31.sql.
: org.apache.spark.sql.AnalysisException: Hive support is required to use CREATE Hive TABLE AS SELECT;;
CreateTable CatalogTable(
    Table: `power_consumption`
    Created: Fri Jun 09 10:12:55 PDT 2017
    Last Access: Wed Dec 31 15:59:59 PST 1969
    Type: MANAGED
    Provider: hive
    Storage(InputFormat: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat, OutputFormat: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat, Serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde)), ErrorIfExists
   +- Project [Sub_metering_1#141, Sub_metering_3#143]
      +- SubqueryAlias mytemptable, `mytempTable`
         +- Project [Sub_metering_1#141, Sub_metering_3#143]
            +- Project [Sub_metering_1#141, Sub_metering_3#143]
               +- Project [Sub_metering_1#141, Sub_metering_3#143]
                  +- Project [Date#135, Time#136, Global_reactive_power#138, Sub_metering_1#141, Sub_metering_3#143]
                     +- Project [Date#135, Time#136, Global_reactive_power#138, Sub_metering_1#141, Sub_metering_3#143]
                        +- LogicalRDD [Date#135, Time#136, Global_active_power#137, Global_reactive_power#138, Voltage#139, Global_intensity#140, Sub_metering_1#141, Sub_metering_2#142, Sub_metering_3#143]

我不确定为什么会这样,因为我相信我的代码到目前为止是正确的,并且 Hive 已经启动并且在 Cloudera 管理器中具有“良好的健康”状态。

感谢任何帮助。

【问题讨论】:

这是 Spark 配置问题,而不是 Hive @cricket_007 是因为 'Py4JJavaError' 导致的 Spark 配置问题吗?当我使用 HDFS 和 Pyspark 与文本或 .csv 文件交互时,没有任何抱怨。只有 Hive,所以仍然不确定需要什么进一步的配置。 需要启用 Hive 支持,如错误所示。 CSV 和 HDFS 文件不是 Hive 表。 spark.apache.org/docs/1.6.3/… @cricket_007 .....它说“通过在 Spark 的构建中添加 -Phive 和 -Phive-thriftserver 标志来启用 Hive 支持”......我假设我需要使用这些标志重新构建 pyspark。你能确认一下吗? 是的,重建所有 Spark,而不仅仅是 PySpark。但我希望您使用的是 CDH 而不是手动安装 Cloudera Manager,并且应该已经为您配置好了 【参考方案1】:

尝试将选项 --conf spark.sql.catalogImplementation=hive 添加到 spark-submit。

【讨论】:

以上是关于为啥在创建表时出现“需要 Hive 支持”错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 Access 中使用 UNION ALL 时出现 ODBC 连接失败错误?

为啥在 PL/SQL Oracle 中尝试创建 INSTEAD OF 触发器时出现“错误的绑定变量”错误?

为啥当我尝试在 MariaDB 数据库上创建此函数(使用点数据类型)时出现此错误?

不确定为啥在使用 SQLAlchemy 时出现线程 ID 错误

为啥在尝试运行此可执行文件时出现错误?

运行查询以创建表时出现错误 1064?