【问题标题】:Low efficiency of Spark's application on standalone clusterSpark在独立集群上的应用效率低下
【发布时间】:2016-04-25 20:35:10
【问题描述】:

我正在尝试在独立集群上运行 spark 应用程序。在这个应用程序中,我使用 tf-idf 向量训练朴素贝叶斯分类器。

我以与这篇文章(Spark MLLib TFIDF implementation for LogisticRegression)类似的方式编写了应用程序。 主要区别在于,我对每个文档进行标记化和规范化:

JavaRDD<Document> termDocsRdd = sc.wholeTextFiles("D:/fileFolder").flatMap(new FlatMapFunction<Tuple2<String,String>, Document>() {
        @Override
        public Iterable<Document> call(Tuple2<String,String> tup) 
        { 
            return Arrays.asList(parsingFunction(tup)); 
        } 
    });

parsingFunction 没有任何 Spark 函数,如 map 或 flatMap 等。因此它不包含任何数据分布函数。

我的集群是 - 一台主机和另外两台机器 - 节点。所有机器都有 8 核 CPU 和 16 GB RAM。我正在尝试在 20 个文本文件(每个 ~ 100 KB - 1.5 MB)上训练分类器。我不使用分布式文件系统,而是直接将文件放到节点上。

问题是我的集群没有我想象的那么快 - 分类器训练了大约 5 分钟...在本地模式下,此操作花费的时间要少得多。

应该注意什么?

如果有任何建议,我将不胜感激。

谢谢!

【问题讨论】:

    标签: apache-spark apache-spark-mllib


    【解决方案1】:

    cache the RDD 是为了训练数据吗?除非 RDD 被缓存,否则像训练贝叶斯分类器这样的迭代算法将表现不佳。

    【讨论】:

    • 我使用 RDD 缓存,就像它在这篇文章 [stackoverflow.com/questions/26897908/….或者,也许,我应该在我的应用程序的训练部分缓存每个 RDD?谢谢!
    • 我尝试缓存所有 RDD,我发现性能有所提高。现在 MLib 的贝叶斯训练时间改为 3.5 分钟 - 1.5 分钟。您如何看待 - 这对 Spark 来说足够了吗?训练数据 - 30 个文本文件(总共 30 Mb)。集群 - 1 台主机和 3 台从机。每台机器都有 8 核 CPU 和 16 Gb RAM。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多