apache-spark - 使用 spark 和 HDFS 作为文件存储系统和 YARN 作为资源管理器的优势是什么?
问题描述
我试图了解 spark 是否可以替代用于分析 BigData 的香草 MapReduce 方法。由于spark将数据的操作保存在内存中,所以在使用HDFS作为spark的存储系统时,是否利用了HDFS的分布式存储优势?例如,假设我有 100GB 的 CSV 文件存储在 HDFS 中,现在我想对其进行分析。如果我将其从 HDFS 加载到 spark ,将 spark 将完整的数据加载到内存中以进行转换,或者它将使用分布式环境来完成 HDFS 为 Storage 提供的工作,该工作由用 hadoop 编写的 MapReduce 程序利用。如果不是,那么在 HDFS 上使用 spark 的优势是什么?
PS:我知道如果存在 RAM 溢出,磁盘上的火花会溢出,但是这种溢出是否发生在集群的每个节点(假设每个节点 5 GB)的数据或完整数据(100 GB)上?
解决方案
如果没有足够的内存来读取文件,Spark 作业可以配置为溢出到本地执行器磁盘。或者,您可以在 Spark 阶段之间启用 HDFS 快照和缓存。
您提到了 CSV,这通常是 Hadoop 中的一种糟糕格式。如果你有 100GB 的 CSV,如果用 Parquet 或 ORC 编写,你可以轻松地拥有不到一半......
归根结底,您需要一些处理引擎和一些存储层。例如,在 Mesos 或 Kubernetes 上的 Spark 可能和在 YARN 上一样工作,但它们是独立的系统,不像 HDFS 和 YARN 那样捆绑和捆绑在一起。另外,与 MapReduce 一样,在使用 YARN 时,您将执行转移到数据节点上的 NodeManagers,而不是通过网络拉取数据,您将在其他 Spark 执行模式下这样做。NameNode 和 ResourceManagers 协调这种通信,以便在哪里存储和处理数据
如果您确信 MapReduceV2 可以比 Spark 更好,我会鼓励您查看 Tez
推荐阅读
- antlr - 字符串匹配哪个规则?
- rx-java2 - RxJava 多 Observable 按顺序执行
- ruby-on-rails - 为什么这个 rails 6 视图没有激活 form-inline
- sql-server - How to Display BLOB images from Dynamics (running on SQL Server 2016) in SSRS
- django - 当我尝试在数据库中保存我的销售记录时,为什么会出现此错误?
- jquery - 从表中删除空单元格,但在 jquery 中保留表结构
- ios - 我可以隐藏 Sign In with Apple 按钮的文本吗?(又名 ASAuthorizationAppleIDButton)?
- django - Django annotate(Count('id')) 生成错误的sql查询
- ios - 什么是托管对象上下文?
- c++ - 为什么我的代码在 getline(cin, *userInput) 中不接受空格?