【问题标题】:ERROR Shell: Failed to locate the winutils binary in the hadoop binary path python pycharm错误外壳:无法在hadoop二进制路径python pycharm中找到winutils二进制文件
【发布时间】:2019-09-30 15:15:18
【问题描述】:

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

错误外壳:无法在 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: 无法加载 native-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)

【问题讨论】:

    标签: python pyspark


    【解决方案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 ''')
    

    【讨论】:

      猜你喜欢
      • 2018-11-18
      • 1970-01-01
      • 2013-11-06
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多