0

我无法 sqoop 导出按时间戳分区的配置单元表。

我有一个按时间戳分区的配置单元表。它创建的 hdfs 路径包含我认为导致 sqoop 问题的空格。

fs -ls 2013-01-28 16:31 /user/hive/warehouse/my_table/day=2013-01-28 00%3A00%3A00

从 sqoop 导出的错误:

13/01/28 17:18:23 错误 security.UserGroupInformation: PriviledgedActionException as:brandon (auth:SIMPLE) 原因:java.io.FileNotFoundException: 文件不存在: /user/hive/warehouse/my_table/day=2012- 10-29 00%3A00%3A00 在 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsUpdateTimes(FSNamesystem.java:1239) 在 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsInt(FSNamesystem. java:1192) 在 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:1165) 在 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:1147)在 org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getBlockLocations(NameNodeRpcServer.java:383) 在 org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB。getBlockLocations(ClientNamenodeProtocolServerSideTranslatorPB.java:170) at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java:44064) at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call (ProtobufRpcEngine.java:453) 在 org.apache.hadoop.ipc.RPC$Server.call(RPC.java:898) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1693)在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1689) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:396 ) 在 org.apache.hadoop.ipc.Server$Handler.run(Server.java:1687) 的 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332)170) 在 org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:453) 的 org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java:44064) ) 在 org.apache.hadoop.ipc.RPC$Server.call(RPC.java:898) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1693) 在 org.apache.hadoop .ipc.Server$Handler$1.run(Server.java:1689) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:396) at org.apache。 hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332) 在 org.apache.hadoop.ipc.Server$Handler.run(Server.java:1687)170) 在 org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:453) 的 org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java:44064) ) 在 org.apache.hadoop.ipc.RPC$Server.call(RPC.java:898) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1693) 在 org.apache.hadoop .ipc.Server$Handler$1.run(Server.java:1689) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:396) at org.apache。 hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332) 在 org.apache.hadoop.ipc.Server$Handler.run(Server.java:1687)callBlockingMethod(ClientNamenodeProtocolProtos.java:44064) at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:453) at org.apache.hadoop.ipc.RPC$Server.call(RPC.java: 898) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1693) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1689) 在 java.security .AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:396) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332) at org.apache.hadoop .ipc.Server$Handler.run(Server.java:1687)callBlockingMethod(ClientNamenodeProtocolProtos.java:44064) at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:453) at org.apache.hadoop.ipc.RPC$Server.call(RPC.java: 898) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1693) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1689) 在 java.security .AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:396) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332) at org.apache.hadoop .ipc.Server$Handler.run(Server.java:1687)898) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1693) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1689) 在 java.security .AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:396) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332) at org.apache.hadoop .ipc.Server$Handler.run(Server.java:1687)898) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1693) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1689) 在 java.security .AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:396) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332) at org.apache.hadoop .ipc.Server$Handler.run(Server.java:1687)

如果你执行 fs -ls /user/hive/warehouse/my_table/day=2013-01-28 00%3A00%3A00 ls: /user/hive/warehouse/my_table/day=2013-01-28': No such file or directory ls:00%3A00%3A00': No such file or directory

如果添加引号,它会起作用:brandon@prod-namenode-new:~$ fs -ls /user/hive/warehouse/my_table/day="2013-01-28 00%3A00%3A00" 找到 114 个项目 -rw-r --r-- 2 布兰登超级组 4845 2013-01-28 16:30 /user/hive/warehouse/my_table/day=2013-01-28%2000%253A00%253A00/000000_0 ...

4

3 回答 3

1

您可以尝试使用“/user/hive/warehouse/my_table/day=2013-01-28*”。

于 2014-08-08T21:52:20.520 回答
0

So what you can do is:

Select all the data from hive and write it to a directory in HDFS

(using INSERT OVERWRITE DIRECTORY '..path..' select a.column_1, a.column_n FROM table a) ,

and in the sqoop command specify the directory location using --export-dir ..dir..

Hope this will help.

于 2013-07-19T18:33:20.737 回答
0

不支持带有冒号(:) 的文件名作为这些jira中提到的 HDFS 路径。但是可以通过将其转换为十六进制来工作。但是当 sqoop 尝试再次读取该路径时,它会将其转换为冒号(:) 因此它不能找到该路径。我建议从您的目录名称中删除时间部分,然后重试。希望这能回答您的问题。

于 2014-08-09T05:52:12.440 回答