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

Using Spark Shell (CLI) in standalone mode on distributed files

我在具有 3 台机器的集群上以独立模式使用 Spark 1.3.1(不涉及 YARN/HDFS - 仅涉及 Spark)。我有一个专门的主节点(上面没有工人 运行ning)和 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() 

它 returns 字数计算结果正确。

我的问题是:

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

"If using a path on the local filesystem, the file must also be accessible at the same path on worker nodes. Either copy the file to all workers or use a network-mounted shared file system."

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

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

问题是您在本地 运行ning spark-shell。 运行 spark-shell 的默认设置为 --master local[*],这将 运行 您的代码在您拥有的多个内核上本地化。如果你想 运行 反对你的工人,那么你需要 运行 和 --master 参数指定主人的入口点。如果您想查看可以与 spark-shell 一起使用的可能选项,只需键入 spark-shell --help

至于是否需要将文件放在每台服务器上,简短的回答是肯定的。 HDFS 之类的东西会将其拆分到各个节点,管理器将根据需要处理抓取。我对 NFS 不太熟悉,如果它具有此功能,虽然