Hive:无法为 HDFS 中的现有数据创建外部表
Posted
技术标签:
【中文标题】Hive:无法为 HDFS 中的现有数据创建外部表【英文标题】:Hive: Unable to create external tables for existed data in HDFS 【发布时间】:2019-08-05 02:58:23 【问题描述】:更新 1:
将hadoop
的版本修改为2.x,但错误依旧。
原创:
我使用hive-testbench
将tpcds
测试数据生成到Ceph 中。
目前,数据位于存储系统根目录,文件夹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,看看是否会出现同样的错误。
同时,欢迎任何评论。提前感谢您的帮助。
【问题讨论】:
【参考方案1】:由于问题已解决,我想在此处发布解决方案,以供可能遇到相同问题的其他访问者使用。
我用来初始化mysql metastore
的架构的hive
是3.1.1
。之后,我只是将 hive 文件夹替换为hive 2.3.2
。这种降级并不优雅,之前创建的元存储与hive 2.3.2
不一致,这就是我遇到问题的原因。
我将 hive 文件夹恢复为3.1.1
,一切都变好了。
【讨论】:
以上是关于Hive:无法为 HDFS 中的现有数据创建外部表的主要内容,如果未能解决你的问题,请参考以下文章