我将twitter数据存储在hdfs路径中。我能够使用spark数据框读取数据,如下所示:
val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
val df= hiveContext.read.json("/nifi/data/twitter/")
df.printSchema
和df.show
命令显示结果没有任何问题。
但是当我尝试将数据帧存储到配置单元表时,我面临以下错误:
df.write.saveAsTable("tweets_32")
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException): 无租约 /apps/hive/warehouse/tweets_32/_temporary/0/_temporary/attempt_201809260508_0002_m_000002_0/part-r-00002-c204b592-dc2a-4b2f-bc39-54afb237a6cb.gz.parquet(inode 1173647):文件不存在。 [租。持有人: DFSClient_NONMAPREDUCE_14557453_1,待创建:1]>
有人能让我知道,这可能是什么原因?
答案 0 :(得分:0)
此错误的含义:另一个程序已处理并删除了此tmp文件。检查是否没有其他任务与您的任务并行运行。另一个原因-您的任务可能很慢。 Hadoop不会尝试诊断和修复运行缓慢的任务,而是尝试检测它们并为其运行备份任务。 您可以尝试通过关闭Spark和Hadoop的推测来解决此问题:
sparkConf.set("spark.speculation", "false");
sparkConf.set("spark.hadoop.mapreduce.map.speculative", "false");
sparkConf.set("spark.hadoop.mapreduce.reduce.speculative", "false");
有一个与此问题讨论相关的主题: enter link description here