2017-02-08 211 views
-2

我使用星火v2.0和尝试读取使用CSV文件:Spark.read.csv错误:java.io.IOException异常:权限拒绝

spark.read.csv("filepath") 

但是,得到下面的错误:

java.lang.RuntimeException: java.lang.RuntimeException: java.io.IOException: Permission denied 
    at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:522) 
    at org.apache.spark.sql.hive.client.HiveClientImpl.<init>(HiveClientImpl.scala:171) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at org.apache.spark.sql.hive.client.IsolatedClientLoader.createClient(IsolatedClientLoader.scala:258) 
    at org.apache.spark.sql.hive.HiveUtils$.newClientForMetadata(HiveUtils.scala:359) 
    at org.apache.spark.sql.hive.HiveUtils$.newClientForMetadata(HiveUtils.scala:263) 
    at org.apache.spark.sql.hive.HiveSharedState.metadataHive$lzycompute(HiveSharedState.scala:39) 
    at org.apache.spark.sql.hive.HiveSharedState.metadataHive(HiveSharedState.scala:38) 
    at org.apache.spark.sql.hive.HiveSharedState.externalCatalog$lzycompute(HiveSharedState.scala:46) 
    at org.apache.spark.sql.hive.HiveSharedState.externalCatalog(HiveSharedState.scala:45) 
    at org.apache.spark.sql.hive.HiveSessionState.catalog$lzycompute(HiveSessionState.scala:50) 
    at org.apache.spark.sql.hive.HiveSessionState.catalog(HiveSessionState.scala:48) 
    at org.apache.spark.sql.hive.HiveSessionState$$anon$1.<init>(HiveSessionState.scala:63) 
    at org.apache.spark.sql.hive.HiveSessionState.analyzer$lzycompute(HiveSessionState.scala:63) 
    at org.apache.spark.sql.hive.HiveSessionState.analyzer(HiveSessionState.scala:62) 
    at org.apache.spark.sql.execution.QueryExecution.assertAnalyzed(QueryExecution.scala:49) 
    at org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:64) 
    at org.apache.spark.sql.SparkSession.baseRelationToDataFrame(SparkSession.scala:382) 
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:143) 
    at org.apache.spark.sql.DataFrameReader.csv(DataFrameReader.scala:401) 
    at org.apache.spark.sql.DataFrameReader.csv(DataFrameReader.scala:342) 
    ... 48 elided 
Caused by: java.lang.RuntimeException: java.io.IOException: Permission denied 
    at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:515) 
    ... 71 more 
Caused by: java.io.IOException: Permission denied 
    at java.io.UnixFileSystem.createFileExclusively(Native Method) 
    at java.io.File.createTempFile(File.java:2024) 
    at org.apache.hadoop.hive.ql.session.SessionState.createTempFile(SessionState.java:818) 
    at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:513) 
    ... 71 more 

我也尝试过使用.format("csv").csv("filepath"),但这也给出了相同的结果。

+1

确保你的“文件路径”有一个适当的权限 – Bhavesh

+0

嗨Bhavesh,文件路径具有以下权限:-rwxr-xr-x 3 pratyush04 hdfs –

回答

1

如果您查看异常堆栈跟踪的最后一部分,您会意识到此错误并非关于没有足够的权限访问“filepath”处的文件。

我在Windows客户端上使用Spark shell时遇到了类似的问题。这是我

at java.io.WinNTFileSystem.createFileExclusively(Native Method) 
    at java.io.File.createTempFile(File.java:2024) 
    at org.apache.hadoop.hive.ql.session.SessionState.createTempFile(SessionState.java:818) 
    at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:513) 

注意它是如何说WinNTFileSystem在堆栈跟踪(当你把它当作UnixFileSystem),这让我在这个堆栈跟踪更加紧密地寻找错误。我意识到当前用户无权访问本地创建临时文件。更具体地说,org.apache.hadoop.hive.ql.session.SessionState尝试在Hive本地暂存目录中创建临时文件。如果当前用户没有足够的权限来执行此操作,则会出现此错误。

对于我来说,在Windows上,我意识到我必须“以管理员身份运行”用于运行Spark Shell的命令提示符。这对我有效。

对于你来说,在Unix上,我猜想要么是sudo,要么更新Hive配置来设置本地暂存目录,或者更新现有Hive配置的目录安全设置。

+0

以管理员身份运行为我工作,谢谢! – HuckIt

1

试试这个代码,它可能会帮助

要通过CSV

Dataset<Row> src = sqlContext.read() 
     .format("com.databricks.spark.csv") 
     .option("header", "true") 
     .load("Source_new.csv");` 

读取数据将数据写入到CSV

src.write() 
     .format("com.databricks.spark.csv") 
     .option("header", "true") 
     .save("LowerCaseData.csv"); 
相关问题