【问题标题】:Unable to access file in HDFS through PySpark无法通过 PySpark 访问 HDFS 中的文件
【发布时间】:2017-05-25 00:45:43
【问题描述】:

我是 Spark 和 Hadoop 的新手。我正在尝试使用 Spark 2.0 设置 EC2 集群。

我将一个文件复制到临时 HDFS 并且可以看到它在使用 cd ../.

root@ip-172-31-58-53 bin]$ ./hadoop fs -ls /root/
Warning: $HADOOP_HOME is deprecated.

Found 2 items
drwxr-xr-x   - root supergroup          0 2017-05-23 12:08 
/root/_distcp_logs_sls6bc
-rw-r--r--   3 root supergroup  543046714 2017-05-23 12:08 
/root/input.csv

这是我提交的python代码:

import sys

import numpy as np
from pyspark.sql import SparkSession

if __name__ == "__main__":
    spark = SparkSession\
        .builder\
        .appName("MatrixMult")\
        .getOrCreate()

    df = spark.read.option("header","true").csv("hdfs://ec2-54-144-193-191.compute-1.amazonaws.com:9000/root/input.csv")

    df.show(10)

    spark.close()

我的 hadoop core-site.xml 有以下设置:

<property>
  <name>fs.default.name</name>
  <value>hdfs://ec2-54-144-193-191.compute-1.amazonaws.com:9000</value>
</property>

<property>
  <name>fs.defaultFS</name>
  <value>hdfs://ec2-54-144-193-191.compute-1.amazonaws.com:9000</value>
</property>

这是我提交作业时遇到的错误:

Traceback (most recent call last):
  File "/root/python_code/matrix_mult.py", line 12, in <module>
    df = spark.read.option("header","true").csv("hdfs://ec2-54-144-193-191.compute-1.amazonaws.com:9000/root/input.csv")
  File "/root/spark-2.1.1-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/sql/readwriter.py", line 380, in csv
  File "/root/spark-2.1.1-bin-hadoop2.7/python/lib/py4j-0.10.4-src.zip/py4j/java_gateway.py", line 1133, in __call__
  File "/root/spark-2.1.1-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/sql/utils.py", line 63, in deco
  File "/root/spark-2.1.1-bin-hadoop2.7/python/lib/py4j-0.10.4-src.zip/py4j/protocol.py", line 319, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o32.csv.
: java.io.IOException: Failed on local exception: java.io.IOException: Broken pipe; Host Details : local host is: "ip-172-31-58-53.ec2.internal/172.31.58.53"; destination host is: "ec2-54-144-193-191.compute-1.amazonaws.com":9000; 
...

知道为什么会发生这种情况吗?关于如何调试它的任何提示?我尝试过使用内部名称,但这也不起作用。提前致谢。

【问题讨论】:

  • #!/usr/bin/python 在顶部?

标签: hadoop apache-spark amazon-ec2 pyspark hdfs


【解决方案1】:

我认为您只配置 fs.defaultFS 或 fs.default.name: my core-site.xml 为:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:8020</value>
    </property>
</configuration>

【讨论】:

    【解决方案2】:

    原因很愚蠢。我使用的是从 Apache 下载的预编译二进制文件。它希望您拥有 Hadoop 2。当您运行 EC2 脚本时,您必须传递标志 --hadoop-major-version=2。我没有这样做。

    我用这个标志重建了集群并解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      • 2019-03-23
      • 1970-01-01
      • 2016-04-28
      • 2021-12-15
      相关资源
      最近更新 更多