【问题标题】:mahout ssvd job performancemahout ssvd 工作绩效
【发布时间】:2013-05-21 12:49:00
【问题描述】:

我需要计算 ssvd。 对于 50 000 x 50 000 矩阵,当减少到 300x300 库时,如 ssvdlibc 等可以在不到 3 分钟的时间内完成计算;

我想为大数据做这件事,尝试使用 mahout。首先,我尝试在我的小数据集(即 50000 x 50000)上本地运行它,但完成这个简单的工作需要 32 分钟,溢出文件使用大约 5.5GB 的磁盘空间,导致我的 intel i5 具有 8GiB ram和 SSD 驱动器冻结几次。

我知道 mahout 和 hadoop 必须执行许多额外的步骤才能将所有内容作为 map-reduce 作业执行,但性能损失似乎很大。我想我的设置一定有问题。

我已经阅读了一些 hadoop 和 mahout 文档,在我的配置文件中添加了一些参数,但它仍然非常慢。大多数时候它只使用一个 CPU。

有人可以告诉我我的设置有什么问题吗?是否可以通过某种方式针对这种简单的机器使用进行调整,以查看更大的部署需要寻找什么?

我的配置文件: mapred-site.xml:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
<property>
    <name>mapred.job.tracker</name>
    <value>local</value>
</property>
<property>
 <name>mapred.child.java.opts</name>
 <value>-Xmx5000M</value>
</property>

<property>
 <name>mapred.tasktracker.map.tasks.maximum</name>
 <value>3</value>
</property>
<property>
 <name>mapred.tasktracker.reduce.tasks.maximum</name>
 <value>3</value>
</property>

<property>
<name>io.sort.factor</name>
<value>35</value>
</property>
</configuration>

核心站点.xml:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
<property>
<name>fs.default.name</name>
<value>file:///</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>file:///</value>
</property>



<!--
<property>
 <name>fs.inmemory.size.mb</name>
 <value>200</value>
</property>
<property>
 <name>io.sort.factor</name>
 <value>100</value>
</property>
-->
<property>
 <name>io.sort.mb</name>
 <value>200</value>
</property>
<property>
 <name>io.file.buffer.size</name>
 <value>131072</value>
</property>

</configuration>

我就是这样工作的:

mahout ssvd --rank 400 --computeU true --computeV true --reduceTasks 3  --input ${INPUT} --output ${OUTPUT} -ow --tempDir /tmp/ssvdtmp/

我还使用 -Xmx=4000m 配置了 hadoop 和 mahout

【问题讨论】:

    标签: hadoop mahout


    【解决方案1】:

    首先我会验证它是否并行运行,确保 hdfs 复制设置为“1”,然后通常检查您的参数。只看到一个内核被使用绝对是个问题!

    但是!

    缓慢的问题可能不会完全消失,您可以通过适当的配置显着加快速度,但归根结底,hadoop 模型不会胜过优化的共享内存模型库一台电脑。

    hadoop/mahout 的强大功能是用于大数据,老实说 50k x 50k 仍然处于相当小的领域,在单台计算机上易于管理。从本质上讲,Hadoop 以速度换取可扩展性。因此,虽然它可能无法在 50000 x 50000 上胜过其他两个,但尝试让它们在 300000 x 300000 上工作,而使用 Hadoop,您就可以坐在分布式集群上。

    【讨论】:

    • 我已将 hdfs 复制设置为 1。我已将 jobtracker 从本地更改为:mapred.job.trackerlocalhost:54311现在我的 mapred.map.tasks 属性生效了。现在在四个内核中的一个或两个上工作 - 稍微好一点,但仍然很差,执行时间大约要好 5 分钟
    • Bt-job 是造成大量泄漏的原因之一。我会尝试将 io.sort.mb 修改为某个较大的值,例如 5000,看看是否有帮助
    • 我希望 hadoop 有一些自动实用程序来更改指定范围内的选定配置变量并运行速度测试。这对于使集群正常工作非常有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多