2016-03-07 234 views
4

我试图读取我的hdfs中的文件。这里显示了我的hadoop文件结构。从pyspark读取hdfs中的文件

[email protected]:/usr/local/spark/bin$ hadoop fs -ls -R/
drwxr-xr-x - hduser supergroup   0 2016-03-06 17:28 /inputFiles 
drwxr-xr-x - hduser supergroup   0 2016-03-06 17:31 /inputFiles/CountOfMonteCristo 
-rw-r--r-- 1 hduser supergroup 2685300 2016-03-06 17:31 /inputFiles/CountOfMonteCristo/BookText.txt 

这里是我的pyspark代码:

from pyspark import SparkContext, SparkConf 

conf = SparkConf().setAppName("myFirstApp").setMaster("local") 
sc = SparkContext(conf=conf) 

textFile = sc.textFile("hdfs://inputFiles/CountOfMonteCristo/BookText.txt") 
textFile.first() 

我得到的错误是:

Py4JJavaError: An error occurred while calling o64.partitions. 
: java.lang.IllegalArgumentException: java.net.UnknownHostException: inputFiles 

这是因为我错误地设置了我的sparkContext?我正在通过虚拟机在Ubuntu 14.04虚拟机中运行它。

我不知道我在做什么错在这里....

回答

6

如果未提供任何配置,则可以通过完整路径访问hdfs文件(namenodehost,如果您的本地主机如果hdfs位于本地环境中)。

hdfs://namenodehost/inputFiles/CountOfMonteCristo/BookText.txt 
+0

有没有办法设置名称节点主机,所以它不是硬编码在python文件中?我们如何才能最好地参与其中?也许使用某种可以在多个应用程序之间共享的配置文件? –

6

既然你不提供权威URI应该是这样的:

hdfs:///inputFiles/CountOfMonteCristo/BookText.txt 

否则inputFiles被解释为主机名。如果配置正确,则不需要使用方案:

/inputFiles/CountOfMonteCristo/BookText.txt 

改为。