起因
在切Hive任務到Spark的時候,發現Spark在處理只有Hive元數據而HDFS文件塊丟失的任務時,會拋HDFS的異常InvalidInputException,而Hive在這種情況下不受影響。
因此,就去找Hive在處理只有元數據的空表時做的優化。發現Hive會在讀表前,setInputPaths時做一次判斷,如果HDFS不存在對應的文件,則會生成一個DummyTable/DummyPartition,並將Hive要提交的Job中的文件讀取路徑更新掉。
於是順着這根線,就把Hive封裝提交任務和MapReduce框架的代碼都看了一遍。
有點扯遠了,,,下面進入正文。。
寫一篇發現有點太長了,分成兩篇吧。