使用 pyspark 从 hdfs 读取文件时连接被拒绝

Posted

技术标签:

【中文标题】使用 pyspark 从 hdfs 读取文件时连接被拒绝【英文标题】:Getting connection refused while reading file from hdfs using pyspark 【发布时间】:2017-02-14 10:23:40 【问题描述】:

我安装了hadoop 2.7,在core-site.xml和hdfs-site.xml中设置路径和配置如下:

core-site.xml

<configuration>
  <property>
    <name>fs.default.name</name>

    <value>hdfs://<ip_addr>:9000/</value>
  </property>
  <property>
    <name>dfs.data.dir</name>

    <value>/home/kavya/hdfs/data</value>
  </property>
  <property>
    <name>dfs.name.dir</name>

    <value>/home/kavya/hdfs/name</value>
  </property>
</configuration>

hdfs-site.xml:

<configuration>
  <property>
    <name>fs.default.name</name>

    <value>hdfs://<ip_addr>:9000/</value>
  </property>
  <property>
    <name>dfs.data.dir</name>

    <value>/home/kavya/hdfs/data</value>
  </property>
  <property>
    <name>dfs.name.dir</name>

    <value>/home/kavya/hdfs/name</value>
  </property>
</configuration>

我还使用 start-dfs.sh 启动了 hdfs。尽管在配置中提到了 IP 地址,但我收到连接被拒绝错误,例如:

Call From spark/<ip_addr> to localhost:8020 failed on connection exception: java.net.ConnectException:Connection refused

我使用以下方法将文件从我的 vm 存储到 hdfs:

hadoop fs -put /opt/TestLogs/traffic_log.log /usr/local/hadoop/TestLogs

这是我在 pyspark 中从 hdfs 读取文件然后提取字段的代码的一部分:

file = sc.textFile("hdfs://<ip_addr>/usr/local/hadoop/TestLogs/traffic_log.log")
result = file.filter(lambda x: len(x)>0)
result = result.map(lambda x: x.split("\n"))
print(result) # PythonRDD[2] at RDD at PythonRDD.scala

lines = result.map(func1).collect() #this is where I get the connection refused error.
print(lines)

func1 是包含正则表达式的函数,用于从我的日志中提取字段。然后将结果返回给lines。该程序在直接从 vm 读取文本文件时运行良好。

Spark 版本:spark-2.0.2-bin-hadoop2.7 虚拟机:CentOS

如何解决这个错误?我错过了什么吗?

【问题讨论】:

看起来你已经在 linux 机器上安装了 hadoop。几件事。您是否正确实施了 ssh?您是否格式化了您的名称节点并启动了所有服务? 是的 ssh 工作正常。我使用start-dfs.sh 格式化了namenode 并启动了服务。但仍然出现连接被拒绝错误。 【参考方案1】:

需要设置两件事:

1) 在 hdfs-site.xml 中确保您已禁用权限:

<property>
  <name>dfs.permissions.enabled</name>
  <value>false</value>
<property>

2) 在 core-site.xml 中将你的 IP 地址设置为 master 的 IP 地址:

<property>
  <name>fs.defaultFS</name>
  <value>hdfs://<MASTER IP ADDRESS>:8020</value>
<property>

【讨论】:

以上是关于使用 pyspark 从 hdfs 读取文件时连接被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

从 pyspark 中的 HDFS 读取 70gb bson 文件然后将其索引到 Elastic 时出错

Pyspark:使用 configParser 读取 HDFS 上的属性文件

PySpark 无法从 hdfs 读取 csv:HiveExternalCatalog 错误

Pyspark:获取HDFS路径上的文件/目录列表

Pyspark - 将文件从本地(边缘节点)复制到 HDFS 位置时出错

如何使用pyspark使用的通配符读取hdfs文件