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

时间:2017-02-14 10:23:40

标签: hadoop apache-spark hdfs pyspark

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

芯-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>

HD​​FS-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
  VM:CentOS

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

1 个答案:

答案 0 :(得分:0)

需要设置两项:

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

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

2)在core-site.xml中,将您的IP地址设置为主服务器的IP地址:

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