我无法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 ...
答案 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尝试再次读取该路径时,它会将其转换为冒号(:)因此它无法找到该路径。我建议从目录名中删除时间部分,然后再试一次。希望这回答你的问题。