Spark 本地 vs hdfs 持久性

arj*_*arj 5 performance hadoop apache-spark

我在同一台机器上有一个 Spark 集群和一个 Hdfs。我在每台机器的本地文件系统和 hdfs 分布式文件系统上复制了一个大约 3GB 的文本文件。

我有一个简单的字数统计 pyspark 程序。

如果我提交从本地文件系统读取文件的程序,它会持续大约 33 秒。如果我提交从 hdfs 读取文件的程序,它会持续大约 46 秒。

为什么 ?我期望完全相反的结果。

在 sgvd 的请求后添加:

16从1主

没有特定设置的 Spark Standalone(复制因子 3)

版本 1.5.2

import sys
sys.path.insert(0, '/usr/local/spark/python/')
sys.path.insert(0, '/usr/local/spark/python/lib/py4j-0.8.2.1-src.zip')
import os
os.environ['SPARK_HOME']='/usr/local/spark'
os.environ['JAVA_HOME']='/usr/local/java'
from pyspark import SparkContext
#conf = pyspark.SparkConf().set<conf settings>


if sys.argv[1] == 'local':
    print 'Esecuzine in modalita local file'
    sc = SparkContext('spark://192.168.2.11:7077','Test Local file')
    rdd = sc.textFile('/root/test2')
else:
    print 'Esecuzine in modalita hdfs'
    sc = SparkContext('spark://192.168.2.11:7077','Test HDFS file')
    rdd = sc.textFile('hdfs://192.168.2.11:9000/data/test2')


rdd1 = rdd.flatMap(lambda x: x.split(' ')).map(lambda x:(x,1)).reduceByKey(lambda x,y:x+y)
topFive = rdd1.takeOrdered(5,key=lambda x: -x[1])
print topFive
Run Code Online (Sandbox Code Playgroud)

Alb*_*nto 0

这是因为数据是如何分布的,单个文档不是一个好的选择,有几种更好的选择,例如parquet,如果你这样做,你会发现性能会明显提高,这是因为文件的方式分区,允许您的Apache Spark集群并行读取这些部分,从而提高性能。