2017-02-01 39 views
5

在5.2.1版本上使用AWS EMR作爲數據處理環境時,在處理具有複雜模式和大量嵌套字段的巨大JSON文件時,Hive無法處理它,它達到4000個字符列長度的當前限制。Hive Metastore列寬限制

Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidObjectException(message:Invalid column type name is too long: [...]

望着文檔,有關於這個問題,或者類似的已經有很多的問題,但所有未解決 [12。在此,建議將Metastore的幾個字段更改爲不同的值,以便爲結構定義提供更大的長度。

  • COLUMNS_V2.TYPE_NAME
  • TABLE_PARAMS.PARAM_VALUE
  • SERDE_PARAMS.PARAM_VALUE
  • SD_PARAMS.PARAM_VALUE

正如在第一個問題中所述,提出的解決方案中提到:

[...] after setting the values, the Metastore must also be configured and restarted."

然而,它並沒有指定在DB值旁邊配置的必須是

因此,更新從string領域的當前本地Metastore(MySQL的在這種情況下),以mediumtext並重新啓動Metastore過程後,仍然不能得到任何進展嘗試加載JSON繼續失敗,同樣的錯誤。

我是否錯過了一些東西或者是否有人找到了解決此問題的替代解決方法?

+0

你有沒有找到任何解決方案呢?具有完全相同的問題 –

+1

我認爲它與https://issues.apache.org/jira/browse/HIVE-15249 –

+0

@GauravShah有關,仍然沒有運氣,已經在本地w/Hadoop&Hive(_local mysql Metastore_)。我將嘗試使用_embedded_ Derby數據庫。 – blamblam

回答

1

將MetaStore源代碼看作Hive issue HIVE-15249所涉及的內容,還有一項額外的檢查適用於MetaStore表中設置的參數限制旁邊。

特別是,在HiveMetaStoreUtils.java文件,下面的聲明似乎是執行錯誤的原因:

public static final int MAX_MS_TYPENAME_LENGTH = 2000; // 4000/2, for an unlikely unicode case 

因此,改變值在MetaStore提到的是不夠的碼約束將拋出例外。