我试图了解spark是否可以替代BigMap分析中常用的MapReduce方法。由于spark将操作保存在内存中的数据上,因此在将HDFS用作spark的存储系统时,它是否利用了HDFS的分布式存储的优势?例如,假设我在HDFS中存储了100GB CSV文件,现在我要对其进行分析。如果我将其从HDFS加载到spark,将在内存中加载完整的数据以进行转换,否则它将使用分布式环境来完成HDFS为存储提供的工作,该工作由hadoop中编写的MapReduce程序利用。如果不是,那么使用spark而不是HDFS有什么优势?
PS:我知道磁盘上是否有火花溢出,如果RAM溢出,但是这种溢出是否发生在集群的每个节点的数据(假设每个节点5 GB)或整个数据(100GB)上?
答案 0 :(得分:0)
Spark作业配置为溢出到本地执行器磁盘。或者,您可以在Spark阶段之间启用HDFS快照和缓存。
您提到了CSV,这通常是Hadoop中的一种不好的格式。如果您有100GB的CSV,那么用Parquet或ORC编写的CSV不到一半就很容易了。
最终,您需要一些处理引擎和一些存储层。例如,Mesos或Kubernetes上的Spark可能与YARN上的效果一样好,但是它们是独立的系统,并且没有像HDFS和YARN那样捆绑和捆绑在一起。另外,与MapReduce一样,使用YARN时,您将执行转移到数据节点上的NodeManagers上,而不是像其他Spark执行模式那样通过网络转移数据。 NameNode和ResourceManager协调此通信,以存储和处理数据
如果您确信MapReduceV2可以比Spark更好,那么我建议改用Tez。