使用按时间戳分区的hive表的sqoop导出问题

时间:2013-01-28 17:31:33

标签: hadoop hive hdfs sqoop

我无法sqoop导出一个按时间戳分区的hive表。

我有一个按时间戳分区的hive表。它创建的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     at 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)     at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getBlockLocations(NameNodeRpcServer.java:383)     at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getBlockLocations(ClientNamenodeProtocolServerSideTranslatorPB.java:170)     at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos $ ClientNamenodeProtocol $ 2.callBlockingMethod(ClientNamenodeProtocolProtos.java:44064)     在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)     at java.security.AccessController.doPrivileged(Native Method)     在javax.security.auth.Subject.doAs(Subject.java:396)     在org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332)     在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':没有这样的文件或目录

如果您添加引号,它会起作用: brandon @ prod-namenode-new:〜$ fs -ls / user / hive / warehouse / my_table / day =“2013-01-28 00%3A00%3A00” 找到114项 -rw-r - r-- 2 brandon supergroup 4845 2013-01-28 16:30 / user / hive / warehouse / my_table / day = 2013-01-28%2000%253A00%253A00 / 000000_0 ...

3 个答案:

答案 0 :(得分:0)

所以你可以做的是:

从配置单元中选择所有数据并将其写入HDFS中的目录

(使用 INSERT OVERWRITE DIRECTORY'..路径..'选择a.column_1,a.column_n FROM table a ),

并在sqoop命令中使用 - export-dir ..dir指定目录位置..

希望这会有所帮助。

答案 1 :(得分:0)

您可以尝试" / user / hive / warehouse / my_table / day = 2013-01-28 *"。

答案 2 :(得分:0)

支持冒号(:)的文件名不支持这些jira中提到的HDFS路径。但是,当sqoop尝试再次读取该路径时,它会将其转换为冒号(:)因此它无法找到该路径。我建议从目录名中删除时间部分,然后再试一次。希望这回答你的问题。