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

Pou*_*ria 5 apache-spark apache-spark-sql

我在具有3台计算机的群集上以独立模式(不涉及YARN / HDFS-仅使用Spark)使用Spark 1.3.1。我有一个专用于主节点的节点(没有在其上运行的工作程序)和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() 
Run Code Online (Sandbox Code Playgroud)

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

我的问题是:

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

“如果在本地文件系统上使用路径,则还必须在工作节点上的同一路径上访问该文件。要么将文件复制到所有工作者,要么使用网络安装的共享文件系统。”

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

2)如果我想通过Spark的旧服务器对某些大数据文件(不适合一台机器)运行SQL脚本(以独立模式运行)(例如,在Hive中使用beeline或hiveserver2的方式),我是否需要将NFS上的文件,以便每个工作人员都可以看到整个文件,或者我可以从文件中创建块,然后将每个较小的块(可容纳在一台机器上)放在每个工作人员上,然后使用多个路径(将其全部传递给提交的查询?

Jus*_*ony 4

问题是您正在本地运行 Spark-shell。运行 Spark-Shell 的默认设置是 as --master local[*],它将在您拥有的尽可能多的内核上本地运行您的代码。如果您想针对您的工作人员运行,那么您将需要使用--master指定主节点入口点的参数来运行。如果您想查看可以与 Spark-Shell 一起使用的可能选项,只需键入spark-shell --help

至于是否需要将文件放在每台服务器上,简短的答案是肯定的。像 HDFS 这样的东西会将其分割到节点上,管理器将适当地处理获取。我对 NFS 不太熟悉,但它是否具有此功能