繁体   English   中英

带有按时间戳划分的配置单元表的sqoop导出问题

[英]Issue with sqoop export with hive table partitioned by timestamp

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

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

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

从sqoop导出错误:

13/01/28 17:18:23错误security.UserGroupInformation:PriviledgedActionException as:布兰登(auth:SIMPLE)原因:java.io.FileNotFoundException:文件不存在:/ user / hive / warehouse / my_table / day = 2012- org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsInt(FSNamesystem.10-29 00%3A00%3A00 at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsUpdateTimes(FSNamesystem.java:1239)at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsInt(FSNamesystem。 java:1192)位于org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:1165)at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:1147)在org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getBlockLocations(ClientNamenodeProtocolServerSideTranslatord.org.org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getBlockLocations(ClientNamenodeProtocolServerSap。 .hdfs.protocol.proto.ClientNamenodeProtocolProtos $ ClientNamenodeProtocol $ 2.callBlockingMethod( org.apache.hadoop.ipc.ProtobufRpcEngine $ Server $ ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:453)的ClientNamenodeProtocolProtos.java:44064)org.apache.hadoop.ipc.RPC $ Server.call(RPC.java:898)在org.apache.hadoop.ipc.Server $ Handler $ 1.run(Server.java:1689)在org.apache.hadoop.ipc.Server $ Handler $ 1.run(Server.java:1693)在java.security.AccessController org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332)处的javax.security.auth.Subject.doAs(Subject.java:396)处的.doPrivileged(本机方法)org.apache.hadoop.ipc处的.doPrivileged(本机方法) .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 ...

因此,您可以做的是:

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

(使用INSERT OVERWRITE DIRECTORY'..path ..'选择a.column_1,a.column_n FROM表a ),

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

希望这会有所帮助。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM