我正在尝试理解spark是否是分析BigData的普通MapReduce方法的替代方法。既然spark在使用HDFS作为spark的存储系统时,将对数据的操作保存在内存中,那么它是否利用了HDFS的分布式存储?例如,假设我在HDFS中存储了100 it的CSV文件,现在我想对其进行分析。如果我将其从HDFS加载到spark,它将触发将完整数据加载到内存中进行转换,或者它将使用分布式环境来完成其作业,该作业是由在hadoop中编写的MapReduce程序所利用的。如果不是,那么使用spark比使用HDFS有什么优势?
PS:我知道如果有RAM溢出,磁盘上会出现火花溢出,但是这种溢出是发生在集群的每个节点(假设每个节点5 GB )的数据上,还是发生在完整的数据(100 GB)上?
发布于 2019-01-27 19:14:59
如果没有足够的内存来读取您的文件,Spark作业可以配置为溢出到本地executor磁盘。或者,您可以在Spark stages之间启用HDFS快照和缓存。
您提到了CSV,一般来说,在Hadoop中使用CSV是一种糟糕的格式。如果你有100 or的CSV,如果用拼图或ORC编写,你可以很容易地拥有不到一半的CSV……
归根结底,你需要一些处理引擎和一些存储层。例如,Spark在Mesos或Kubernetes上可能和在纱线上一样好用,但它们是独立的系统,不像HDFS和纱线那样捆绑在一起。另外,像Spark一样,当使用YARN时,您将把执行移动到数据节点上的NodeManagers,而不是像使用其他Spark执行模式那样通过网络拉取数据。NameNode和ResourceManagers协调这种数据存储和处理位置的通信
如果您确信MapReduceV2可以比Spark更好,我建议您转而使用Tez
https://stackoverflow.com/questions/54380931
复制相似问题