我在Windows 7中使用Jupyter笔记本(Python 2.7)在PySpark中工作。我有一个名为pyspark.rdd.PipelinedRDD
的{{1}}类型的RDD。尝试执行idSums
时,收到以下错误:
idSums.saveAsTextFile("Output")
在我看来,RDD对象不应该有任何问题,因为我能够无错误地执行其他操作,例如:执行Py4JJavaError: An error occurred while calling o834.saveAsTextFile.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 33.0 failed 1 times, most recent failure: Lost task 1.0 in stage 33.0 (TID 131, localhost): java.io.IOException: (null) entry in command string: null chmod 0644 C:\Users\seride\Desktop\Experiments\PySpark\Output\_temporary\0\_temporary\attempt_201611231307_0033_m_000001_131\part-00001
会产生正确的输出。
此外,创建idSums.collect()
目录(包含所有子目录)并创建文件Output
,但它是0字节。
答案 0 :(得分:24)
你遗漏了winutils.exe
一个hadoop二进制文件。根据x64 bit / x32位系统下载winutils.exe
文件&设置你的hadoop家指向它。
1.下载文件
2.在您的系统中创建hadoop文件夹ex“C:”
3.在hadoop目录中创建bin文件夹ex:C:\ hadoop \ bin
4.paste winutils.exe in bin ex:C:\ hadoop \ bin \ winuitls.exe
5.在系统属性中的用户变量 - >高级系统设置
创建新变量 名称: HADOOP_HOME 路径: C:\的hadoop \
第二种方式:您可以使用以下命令直接在您的Java程序中设置hadoop home:
System.setProperty(“hadoop.home.dir”,“C:\ hadoop”);
答案 1 :(得分:1)
尽管设置了HADOOP_HOME,但在加载在其他计算机上构建并复制到Windows系统中的模型时,我也遇到类似的异常,说权限问题。 我只是在模型文件夹上运行以下命令-
winutils.exe chmod -R 777模型路径。
答案 2 :(得分:0)
与@Hapreet Varma
相同的程序你缺少winutils.exe一个hadoop二进制文件。根据x64位/ x32位系统下载winutils.exe文件&设置你的hadoop家指向它。
第一种方式:1.下载文件
2.在您的系统中创建hadoop文件夹ex“C:”
3.在hadoop目录中创建bin文件夹ex:C:\ hadoop \ bin
4.paste winutils.exe in bin ex:C:\ hadoop \ bin \ winuitls.exe
5.在系统属性中的用户变量 - >高级系统设置
创建新变量名称:HADOOP_HOME路径:C:\ hadoop \
第二种方式:您可以使用以下命令直接在您的Java程序中设置hadoop home:
System.setProperty(“hadoop.home.dir”,“C:\ hadoop”);
如果你在Eclipse Oxygen中工作,那么在系统属性中设置变量后必须重新启动Eclipse,否则它将无效。 如果路径设置错误,Eclipse将在日志开头显示winutils的当前设置位置。像这样的事情
2018-05-05 18:27:47错误Shell:397 - 无法在hadoop二进制路径中找到winutils二进制文件
java.io.IOException:找不到Hadoop二进制文件中的可执行文件null \ bin \ winutils.exe。
完整错误日志在这里
2018-05-05 18:27:47 ERROR Shell:397 - Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:379)
at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:394)
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:387)
at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:80)
at org.apache.hadoop.security.SecurityUtil.getAuthenticationMethod(SecurityUtil.java:611)
at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:273)
at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:261)
at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:791)
at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:761)
at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:634)
at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2464)
at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2464)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2464)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:292)
at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2486)
at org.apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:930)
at org.apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:921)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:921)
at com.dataflair.spark.Wordcount$.main(Wordcount.scala:13)
at com.dataflair.spark.Wordcount.main(Wordcount.scala)
答案 3 :(得分:0)
我发现了其他信息,可能会帮助其他人解决此问题。有时,当您在Windows计算机上设置spark时,无法获取hadoop.dll文件。只需从winutils GitRepo(https://github.com/4ttty/winutils)中获取hadoop.dll文件,并将其放在Windows系统32文件夹中。完成此操作后,便可以写入磁盘。