Настройка переменной HADOOP_HOME в Windows

#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")  

Надеюсь, это кому-то поможет, а также, если у кого-то есть идея получше, я бы определенно оценил это.