Chi*_*idu 10 hadoop apache-spark
我已经读过Apache Spark将数据存储在内存中.但是,Apache Spark旨在分析大量数据(即大数据分析).在这种情况下,内存数据存储真正意味着什么?它可以存储的数据是否受RAM限制?它的数据存储与使用HDFS的Apache Hadoop相比如何?
jkg*_*yti 14
在Hadoop中,数据在步骤之间持久保存到磁盘,因此典型的多步骤作业最终会看起来像这样:
hdfs -> read & map -> persist -> read & reduce -> hdfs -> read & map -> persist -> read and reduce -> hdfs
Run Code Online (Sandbox Code Playgroud)
这是一个出色的设计,当你批量处理符合map-reduce模式的文件时,它的使用非常有意义.但是对于某些工作负载,这可能会非常慢 - 迭代算法尤其会受到负面影响.您花了一些时间创建一些数据结构(例如图表),并且您希望在每个步骤中执行的操作都是更新分数.保持和从磁盘读取整个图形将减慢您的工作.
Spark使用支持循环数据流的更通用的引擎,并尝试在作业步骤之间保留内存.这意味着,如果您可以创建数据结构和分区策略,您的数据不会在作业的每个步骤之间随机播放,您可以有效地更新它,而无需在两个步骤之间进行序列化并将所有内容写入磁盘.这就是为什么Spark在他们的头版上有一张图表,显示逻辑回归的速度提高了100倍.
如果您编写的Spark作业只是计算数据集中每个输入行的值,并将其写回磁盘,那么Hadoop和Spark在性能方面几乎相同(Spark的启动时间更快,但是当我们在一个步骤中花费数小时处理数据时,这几乎不重要.
如果Spark在步骤之间无法在内存中保存RDD,它会将其溢出到磁盘,就像Hadoop一样.但请记住,Spark并不是一个灵丹妙药,并且会出现一些极端情况,你必须要打击Spark内存中的性质导致OutOfMemory问题,而Hadoop只会将所有内容写入磁盘.
我个人喜欢这样想:在你的500 64GB机器集群中,Hadoop的创建是为了通过分配磁盘读写来有效地批量处理你的500 TB作业.Spark利用500*64GB = 32TB内存的事实可以完全解决你内存中的其他一些问题!
| 归档时间: |
|
| 查看次数: |
3648 次 |
| 最近记录: |