在独立模式下对分布式文件使用Spark Shell(CLI)

时间:2015-06-05 18:58:56

标签: apache-spark apache-spark-sql

我在具有3台计算机的群集上以独立模式使用Spark 1.3.1(不涉及YARN / HDFS - 仅限Spark)。我有一个专用节点用于主服务器(没有工作人员在其上运行)和2个单独的工作节点。 集群开始健康,我只是尝试通过spark-shell运行一些简单的例子来测试我的安装(CLI - 我在主机上启动):我只是将一个文件放在主节点上的localfs上(工作人员做的)没有这个文件的副本)我只是运行:

$SPARKHOME/bin/spark-shell

...

scala> val f = sc.textFile("file:///PATH/TO/LOCAL/FILE/ON/MASTER/FS/file.txt")

scala> f.count() 

并正确返回单词计数结果。

我的问题是:

1)这与spark documentation(使用外部数据集)所说的相矛盾:

"如果在本地文件系统上使用路径,则还必须可以在工作节点上的相同路径上访问该文件。将文件复制到所有工作人员或使用网络安装的共享文件系统。"

我没有使用NFS而且我没有将文件复制到工作人员,所以它是如何工作的? (是因为spark-shell没有真正在集群上启动作业,并且在本地进行计算(这很奇怪,因为我没有在节点上运行工作程序,我开始使用shell)

2)如果我想通过Spark的thrift服务器(比如直线或hiveserver2在Hive中使用的方式)对一些大型数据文件(不适合一台机器)运行SQL脚本(在独立模式下) ),我是否需要将文件放在NFS上,这样每个工作人员都可以看到整个文件,或者我是否有可能从文件中创建块,并将每个较小的块(适合单个机器)放在每个工作器上,然后使用多个路径(逗号分隔)将它们全部传递给提交的查询?

1 个答案:

答案 0 :(得分:4)

问题是你在本地运行spark-shell。运行spark-shell的默认值为--master local[*],它将在您拥有的核心上本地运行代码。如果要对工作人员进行运行,则需要使用指定主要入口点的--master参数运行。如果您想查看可以与spark-shell一起使用的可能选项,只需键入spark-shell --help

即可

至于您是否需要将文件放在每台服务器上,简短的回答是肯定的。像HDFS这样的东西会在节点之间分割它,管理器会根据需要处理提取。我不熟悉NFS,如果它具有此功能,但