Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要澄清hadoop中mahout的用法吗_Hadoop_Machine Learning_Bigdata_Mahout_Mahout Recommender - Fatal编程技术网

需要澄清hadoop中mahout的用法吗

需要澄清hadoop中mahout的用法吗,hadoop,machine-learning,bigdata,mahout,mahout-recommender,Hadoop,Machine Learning,Bigdata,Mahout,Mahout Recommender,我目前在mahout中使用内存中的推荐API实现了一个推荐器。但是,为了计算离线推荐,我想使用hadoop开发一个分布式解决方案。这是我第一次使用hadoop,我想澄清一些概念和api用法 目前,我对hadoop的了解很少,我认为正确的方法如下: 使用ApacheDrill之类的工具,用用户和项目数据填充hdfs 在来自hdfs的数据上使用mahout列中的推荐作业 将hdfs中的结果数据转换为solr使用的索引碎片 使用solr向用户群提供建议 然而,我希望对该设计的几个方面进行澄清: 如

我目前在mahout中使用内存中的推荐API实现了一个推荐器。但是,为了计算离线推荐,我想使用hadoop开发一个分布式解决方案。这是我第一次使用hadoop,我想澄清一些概念和api用法

目前,我对hadoop的了解很少,我认为正确的方法如下:

  • 使用ApacheDrill之类的工具,用用户和项目数据填充hdfs

  • 在来自hdfs的数据上使用mahout列中的推荐作业

  • 将hdfs中的结果数据转换为solr使用的索引碎片

  • 使用solr向用户群提供建议

然而,我希望对该设计的几个方面进行澄清:

  • 如何以内存中实时推荐中使用的方式使用重新排序器

  • 调用推荐作业的最佳方式是什么


  • 除了这两个问题之外,我还有其他问题,但这些问题的答案将是一个巨大的帮助。

    您可能正在谈论Mahout+Hadoop+Solr推荐程序。此方法以两种不同的方式处理重新排序

    基本推荐词可以通过两种方式组合在一起:

  • 将数据以(用户id、项目id、首选项权重)的形式输入HDFS后,对数据运行ItemSimilarityJob(使用LLR相似性,这是最好的)。它将创建所谓的指标矩阵。这将是一个逐项id的稀疏值矩阵,表示任意两个项目之间的相似程度。然后必须将其转换为Solr可以索引的值。这意味着将内部Mahout整数ID转换为某种唯一的字符串表示形式,这可能就是它们最初的样子。这将看起来像一个CSV(项目123、项目223、项目643、项目293、项目445…)。所以有两个Solr字段,第一个是项目id,第二个是类似项目的列表。所有ID必须是文本标记。然后,对建议的查询是一个Solr查询,它由特定用户显示出偏好的项目ID组成。所以query=“item223 item344 item445…”。对索引矩阵值所在的字段进行查询。您将获得项目ID的有序列表
  • 对您来说,一种更简单的方法是使用Mahout 1.0-SNAPSHOT的/examples文件夹中的工具,或者在此处:。它接收原始日志文件,其中包含用户和项目ID的唯一字符串。它完成了Hadoop上的所有工作,输出可以由Solr直接索引或加载到DB中的CSV,如上所述
  • 我制作演示站点()的方法是使用我的Solr web app集成,将指标矩阵放入数据库,将类似的项目列表附加到我的项目集合中。所以第123项得到了第223项643项293项445项。。。在其指示器字段中。为集合编制索引后,查询将是用户首选的项

    以下是三种进行重新排序的方法:

  • 将元数据与查询混合。因此,您可以对指示器字段执行query=“item223 item344 item445…”,对“流派”字段执行scfi。这使您可以在查询中混合协作过滤和元数据,正如您所想象的,REC基于用户的Pref,但偏向于“Scfi”。一旦将项+指标+元数据放入索引中,您还可以做很多其他有趣的事情
  • 按元数据筛选记录。如果您愿意,您可以得到不倾斜但经过过滤的REC。对指示器字段使用Solr query=“item223 item344 item445…”,对“流派”字段使用“scfi”作为过滤器。在这种情况下,你除了“科幻”什么都得不到,而你得到的大多是“科幻”
  • 根据您对用户、上下文或项目的其他了解,取回已排序的REC列表,并以任何方式重新存储它们。通常,这些可以编码到Solr查询中,并用一个查询完成,但也可以在返回REC后进行重新排序和过滤。您必须编写该代码,它不是内置的
  • 有趣的是,您可以将过滤器、元数据字段和用户首选项与Solr所称的“boost”值混合使用,以获得各种各样的重新排序。Solr甚至可以使用位置来查询、倾斜或过滤


    注意:您不必担心Solr碎片。Solr将直接为大多数DBs和HDF编制索引,但只有索引是分片的。如果你有一个非常大的索引,你可以切分它;如果你每秒有很多查询,你可以复制它(或者为了故障转移)。Solr查询通常非常快,因此我会担心在您拥有一个正常运行的系统后会出现这种情况,因为这是一个配置问题,不应该受到其他工作流的影响。

    考虑到应用程序的要求,我认为最适合我的方法是选项1和选项3。对于我应该如何调用推荐过程,您有什么想法吗?是否应将其设置为cron作业?使用Solr&Mahout,您有两个过程:1)通过创建指标矩阵来培训推荐人。如果您有将用户首选项放入日志文件的后台任务,则可以使用cron作业来“重新培训”,但这比您想象的时间要短。一旦你有了Mahout的输出,让Solr索引它。除非指标矩阵中有使用数据,否则不能推荐。2) 查询是用户首选项。这甚至可以实时收集。当用户喜欢,购买,费率,无论你认为是一个指标,这将进入您的查询。获取最新数据。