2016-03-31 155 views
0

我从spark开始,从未使用过Hadoop。我有10个iMac,我已经用Hadoop 2.6安装了Spark 1.6.1。我下载了预编译版本,并将提取的内容复制到/usr/local/spark/。我做了所有环境变量设置SCALA_HOME,更改为PATH和其他火花conf。我能够运行spark-shellpyspark(带有anaconda的python)。Spark RDD问题

我已经设置了独立群集;所有节点都显示在我的Web用户界面上。现在,通过使用python shell(在本地群集上运行),我跟着this link's python interpreter word count example

这是我用过

from operator import add 

def tokenize(text): 
    return text.split() 

text = sc.textFile("Testing/shakespeare.txt") 
words = text.flatMap(tokenize) 
wc = words.map(lambda x: (x,1)) 
counts = wc.reduceByKey(add) 

counts.saveAsTextFile("wc") 

这是给我的错误,该文件shakespeare.txt上的从节点没有被发现的代码。在周围搜索我明白,如果我不使用HDFS,那么文件应该出现在同一路径上的每个从节点上。这里是堆栈跟踪 - github gist

现在,我有几个问题 -

  • 是不是RDD应该被分配?也就是说,它应该在所有节点上分发(当操作在RDD上运行时)该文件,而不是要求我分发它。

  • 我用Hadoop 2.6下载了spark,但是没有任何Hadoop命令可用于制作HDFS。我提取了在spark/lib中找到的Hadoop jar文件,希望找到一些可执行文件,但没有任何内容。那么,火花下载中提供了哪些Hadoop相关文件?

  • 最后,我如何在群集上运行分布式应用程序(spark-submit)或分布式分析(使用pyspark)?如果我必须创建一个HDFS,那么需要额外的步骤?另外,我怎样才能在这里创建一个HDFS?

+0

你能告诉我们你的代码吗? –

+0

我已经添加了代码和堆栈跟踪。 – TrigonaMinima

+0

RDD不会为您分发文件,这就是为什么您通常会使用HDFS等分布式文件系统的原因。 – femibyte

回答

0

如果你读了Spark Programming Guide,你会找到答案到你的第一个问题:

为了说明RDD基础,考虑下面的简单程序:

val lines = sc.textFile("data.txt") 
val lineLengths = lines.map(s => s.length) 
val totalLength = lineLengths.reduce((a, b) => a + b) 

第一行从外部文件定义基础RDD。此数据集 未加载到内存中或以其他方式执行:行仅仅是指向该文件的指针 。第二行将lineLengths定义为地图转换的结果 。同样,由于懒惰,lineLengths不是立即计算的 。最后,我们运行reduce,这是一个动作。 在这一点上,Spark将计算分解成独立机器上运行的任务,每台机器都运行其地图部分和局部缩小部分,只返回其驱动程序的答案。

请记住,转换是在Spark工作人员上执行的(请参阅link,幻灯片n.21)。

关于第二个问题,Spark只包含libs,如您所见,使用Hadoop基础结构。您需要首先安装Hadoop集群(Hdfs等),才能使用它(使用Spark中的库):请参阅Hadoop Cluster Setup

要回答你最后的问题,我希望official documentation有帮助,特别是Spark Standalone

+0

啊!谢谢。我遵循了您指出的相同官方文档,但没有提及设置Hadoop集群。因此,后续问题 - – TrigonaMinima

+0

Hadoop不是Spark,这就是您在我发布的链接中找不到任何内容的原因。我用hadoop集群设置链接更新了我的答案。 – Markon

+0

设置hadoop集群后,我必须启动namenode,spark会自动使用它? – TrigonaMinima