【发布时间】:2015-11-06 06:33:41
【问题描述】:
我在嵌入式本地模式下使用 Apache Spark。我的 pom.xml 和同一版本(spark-core_2.10、spark-sql_2.10 和 spark-hive_2.10)中包含所有依赖项。
我只想运行 HiveQL 查询来创建一个表(存储为 Parquet)。
运行以下(相当简单的)代码:
public class App {
public static void main(String[] args) throws IOException, ClassNotFoundException {
SparkConf sparkConf = new SparkConf().setAppName("JavaSparkSQL").setMaster("local[2]").set("spark.executor.memory", "1g");
JavaSparkContext ctx = new JavaSparkContext(sparkConf);
HiveContext sqlContext = new org.apache.spark.sql.hive.HiveContext(ctx.sc());
String createQuery = "CREATE TABLE IF NOT EXISTS Test (id int, name string) STORED AS PARQUET";
sqlContext.sql(createQuery);
}
}
...正在返回以下异常:
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:file:/user/hive/warehouse/test is not a directory or unable to create one)
我可以看到项目根目录下创建的metastore_db文件夹。
我四处搜索,发现的解决方案没有帮助——其中大多数都不适用于嵌入式模式。
- 一种解决方案是检查权限,我对所有内容都使用同一个用户。
- 另一个解决方案是在 HDFS 中手动创建文件夹,我这样做了,我可以导航到 /user/hive/warehouse/test。
- 一种解决方案是通过添加手动设置元存储:
sqlContext.sql("SET hive.metastore.warehouse.dir=hdfs://localhost:9000/user/hive/warehouse");。
我现在的想法不多了,有人可以提供任何其他建议吗?
【问题讨论】:
标签: hadoop apache-spark hive apache-spark-sql parquet