2017-03-16 86 views
0

下面是創建HIVE表的簡單代碼,並在其中加載數據。錯誤KeyProviderCache:找不到密鑰

import java.util.Properties 
import org.apache.spark.SparkContext 
import org.apache.spark.SparkConf 
import org.apache.spark.sql.SQLContext 
import sqlContext.implicits._ 

val conf = new SparkConf().setAppName("HIVE_Test").setMaster("local").set("spark.executor.memory","1g").set("spark.driver.allowMultipleContexts", "true"); 
val sc = new SparkContext(conf); 
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc); 

sqlContext.sql("CREATE TABLE test_amit_hive12(VND_ID INT,VND_NM STRING,VND_SHORT_NM STRING,VND_ADR_LN_1_TXT STRING,VND_ADR_LN_2_TXT STRING,VND_CITY_CD STRING,VND_ZIP_CD INT,LOAD_TS FLOAT,UPDT_TS FLOAT, PROMO_STTS_CD STRING, VND_STTS_CD STRING)"); 
sqlContext.sql("LOAD DATA LOCAL INPATH 'path_to/amitesh/part.txt' INTO TABLE test_amit_hive12"); 
exit() 

我有兩個疑問::

1)在「創建表」,我硬編碼表名,但如何將代碼明白分隔符的文件是有?當我們通過HIVE提示創建一個HIVE表,我們編寫以下行

FIELDS TERMINATED BY ‘’ 
LINES TERMINATED BY ‘’ 

所以,不要我們需要做的是星火/斯卡拉工作時?

2),同時通過星火殼執行的代碼,我得到下面的錯誤::

ERROR KeyProviderCache: Could not find uri with key [dfs.encryption.key.provider.uri] to create a keyProvider !! 
res1: org.apache.spark.sql.DataFrame = [result: string] 

我發現了一個計算器後,但它是沒有答案。在其他網站上,我發現它是一個Hadoop 2.7.1的bug。我檢查了我的,我有2.7.2。那麼,我的版本中存在的bug的可能性是什麼。我正在使用IBM BigInsight。以下是我的版本的詳細信息

Hadoop 2.7.2-IBM-12 

但是,沒有任何一個誰可以幫我解決這個問題,我必須有一個非常強的證據來證明這是我的經理的錯誤。

下面鏈接裏的人說,錯誤是一個錯誤

`https://talendexpert.com/talend-spark-error/

回答

1

有點晚之一,但這並解決問題了嗎?

得到了同樣的錯誤,但它對我來說不是一個真正的問題。 錯誤後代碼運行得很好。有時它會彈出,有時不會,所以它可能會連接到集羣中執行器節點,這些節點與特定的Spark作業有關。

它與Hadoop版本沒有直接關係,但它基於您運行的Spark版本。

此處報告了錯誤和解決方案:https://issues.apache.org/jira/browse/SPARK-20594

也就是說,升級到Spark 2.2.0可能會解決這個問題。