Hive 无法将文件加载到表中,因为它在 hive 仓库中找不到它
Posted
技术标签:
【中文标题】Hive 无法将文件加载到表中,因为它在 hive 仓库中找不到它【英文标题】:Hive can't load file to table because it can't find it in hive warehouse 【发布时间】:2019-05-21 15:02:09 【问题描述】:我无法将数据加载到 hive 表并且日志显示此问题
我要加载的文件:
> [hdfs@vmi200937 root]$ hdfs dfs -ls /suppression-files Found 1 items
> -rw-rw-rw- 3 hdfs hdfs 694218562 2018-12-21 05:06 /suppression-files/md5.txt
Hive 目录:
> [hdfs@vmi200937 root]$ hdfs dfs -ls
> /apps/hive/warehouse/suppression.db Found 1 items drwxrwxrwx - hive
> hadoop 0 2018-12-21 06:30
> /apps/hive/warehouse/suppression.db/md5supp
这是 Hive 查询:
> hive (suppression)> LOAD DATA INPATH '/suppression-files/md5.txt' INTO
> TABLE md5supp;
日志:
将数据加载到表 suppress.md5supp 失败并出现异常 java.io.FileNotFoundException:目录/文件不存在 /apps/hive/warehouse/suppression.db/md5supp/md5.txt 在 org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkOwner(FSDirectory.java:1901) 在 org.apache.hadoop.hdfs.server.namenode.FSDirAttrOp.setOwner(FSDirAttrOp.java:82) 在 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.setOwner(FSNamesystem.java:1877) 在 org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.setOwner(NameNodeRpcServer.java:828) 在 org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.setOwner(ClientNamenodeProtocolServerSideTranslatorPB.java:476) 在 org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) 在 org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:640) 在 org.apache.hadoop.ipc.RPC$Server.call(RPC.java:982) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2351) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2347) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:422) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1869) 在 org.apache.hadoop.ipc.Server$Handler.run(Server.java:2347)
FAILED:执行错误,返回代码 40000 从 org.apache.hadoop.hive.ql.exec.MoveTask。 java.io.FileNotFoundException:目录/文件不存在 /apps/hive/warehouse/suppression.db/md5supp/md5.txt 在 org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkOwner(FSDirectory.java:1901) 在 org.apache.hadoop.hdfs.server.namenode.FSDirAttrOp.setOwner(FSDirAttrOp.java:82) 在 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.setOwner(FSNamesystem.java:1877) 在 org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.setOwner(NameNodeRpcServer.java:828) 在 org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.setOwner(ClientNamenodeProtocolServerSideTranslatorPB.java:476) 在 org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) 在 org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:640) 在 org.apache.hadoop.ipc.RPC$Server.call(RPC.java:982) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2351) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2347) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:422) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1869) 在 org.apache.hadoop.ipc.Server$Handler.run(Server.java:2347)
【问题讨论】:
【参考方案1】:我找到了解决方案! 我应该将目录 /suppression-file 的所有者设置为 hive:hdfs by hdfs dfs chown -R hive:hdfs /suppression-file
【讨论】:
以上是关于Hive 无法将文件加载到表中,因为它在 hive 仓库中找不到它的主要内容,如果未能解决你的问题,请参考以下文章
Hive:将hdfs中的gziped CSV作为只读加载到表中