0

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

4

1 回答 1

1

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

但!

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

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

于 2013-05-21T04:49:00.837 回答