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

标签 apache-spark apache-spark-sql

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

$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 并没有真正在集群上启 Action 业,而是在本地进行计算(这很奇怪,因为我没有在节点上运行工作程序,我启动了 shell)

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

最佳答案

问题是您在本地运行 spark-shell。运行 spark-shell 的默认值是 --master local[*] ,它将在您拥有的尽可能多的内核上本地运行您的代码。如果你想对抗你的 worker ,那么你需要使用 --master 运行。指定 master 入口点的参数。如果您想查看可用于 spark-shell 的可能选项,只需键入 spark-shell --help
至于是否需要将文件放在每台服务器上,简短的回答是肯定的。像 HDFS 这样的东西会将它拆分到节点上,管理器将根据需要处理提取。我对 NFS 不太熟悉,如果它有这个功能,虽然

关于apache-spark - 在分布式文件上以独立模式使用 Spark Shell (CLI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30673890/

相关文章:

azure - 有没有办法在映射数据流中动态传递分区的多个键

apache-spark - spark-submit 中的 Spark : How to set spark. yarn.executor.memoryOverhead 属性

apache-spark - Spark 是否有关于 RDD 的最佳分区数量及其元素数量的经验法则?

scala - 如何解释Spark的TreeNode中的TreeNode类型限制和自类型?

python - PySpark 将字典的字符串化数组分解成行

apache-spark - 使用 Dataframes 从 Informix 到 Spark 的 JDBC

apache-spark - MapGroupsWithState 的 Spark 结构化流状态存储在哪里?

java - NoSuchElementException : next on empty iterator in MapPartitionsToPair-Spark

apache-spark - Spark CrossValidatorModel是否可以访问除bestModel以外的其他模型?

java - 如何使用Java将Spark中数据库的列名更改为大写