起因
在切Hive任务到Spark的时候,发现Spark在处理只有Hive元数据而HDFS文件块丢失的任务时,会抛HDFS的异常InvalidInputException,而Hive在这种情况下不受影响。
因此,就去找Hive在处理只有元数据的空表时做的优化。发现Hive会在读表前,setInputPaths时做一次判断,如果HDFS不存在对应的文件,则会生成一个DummyTable/DummyPartition,并将Hive要提交的Job中的文件读取路径更新掉。
于是顺着这根线,就把Hive封装提交任务和MapReduce框架的代码都看了一遍。
有点扯远了,,,下面进入正文。。
写一篇发现有点太长了,分成两篇吧。