2017-03-16 87 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可能会解决这个问题。