也许我没有完全理解hadoop到底有多复杂,如果有什么不正确的地方请帮我。所以我得到的是:
hadoop是处理大量数据的好东西。主要用于数据分析和挖掘。我可以编写自己的mapreduce函数或使用pig或hive。我甚至可以使用现有的函数, wordcount
诸如此类的东西-我甚至不用写代码。
好吧,但是如果我想把hadoop的强大功能用于非分析/挖掘的事情呢?例如,我有一个用c编写的.net应用程序,它能够读取文件并生成带有一些条形码的PDF。这个应用程序在一台服务器上运行,但是由于一台服务器不能处理大量的文件,我需要更多的电源。为什么不添加一些hadoop节点/集群来处理这个任务呢?
问:我能拿着我的.net应用程序告诉hadoop“在每个节点/集群上都这样做吗?”->运行这些没有编码的作业,有可能吗?
如果不是,我是否必须扔掉.net应用程序,在pig/hive/JavaMapReduce中重写所有内容?或者在我的情况下人们是如何解决这些问题的?
ps:这里重要的不是pdf生成器,也可能不是.net/c#-问题是:语言中有一个应用程序 whatever
-我可以这样把它给hadoop吗?还是我们必须重写mapreduce函数中的所有内容?
2条答案
按热度按时间mnemlml81#
任何可以在linux中运行的应用程序都可以在hadoop中完成,使用hadoop流。c应用程序可以使用mono在linux中运行。
所以你可以同时使用hadoop流媒体和mono来运行你的c应用程序。但是,您仍然需要使您的逻辑适应map-reduce范式。
不过,这对你来说应该不是什么大事。例如,您可以:
仅使用Map器创建hadoop流作业(不使用缩减器)
每个Map器只处理一个文件
每个Map程序都会运行“mono yourapp.exe”,在stdin中读取输入文件,在stdout中写入输出
另外,mono必须在hadoop集群上可用。如果没有,则需要一些管理员权限来自行安装和部署mono。
9cbw7uwe2#
@蒙戈:我不确定我是否理解正确,但我会尝试分享我所知道的。首先,hadoop是一个框架,而不是一个扩展或插件。
如果您想在hadoop中处理文件或执行任务,您需要确保您的需求被正确地提出,以便hadoop理解如何处理您的数据。简单地说,让我们考虑相同的字数计算示例。如果要对文件执行字数计算,可以使用任何语言。假设我们已经用java完成了,并且我们想将它扩展到更大的文件中——将相同的代码转储到hadoop集群中是没有帮助的。尽管java逻辑保持不变,但是您必须用java编写mapreduce代码,hadoop框架可以理解这些代码。
这是一个用于hadoop处理的c#map reduce程序的示例这是另一个不使用hadoop的mapreduce使用asp.net管道的示例
希望这有帮助。我想我的帖子对你的问题有一定的帮助。我相信你会从这里的好人那里得到更好的想法/建议/答案。。。
p、 s:在hadoop中,你可以做任何与文件处理/数据分析相关的事情。这完全取决于你怎么做:)
干杯!