在没有编码mapreduce的情况下在hadoop上运行我自己的应用程序?

时间:2015-10-27 15:53:21

标签: c# .net hadoop mapreduce

也许我并不完全明白复杂的hadoop究竟是多么复杂,如果有什么不对的地方请帮助我。所以我得到的是:

Hadoop是处理大量数据的好东西。主要用于数据分析和挖掘。我可以编写自己的mapreduce函数或使用pig或hive。我甚至可以使用现有的函数wordcount和类似的东西 - 我甚至不必编写代码。

好的,但是如果我想将hadoop的强大功能用于非分析/挖掘的东西呢?例如,我有一个用C#编写的.NET应用程序,它能够读取文件并生成带有一些条形码的pdf。此应用程序在一台服务器上运行,但由于一台服务器无法处理大量文件,我需要更多电源。为什么不添加一些hadoop节点/集群来处理这项工作?

问题:我可以使用我的.NET应用程序并告诉hadoop"在您的节点/群集上的每一个上执行此操作&#34 ;? - >没有编码就可以运行这些工作,这有可能吗?

如果没有,我是否必须丢弃.NET应用程序并重写pig / hive / java-mapreduce中的所有内容?或者在我的情况下人们如何解决这些问题?

PS:这里重要的不是pdf生成器,也可能不是.NET / C# - 问题是:有一个语言whatever的应用程序 - 我能不能像那样给它一个hadoop?或者我们是否必须重写mapreduce函数中的所有内容?

2 个答案:

答案 0 :(得分:0)

@Mongo:我不确定我是否理解正确,但我尝试分享我所知道的。首先,hadoop是一个框架 - 不是扩展或插件。

如果您要处理文件或在hadoop中执行任务,您需要确保正确提出您的要求,以便hadoop了解如何处理您的数据。简单来说,让我们考虑相同的字数例子。如果要对文件执行单词计数,可以使用任何语言进行。让我们说我们已经用Java完成了它,并且我们希望将它扩展为更大的文件 - 将相同的代码转储到hadoop集群中会没有用。虽然java逻辑保持不变,但您必须在java中编写一个Map减少代码,这将由hadoop框架理解。

以下是Hadoop处理C# map reduce program的示例 这是MapReduce Without Hadoop Using the ASP.NET Pipeline

的另一个例子

希望这有帮助。我假设我的帖子为您的问题增加了一些价值。我相信你会从这里很棒的人那里得到更好的想法/建议/答案......

P.S:您可以在Hadoop中执行任何与文件处理/数据分析相关的操作。这完全取决于你如何做到这一点:)

干杯!

答案 1 :(得分:0)

任何可以在Linux中运行的应用程序都可以使用Hadoop-streaming在Hadoop中完成。 C#应用程序可以使用Mono在Linux中运行。

因此,您可以使用Hadoop-streaming和Mono运行C#应用程序。但是,您仍然需要根据map-reduce范例调整逻辑。

然而,在你的情况下,这应该不是什么大问题。例如,您可以:

  • 仅使用映射器创建Hadoop流式作业(无还原器)
  • 每个映射器只处理1个文件
  • 每个映射器将运行“mono yourApp.exe”,在stdin中读取输入文件,并在stdout中写入输出

此外,必须在Hadoop群集上提供Mono。如果没有,则需要一些管理员权限才能自行安装和部署Mono。