与使用java相比,在hbase/hadoop中使用流作业是否有任何功能损失?



如果这是一个基本问题,请提前道歉。我正在阅读和学习一本关于hbase的书,但是书中的大多数例子(以及在线)都倾向于使用Java(我猜是因为hbase是Java原生的)。有一些python的例子,我知道我可以访问hbase与python(使用thrift或其他模块),但我想知道额外的功能?

例如,hbase有一个'coprocessors'函数,它将数据推送到你进行计算的地方。这种类型是否与python或其他使用流式hadoop作业的应用程序一起工作?似乎java可以知道你在做什么,并相应地管理数据流,但这如何与流工作呢?如果它不起作用,是否有一种方法来获得这种类型的功能(通过流媒体而不切换到另一种语言)?

也许另一种问这个问题的方式是…一个非java程序员在流媒体时能做些什么来获得hadoop特性的所有好处?

提前感谢!

据我所知,你在谈论两个(或更多)完全不同的概念。

"Hadoop Streaming"是通过你的可执行文件流数据(独立于你选择的编程语言)。当使用流时,不会有任何功能损失,因为功能基本上是映射/减少你从hadoop流中获得的数据。

对于hadoop部分,您甚至可以使用pig或hive大数据查询语言来高效地完成任务。有了最新版本的pig,你甚至可以用python编写自定义函数,并在你的pig脚本中使用它们。

尽管有一些工具可以让你使用你熟悉的语言,但不要忘记hadoop框架主要是用java编写的。有时可能需要编写专门的InputFormat;或UDF在猪等。那么,掌握一些java知识就会派上用场了。

你的"Hbase协处理器"的例子与hadoop的流功能有点无关。Hbase协处理器由2部分组成:服务器端部分、客户端部分。我很确定会有一些有用的服务器端协处理器嵌入到hbase的发布;但除此之外,您还需要编写自己的协处理器(坏消息是:它是java)。对于客户端,我相信你可以用你最喜欢的编程语言通过节俭使用它们,没有太多的问题。

所以作为你问题的答案:你总是可以逃避学习java;仍然在使用hadoop来发挥它的潜力(使用第三方库/应用程序)。但是,当狗屎击中风扇更好的理解底层的内容;能够使用java进行开发。了解java可以让你完全控制hadoop/hbase环境。

是的,您应该使用流获得数据本地代码执行。你不是把数据推到程序所在的位置,而是把程序推到数据所在的位置。流只是获取本地输入数据,并通过stdin将其运行到python程序中。它不是在java任务中运行每个map,而是启动python程序的一个实例,并通过该实例泵送输入。

如果你真的想做快速处理,你真的应该学习java。必须通过stdin和stout将所有内容都管道化,这会带来很大的开销。

相关内容

最新更新