#python #java #apache-spark #hadoop #pyspark
Вопрос:
Я пытаюсь использовать Spark вместе с Hadoop в своей Windows 8. Однако независимо от того, какой у меня код, я получаю эту ошибку:
15/08/25 19:29:58 ERROR Shell: Failed to locate the winutils binary in the hadoop binary path java.io.IOException: Could not locate executable nullbinwinutils.exe in the Hadoop binaries. at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:355) at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:370) at org.apache.hadoop.util.Shell.lt;clinitgt;(Shell.java:363) at org.apache.hadoop.util.StringUtils.lt;clinitgt;(StringUtils.java:79) at org.apache.hadoop.security.Groups.parseStaticMapping(Groups.java:104) at org.apache.hadoop.security.Groups.lt;initgt;(Groups.java:86) at org.apache.hadoop.security.Groups.lt;initgt;(Groups.java:66) at org.apache.hadoop.security.Groups.getUserToGroupsMappingService(Groups.java:280) at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:271) at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:248) at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:763) at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:748) at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:621) at org.apache.spark.util.Utils$anonfun$getCurrentUserName$1.apply(Utils.scala:2162) at org.apache.spark.util.Utils$anonfun$getCurrentUserName$1.apply(Utils.scala:2162) at scala.Option.getOrElse(Option.scala:120) at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2162) at org.apache.spark.SparkContext.lt;initgt;(SparkContext.scala:301) at org.apache.spark.api.java.JavaSparkContext.lt;initgt;(JavaSparkContext.scala:61) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:234) at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:379) at py4j.Gateway.invoke(Gateway.java:214) at py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.java:79) at py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:68) at py4j.GatewayConnectionun(GatewayConnection.java:207) at java.lang.Thread.run(Unknown Source)
Как вы можете видеть:
nullbinwinutils.exe
Домашний путь hadoop равен нулю. Я попытался установить HADOOP_HOME
в качестве переменной среды, но это не решило эту проблему.
Ответ №1:
Мне удалось решить эту проблему, используя следующую часть кода в начале:
import sys import os os.environ['HADOOP_HOME'] = "C:/Mine/Spark/hadoop-2.6.0" sys.path.append("C:/Mine/Spark/hadoop-2.6.0/bin")
Надеюсь, это кому-то поможет, а также, если у кого-то есть идея получше, я бы определенно оценил это.