【发布时间】:2014-10-13 19:16:00
【问题描述】:
我有一个场景,我使用 HCatStorer 将 40 个具有不同模式的文件从目录加载到 Hive 表。
Directory : opt/inputfolder/
Input Files Pattern :
inp1*.log,
inp2*.log,
.....
inp39*.log,
inp40*.log.
我写了一个pig-script,它可以读取所有具有 40 种模式的文件。
但我的问题是,这 40 个文件是强制性的,我可能不会收到一些文件。在这种情况下,我收到一个异常说明:
Caused by: org.apache.hadoop.mapreduce.lib.input.InvalidInputException:
Input Pattern opt/ip_files/inp16*.log matches 0 files
有没有办法处理这个异常?
我想读取剩余的 39 个带有模式的文件,即使该文件不存在。
如果我的源文件是字符串(例如,banana_2014012.log,orange_2014012.log,apple_2014012.log)怎么办
以下是我使用 HCatStorer 将这些文件中的数据加载到 HIVE 表的方法。
*** Pseudo code ****
banana_src = LOAD banana_*.log' using PigStorage;
......
Store banana_src into BANANA using HCatStorer;
apple_src = LOAD banana_*.log' using PigStorage;
......
Store apple_src into APPLE using HCatStorer;
orange_src = LOAD banana_*.log' using PigStorage;
......
Store orange_src into ORANGE using HCatStorer;
如果任何 src 没有文件,则此 Pig 脚本将抛出错误,指出匹配模式为 0,并且 PIG 脚本将失败。即使一个源文件不可用,我希望我的脚本加载其他表不会让我的工作失败。
谢谢。
【问题讨论】:
标签: hadoop apache-pig hadoop2