我将通过在centos 7上运行pythonpagerank来测试spark的rdd缓存:
spark-submit --master yarn --deploy-mode cluster /usr/spark/examples/src/main/python/pagerank.py input/testpr.txt 10
如您所见,我正在执行pagerank,因此testpr.txt和10是参数。文件pagerank.py包含以下代码:
spark = SparkSession\
.builder\
.appName("PythonPageRank")\
.getOrCreate()
lines = spark.read.text(sys.argv[1]).rdd.map(lambda r: r[0])
links = lines.map(lambda urls: parseNeighbors(urls)).distinct().groupByKey().cache()
ranks = links.map(lambda url_neighbors: (url_neighbors[0], 1.0))
for iteration in range(int(sys.argv[2])):
contribs = links.join(ranks).flatMap(
lambda url_urls_rank: computeContribs(url_urls_rank[1][0], url_urls_rank[1][1]))
ranks = contribs.reduceByKey(add).mapValues(lambda rank: rank * 0.85 + 0.15)
for (link, rank) in ranks.collect():
print("%s has rank: %s." % (link, rank))
spark.stop()
如你所见, links = lines.map(lambda urls: parseNeighbors(urls)).distinct().groupByKey().cache()
包含缓存。但是,当我查看SparkUI的存储页面时,我找不到任何关于缓存的内容。
这是pagerank应用程序,它运行良好。
这是应用程序的作业页,操作 collect()
生成作业:
这是应用程序的stage页面,它显示pagerank中包含许多迭代。
下面是应用程序的存储页,其中应该包含缓存的RDD。然而,它什么也没有,似乎 cache()
不起作用。
为什么在存储页面上看不到任何缓存的RDD?为什么 cache()
在pagerank.py工作?希望有人能帮我。
1条答案
按热度按时间sulc1iza1#
您可以添加
spark.eventLog.logBlockUpdates.enabled true
进入spark-defaults.conf
,这不会使spark history服务器的“存储”选项卡为空。