【问题标题】:Unable to query hive tables from spark无法从 spark 查询配置单元表
【发布时间】:2015-04-12 17:39:22
【问题描述】:

我想从 spark 创建/访问 hive 表。

我已将 hive-site.xml 放在 spark/conf 目录中。即使它在我运行 spark shell 的目录中创建了一个本地元存储并且存在错误。

我在尝试创建新的配置单元表时收到此错误。

sqlContext.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)")

请提出解决方法

15/02/12 10:35:58 ERROR RetryingHMSHandler: MetaException(message:file:/user/hive/warehouse/src is not a directory or unable to create one)
    at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.create_table_core(HiveMetaStore.java:1239)
    at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.create_table_with_environment_context(HiveMetaStore.java:1294)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)

【问题讨论】:

  • 您可以尝试几件事。 1)确保hadoop已启动。 start-all.shjps 进行确认。 2)您可能需要先创建一个数据库。 Spark 不喜欢默认的数据库。

标签: hive apache-spark


【解决方案1】:

我也遇到了同样的问题,解决方法如下:

  1. 将 hive conf 目录添加到 spark-env.sh SPARK_CLASSPATH=/opt/apache-hive-0.13.1-bin/conf

  2. 通过将“hdfs://master:8020”添加到 hive.metastore.warehouse.dir 来编辑 hive conf 目录中的 hdfs-site。例如:hdfs://master:8020/user/hive/warehouse

【讨论】:

  • 这对我有用!!非常感谢!我实际上使用的是 sparkSQL,它将此属性设置为其默认值,即“file:/user/hive/warehouse”。但是我的用户当然没有这个目录的权限。所以我在启动它时在 spark 的脚本中包含了一个 java 属性:-Dhive.metastore.warehouse.dir=hdfs://hdfs_master_ip:hdfs_port/user/hive/warehouse
【解决方案2】:

我在 hive 上运行 Spark SQL 时遇到了类似的错误,结果证明 Spark SQL 的运行用户(mac)没有对 Spark/Hive 正在尝试的 mac 目录 /user/hive/warehouse 的写入权限以某种方式创建(不知道为什么,因为我的元存储在 mysql 上,而数据文件在 hdfs 上)。 在我使用“sudo”启动 Spark shell 后,错误消失了,即,

bin> sudo ./spark-shell

【讨论】:

    猜你喜欢
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多