使用各种语言在 Hadoop 中运行作业的优缺点是什么?

2023-12-29

到目前为止,我一直使用 Pig 或 Java 进行 MapReduce,专门针对 Hadoop 集群运行作业。我最近尝试通过 Hadoop 流使用 Python Map Reduce,这也很酷。所有这些对我来说都有意义,但我对何时想要使用一种实现与另一种实现有点模糊。其他。 Java map reduce,我基本上只在需要速度时使用,但是什么时候我会想要使用 Python 流之类的东西,而不是在 PIG/Hive 中用更少、更容易理解的行写出相同的东西?简而言之,各自的优点和缺点是什么?


我将分别涉及 Java 与 Python,然后分别涉及 MR 与 Hive / Pig - 因为我将其视为两个不同的问题
Hadoop 是围绕 Java 构建的,其许多功能可通过 Java API 获得,并且 Hadoop 大部分可以使用 Java 类进行扩展。

Hadoop 确实有能力处理用其他语言创建的 MR 作业 - 这称为流式处理。这个模型只允许我们定义mapper和reducer,但有一些java中不存在的限制。同时 - 输入/输出格式和其他插件必须编写为 java 类
所以我将决策定义如下: a) 使用 Java,除非您有重要的代码库,需要在 MR 工作中继续。 b) 当您需要创建一些简单的临时作业时,请考虑使用 python。

关于 Pig / Hive - 它也是更高级别的以 java 为中心的系统。 Hive 无需任何编程即可使用,但可以使用 java 进行扩展。 Pig从一开始就需要java。我认为,在可以应用的情况下,该系统几乎总是比 MR 工作更可取。通常这些是处理类似于 SQL 的情况。

流式传输与本机 Java 之间的性能注意事项。
流式传输通过其输入流将输入提供给映射器。在 java 的情况下,进程间通信本质上比记录读取器和映射器之间的进程内数据传递效率低。
从上面我可以得出以下结论: a) 如果进行一些轻处理(例如查找子字符串、计数...),此开销可能会很大,并且 java 解决方案将更加高效。
b) 在一些繁重的处理的情况下,可以更有效地用一些非java语言实现——基于流的解决方案可以有一些优势。

Pig/Hive 性能考虑因素。
Pig / Hive 都实现了 SQL 处理的原语。换句话说,它们在 RDBMS 世界中实现执行计划的元素。这些实现都很好并且经过精心调整。同时 Hive(我更了解的东西)是解释器。它不进行代码生成 - 它在预构建的 MR 作业中解释执行计划。这意味着,如果您有一些复杂的条件并且会专门为它们编写代码 - 它有机会比 Hive 做得更好 - 代表编译器与解释器的性能优势。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用各种语言在 Hadoop 中运行作业的优缺点是什么? 的相关文章

随机推荐

  • “gcc -x c”和“gcc -x c++”汇编输出之间的差异

    我在文件 main c 中有以下代码 int main int i for i 0 i lt 5 i return 0 当我编译这个时gcc x c m32 S O0 o main s main c 在 Fedora 16 64 位下 我得
  • 如何将数据从 gRPC 拦截器传递到服务方法调用?

    我需要传递一些数据ServerAuthIntereptor打电话 服务器验证拦截器 used in context parameters map private static final String AUTH CONTEXT authCo
  • 如何在 Eclipse 中比较两个文件?

    我想比较两个文件 一个在当前项目中 另一个在备份目录中 我知道如何比较它们是否在同一个项目中 如何在 Eclipse 中进行比较 Eclipse 中的 Flex 导航器是什么 打开导航器并显示主菜单 窗口 gt 显示视图 gt 导航器 您可
  • PhpStorm MySQL Connector/J 更新到 5.1.40 后停止工作

    在 PhpStorm 建议更新 MySQL 驱动程序后 我与 MySQL 数据库的现有连接和工作连接已停止工作 我看到这个问题在我的 Ubuntu 和另一台 Mac 上重现 我收到的错误是 08S01 通信链路故障 我使用 SSH 隧道来访
  • Twitter API 问题:使用 GET 的 OAuth 请求令牌有效,POST 失败

    我正在使用 Twitter API 进行 OAuth 我已经使用 GET 使请求令牌操作正常工作 没有任何问题 但是 当我使用 POST 执行完全相同的操作时 它会给出错误 无法验证 oauth 签名 以下是我正在使用的各种卷曲选项 cur
  • 为什么在文件未完成加载时调度 URLStream 完成事件?

    我正在编写一个 AIR kiosk 应用程序 每天晚上都会连接到 WordPress 服务器 获取包含所有内容路径的 JSON 文件 然后下载该内容并将其保存到 kiosk 硬盘驱动器 有数百个文件 jpg png f4v xml 其中大多
  • 头文件中定义的函数的重复符号

    假设我有一个头文件file ops hpp看起来像这样 pragma once bool systemIsLittleEndian uint16 t x 0x0011 uint8 t half x uint8 t x if half x 0
  • 如何在序列图中表示循环中进行的调用?

    我正在创建一个序列图 其中一个类正在被另一个类观察 被观察的类在观察者中每 5 秒循环调用一次更新 我需要在序列图中显示这一点 有没有办法让它无限期地不按顺序循环 或者它在序列图的上下文中没有意义吗 我不应该包括它吗 或者我应该将其包含在不
  • 针对另一个域远程使用 Get-DnsServerResourceRecord

    我正在尝试运行以下命令 secpasswd Test secpasswd ConvertTo SecureString secpasswd AsPlainText Force mycreds New Object System Manage
  • Pygame显示模块初始化和退出

    有一个pygame display窗户打开 我打电话pygame display quit 为了摧毁窗户 因为我需要再次打开窗口 所以我调用pygame display init and pygame display set mode 但是
  • 如何从报表设计器调用 Acumatica 函数?

    我有一个用 Acumatica 编写的通用函数 我们在各种 Acumatica 屏幕上使用它 我们希望在报表设计器中使用此函数 以便我们可以打印该值 示例 CheckBday 如果我们传递客户代码 它应该检查此客户生日字段 如果是今天 则返
  • 非升压asio检查错误c ++

    有没有办法使用 tcp 检查非 boost asio 程序中的错误 有没有办法随机向连接添加错误 我用 C 创建了一个简单的 Echo 服务器 现在我必须为其生成随机错误 但问题是我不知道如何生成 或者 如果这有更多帮助 我需要检查二维奇偶
  • Chrome 自动播放政策中的自动播放背景视频

    因此 在最新的 chrome 中 显然自动播放策略已更改 因此这反过来又破坏了每个具有应自动播放视频背景的网站 我想知道是否有人有任何聪明的解决办法可以 解决 这个问题 我相信按钮或 进入页面 解决方案将是一种糟糕的解决方法 特别是对于背景
  • 如何获取函数内部创建的变量?

    我正在 node js 中执行 javascript 文件 并且需要访问在该文件中创建的所有变量 由于这些 javascript 文件可以根据开发人员上下文保存任何内容 因此我需要以编程方式访问变量 我的问题是 如何获取函数内创建的变量 像
  • 创建登录屏幕

    制作密码 登录屏幕的最佳方法是什么 我在某处读到最好使用弹出控件 如果是这样 我到底需要在 App xaml 中的哪里创建它 在为 Windows Phone 7 应用程序实现登录屏幕时 您需要考虑许多事项 这是一个示例 http baba
  • 通过 HTTP 访问 FTP?

    我们有一个外部安全 FTP 服务器 我们希望通过 HTTPS 访问该服务器 我们的基础设施不支持 FTP 我知道这是可能的 但我不知道怎么做 我正在寻找这样的东西 ftp ftp mozilla org pub mozilla org zz
  • 如何在浏览器控制台中查看 CORS 飞行前 OPTIONS 请求?

    我正在寻找一种在发出 CORS 请求时查看 CORS 飞行前选项请求的方法 我想查看服务器的响应标头以帮助我调试遇到的 CORS 问题 但我无法在 Chrome 或 Firefox 的 网络 选项卡或控制台中找到执行此操作的方法 我还安装了
  • Azure AD:如何获取令牌中的组信息?

    我们在 MEAN 堆栈中开发了应用程序 我们正在使用阿达尔角 https github com AzureAD azure activedirectory library for js用于天蓝色广告身份验证的库 根据文档和样本 https
  • MarginLayoutParams.setMargins() 不起作用?

    事情是这样的 我想以编程方式添加一些图像 图像应该有一个topMargin of 5dip除了第一张图片之外 LinearLayout with a vertical orientation方式 代码段下方 LinearLayout bod
  • 使用各种语言在 Hadoop 中运行作业的优缺点是什么?

    到目前为止 我一直使用 Pig 或 Java 进行 MapReduce 专门针对 Hadoop 集群运行作业 我最近尝试通过 Hadoop 流使用 Python Map Reduce 这也很酷 所有这些对我来说都有意义 但我对何时想要使用一