मेरे पास एक हाइव बाहरी तालिका है जिसे उस दिनांक और समय से विभाजित किया गया है, उदाहरण के लिए कहें 20200331_0505 जो YYYYMMDD_HHMM प्रारूप में है।

वर्तमान में केवल एक ही विभाजन है:

> hdfs dfs -ls /path/to/external/table    
-rw-r----- 2020-03-31 05:06 /path/to/external/table/_SUCCESS  
drwxr-x--- 2020-03-31 05:06 /path/to/external/table/loaddate=20200331_0505  

और अगर मैं विभाजन खोजने के लिए एक हाइव क्वेरी चलाता हूं:

select distinct loaddate from table;  
+----------------+
|    loaddate    |
+----------------+
| 20200331_0505  |
+----------------+

यह अपेक्षित है और मैं क्या देखना चाहता हूं, लेकिन अगर मैं इसे चलाता हूं:

select * from table where loaddate=(select max(loaddate) from table);
तब मुझे यह त्रुटि मिलती है:

ERROR : FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.tez.TezTask. Vertex failed, vertexName=Map 3, vertexId=vertex_1585179445264_14095_4_00, diagnostics=[Vertex vertex_1585179445264_14095_4_00 [Map 3] killed/failed due to:ROOT_INPUT_INIT_FAILURE, Vertex Input: <Table> initializer failed, vertex=vertex_1585179445264_14095_4_00 [Map 3], java.lang.RuntimeException: ORC split generation failed with exception: java.io.FileNotFoundException: File hdfs://path/to/external/table/loaddate=20200327_0513 does not exist.
        at org.apache.hadoop.hive.ql.io.orc.OrcInputFormat.generateSplitsInfo(OrcInputFormat.java:1851)
        at org.apache.hadoop.hive.ql.io.orc.OrcInputFormat.getSplits(OrcInputFormat.java:1939)
        at org.apache.hadoop.hive.ql.io.HiveInputFormat.addSplitsForGroup(HiveInputFormat.java:524)
        at org.apache.hadoop.hive.ql.io.HiveInputFormat.getSplits(HiveInputFormat.java:779)
        at org.apache.hadoop.hive.ql.exec.tez.HiveSplitGenerator.initialize(HiveSplitGenerator.java:243)

तो यह एक ऐसे विभाजन को लोड करने का प्रयास कर रहा है जो मौजूद नहीं है, 20200327_0513, इसका क्या कारण हो सकता है?

0
Jared DuPont 31 मार्च 2020, 16:44

1 उत्तर

सबसे बढ़िया उत्तर

जब आप या तो सीधे rm कमांड से या SaveMode.Overwrite राइट कमांड से विभाजन हटाते हैं, तो यह हाइव को विभाजन में बदलाव के लिए सचेत नहीं करता है, इसलिए आपको हाइव को यह बताना होगा कि विभाजन बदल गए हैं। ऐसा करने के कई तरीके हैं, जिस तरह से मैंने इसे ठीक करने के लिए चुना वह था:

msck repair table <table> sync partitions

0
Jared DuPont 31 मार्च 2020, 15:50