我需要计算 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