首页 > 解决方案 > Hive:无法为 HDFS 中的现有数据创建外部表

问题描述

更新1
修改版本hadoop为2.x,但错误依然存在。

原文

tpcds将测试数据生成到 Ceph 中hive-testbench

目前,数据位于存储系统的根目录,在文件夹中tpcds

例如,结果hdfs dfs -ls /

drwxrwxrwx   - root root          0 2019-08-05 10:44 /hive
drwxrwxrwx   - root root          0 2019-08-05 10:44 /tmp
drwxrwxrwx   - root root          0 2019-08-05 10:44 /tpcds
drwxrwxrwx   - root root          0 2019-08-05 10:44 /user
drwxrwxrwx   - root root          0 2019-08-05 10:44 /warehouse

结果s3cmd ls s3://tpcds是:

                   DIR   s3://tpcds/hive/
                   DIR   s3://tpcds/tmp/
                   DIR   s3://tpcds/tpcds/
                   DIR   s3://tpcds/user/
                   DIR   s3://tpcds/warehouse/

对于s3cmd ls s3://tpcds,存储桶名称为tpcds

数据准备好后,接下来的设置是在其中创建外部表Hive以访问这些数据。我展示存储布局的原因是为了让你们确保我遇到的问题与路径无关。

使用的命令是hive -i settings/load-flat.sql -f ddl-tpcds/text/alltables.sql -d DB=tpcds_text_7 -d LOCATION=tpcds/7,但是,我遇到了以下问题:

 exec.DDLTask: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:Exception thrown flushing changes to datastore)
        at org.apache.hadoop.hive.ql.metadata.Hive.createDatabase(Hive.java:433)
        at org.apache.hadoop.hive.ql.exec.DDLTask.createDatabase(DDLTask.java:4243)

对于堆栈版本:Hive 2.3.2, Hadoop 3.1.2.
目前,我这边最可能的原因是关于hadoop版本,我将把它降级到hadoop 2.7,看看是否会出现同样的错误。

同时,欢迎任何评论。提前感谢您的帮助。

标签: javahadoophivebigdata

解决方案


由于问题已解决,我想在此处发布解决方案,以供可能遇到相同问题的其他访问者使用。

hive我用来初始化架构的mysql metastore3.1.1. 之后,我只是将 hive 文件夹替换为hive 2.3.2. 这种降级不优雅,之前创建的元存储不一致,hive 2.3.2这就是我遇到问题的原因。

我将 hive 文件夹还原为3.1.1一切正常。


推荐阅读