错误Shell:无法在hadoop二进制路径python pycharm

时间:2019-05-13 16:07:06

标签: python pyspark

我尝试用spark启动简单的应用程序。我下载了spark-“ pip install spark。现在,当我尝试运行我的代码时,发生了错误:

  

错误Shell:无法在hadoop二进制文件中找到winutils二进制文件   路径java.io.IOException:无法找到可执行文件   Hadoop二进制文件中的null \ bin \ winutils.exe。在   org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:379)在   org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:394)在   org.apache.hadoop.util.Shell。(Shell.java:387)在   org.apache.hadoop.util.StringUtils。(StringUtils.java:80)在   org.apache.hadoop.security.SecurityUtil.getAuthenticationMethod(SecurityUtil.java:611)     在   org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:273)     在   org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:261)     在   org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:791)     在   org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:761)     在   org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:634)     在   org.apache.spark.util.Utils $$ anonfun $ getCurrentUserName $ 1.apply(Utils.scala:2422)     在   org.apache.spark.util.Utils $$ anonfun $ getCurrentUserName $ 1.apply(Utils.scala:2422)     在scala.Option.getOrElse(Option.scala:121)在   org.apache.spark.util.Utils $ .getCurrentUserName(Utils.scala:2422)在   org.apache.spark.SecurityManager。(SecurityManager.scala:79)在   org.apache.spark.deploy.SparkSubmit.secMgr $ lzycompute $ 1(SparkSubmit.scala:359)     在   org.apache.spark.deploy.SparkSubmit.org $ apache $ spark $ deploy $ SparkSubmit $$ secMgr $ 1(SparkSubmit.scala:359)     在   org.apache.spark.deploy.SparkSubmit $$ anonfun $ prepareSubmitEnvironment $ 7.apply(SparkSubmit.scala:367)     在   org.apache.spark.deploy.SparkSubmit $$ anonfun $ prepareSubmitEnvironment $ 7.apply(SparkSubmit.scala:367)     在scala.Option.map(Option.scala:146)在   org.apache.spark.deploy.SparkSubmit.prepareSubmitEnvironment(SparkSubmit.scala:366)     在org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:143)     在org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)     在   org.apache.spark.deploy.SparkSubmit $$ anon $ 2.doSubmit(SparkSubmit.scala:924)     在org.apache.spark.deploy.SparkSubmit $ .main(SparkSubmit.scala:933)     在org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)   19/05/13 22:57:18 WARN NativeCodeLoader:无法加载本地hadoop   您平台的库...使用内建的Java类,其中   适用于使用Spark的默认log4j配置文件:   org / apache / spark / log4j-defaults.properties设置默认日志级别   警告”。要调整日志记录级别,请使用sc.setLogLevel(newLevel)。对于   SparkR,请使用setLogLevel(newLevel)。

好吧,我下载了winutils.exe,创建了“ c:\ winutils \ bin”并复制了winutils。还创建了环境路径HADOOP_HOME。但是我不明白为什么它不起作用。 我的代码

from pyspark.shell import sc
os.environ ['HADOOP_HOME']= "C:\\winutils"

lines = sc.textFile("ob.txt")
pythonLines = lines .filter(lambda line: "python" in line)
print(pythonLines)

1 个答案:

答案 0 :(得分:1)

您应该采取的几个步骤:(对于Hadoop和Spark)

  • 将winutils.exe添加到SPARK_HOME / bin
  • HADOOP_HOME / bin中的
  • hadoop.dll和winutils.exe
  • 添加到系统路径:%HADOOP_HOME%\ bin和%SPARK_HOME%\ bin

尝试使用findspark(https://github.com/minrk/findspark)并进行测试:

import findspark
findspark.init("C:\Spark\spark-2.3.3-bin-hadoop2.7") #wherever your Spark directory is
import pyspark # only run after findspark.init()
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
df = spark.sql('''select 'spark' as hello ''')