hadoop – 嵌入式模式下的Spark – 找不到用户/配置单元/仓库

我在嵌入式本地模式下使用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.
>一种解决方案是通过添加以下命令手动设置Metastore:sqlContext.sql(“SET hive.metastore.warehouse.dir = hdfs:// localhost:9000 / user / hive / warehouse”);.

我现在用完了想法,有人可以提供任何其他建议吗?

由于您在本地嵌入模式下运行,因此不考虑HDFS.这就是错误说文件:/ user / hive / warehouse / test而不是hdfs:// localhost:9000 / user / hive / warehouse / test的原因.它希望/ user / hive / warehouse / test存在于本地计算机上.尝试在本地创建它.
相关文章
相关标签/搜索