AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

Hadoop,开发者纠结的十件事

  • 2014-10-27
  • 本文字数:1967 字

    阅读完需:约 6 分钟

开源数据处理平台 Hadoop 在大数据时代的今天有着非常广泛的应用。著名的大象图标遍布各行各业,从医疗记录到银行交易,从车票预定到房屋租赁,乃至很多科学数据处理,都可以见到 Hadoop 的身影。

在 Hadoop 生态繁荣的背后,是开发者们夜以继日的开发与支持。而在用户得益甚至赞赏这些应用的时候,开发者们却不得不面对 Hadoop 平台中一些可用性较差的地方。本文列举了网络上一些关于 Hadoop 的缺点,供大家探讨,部分观点来自 InfoWorld 及开发者博客。

1、 平台尚未成熟

虽然用途广泛,但不得不承认的是,Hadoop 目前仍在开发阶段。很多数据结构都不全,比如 Hadoop 一直不支持原生 datatime 数据类型,最近才在时间序列数据开发者的强烈建议下下引入此数据类型。其次,技术支持并不到位,无论是 Google 还是 Stack Overflow 上寻找的答案,都不足以解决开发者遇到的问题。

2、 数据模式模糊不清

Hadoop 目前对模式(Schema)的描述并不清晰,很多开发者在撰写 Pig 脚本的过程中,会花费超过 50% 的时间在调试对 Schema 的支持上。

3、 Pig 和 Hive 无法互通

Hive 和 Pig 用起来完全是两个东西。熟悉 SQL 的开发者可以在 Hive 中使用类似的脚本,但是在 Pig 中却不得不重新学习其语法。在 Pig 中无法使用 Hive 的 UDFS,也无法使用 HCatalog 访问 Pig 的 Hive 表。反过来,无法在 Hive 中使用 Pig 的 UDFS。这让开发者在两者切换使用的过程中颇为纠结,需要耗费精力重新撰写脚本来完成已有的工作。

4、 HDFS 存储共享函数库

鉴于 Hadoop 的复用机制,一旦开发者将 Pig 脚本保存于 HDFS,那么 Hadoop 将自动认为所有的 JAR 包的存储方式都应如此。通常情况下,这样的做法并无问题,但是有时候,当一个项目需要维护大量共享库的时候,这就变得非常复杂。而且,大部分时间 JAR 包通常都在安装客户端的时候一并安装过,Hadoop 这种存储方式使得 JAR 包多次存储。据悉,脚本存储的问题 Pig 新版本已修正,但是共享函数库存储的问题却仍然存在。

5、 报错信息不完整

这几乎是 Hadoop 系列工具的通病,经常在出了问题的时候,返回一个“运行失败,无更多错误信息”这样的报错提示,使得开发者无法进行更进一步的错误调试。还有,Hadoop 经常会抛出一些无法找到指针的异常(NPE),而这些问题则是由文件解析之类的操作造成,并不能属于 NPE 范畴。另外,由于采用 UDFS,导致很多报错最终以 udf 执行错误的样子呈现给开发者,而它们可能仅仅是语法错误或者类型错误。

6、 不兼容的安全机制

开发者经常会听到这样的说法:“已经有足够多的案例证明,想要保证 Hadoop 的安全性,建议使用 Kerberos,LDAP 直白易用。”但是现状就是,Hadoop 平台并未对此有友好的集成:没有 SAML、没有 OAuth,也没有很好的安全验证机制(开发者只能时不时的无奈面对再一次出现的登录窗口)。更有意思的是,Hadoop 平台中很多组件都自己支持 LDAP,且彼此不考虑兼容性。

7、 难以开发的 LDAP 连接器

对开发者来讲,用 Java 成功完成一个能用的 LDAP 连接器,至少需要修改上百次代码。而反过来看看完成的代码,连接器的功能还不完善。实际上,开发者们能感觉出 Knox 有点像一时冲动的产物。毕竟用 Apache 配置 mod_rewrite 模块就能完成的事情,非要用 Java 再写一遍,的确是让开发者头痛的事情。

8、 难以扩展的 Hive 表管理

如果开发者使用 Hive 进行表管理的话,在 Hive 执行了 drop 表命令后,会自动将表删除。但是如果这个表是外部的话,则不会自动删除。为什么 Hive 不能将这两个表同样对待呢?此外,既然 Hive 现在有向 RDBMS 发展的趋势,为什么不增加 Update 和 Delete?

9、 不兼容的 Namenode

Hadoop 的很多组件,如 Oozie、Knox 等,都不遵循新的 Namenode HA。开发者可以做一个 HA Hadoop,前提是他完全不想使用其他组件。

10、 出错的文档

Hadoop 的文档存在很多问题,开发者经常会发现文档的示例代码中有问题,有一些文档本身都没有遵循 Hadoop 的模式设计。鉴于这些文档在互联网上流传广泛,应该有相当一批人学习并尝试,因此都会遇到并纠结于这些错误。实际上,有些错误是完全可以避免的,只要文档的撰写人在完成文档的同时,自己动手运行一下示例代码。比如 Oozie 文档中充斥着大量过去版本的样例代码,开发者遇到错误的时候,很可能不是自己程序写错了,而是由于 Oozie 版本更替而导致之前教程中的函数不兼容造成,比如协议问题、模式有效性问题等等。有人形容 Oozie,称其类似 Ant 和 Maven,只是没有任何调试手段,而且代码非常善变。

此外,在 Hadoop 平台的适用范围方面,它对实时数据访问支持并不好,也无法高效存储大量小文件,而且目前尚不支持多用户。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-10-27 08:153982
用户头像

发布了 268 篇内容, 共 131.7 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

使用Cloud Studio&Flutter完成全平台博客网站的搭建

坚果

flutter Cloud Studio

Java break语句详解!

java易二三

Java 编程 计算机 break 循环

【腾讯云 Cloud Studio 实战训练营】沉浸式体验编写一个博客系统

全栈若城

项目实战 Cloud Studio

新功能 – Cloud WAN:托管 WAN 服务

亚马逊云科技 (Amazon Web Services)

Amazon VPC

前端服务化和小程序容器技术的应用

没有用户名丶

saas平台定义以及优点、特点简单介绍

行云管家

SaaS 平台

快速玩转 Llama2!阿里云机器学习 PAI 推出最佳实践(三)——快速部署 WebUI

阿里云大数据AI技术

人工智能

助力企业出海!TDengine Cloud 正式入驻 AWS Marketplace

爱倒腾的程序员

时序数据库

面试还不懂Redis与MySQL数据一致性,看这篇就够了

程序员小毕

Java 数据库 程序员 面试 架构师

线程池中多余的线程是如何回收的?

java易二三

Java 编程 程序员 面试 计算机

719作业

天天向上

从零构建医疗领域知识图谱的KBQA问答系统

汀丶人工智能

人工智能 知识图谱 智能问答

AIRIOT可视化组态引擎如何应用于物联业务场景中

AIRIOT

看头部银行保险企业如何释放数智生产力|数智新金融论坛精彩回顾

Kyligence

数智化 Kyligence Copilot

用友推出基于 BIP3 的新一代 HOP 产品

用友BIP

医疗

Sanic 是什么:扩展性和性能并存的Web框架

Apifox

Python 程序员 后端 异步编程 sanci

基于新浪微博海量用户行为数据、博文数据数据分析:包括综合指数、移动指数、PC指数三个指数

汀丶人工智能

数据挖掘 机器学习 数据分析

Java 命令行参数解析方式探索(三):Picocli

冰心的小屋

Java 命令行 console Parameter Picocli

直播平台源码开发提高直播质量的关键:视频编码和解码技术

山东布谷科技

软件开发 直播 视频编解码 源码搭建 直播平台源码

桂林等级保护测评机构有几家?有哪些?哪里可以查到?

行云管家

等级保护 等保测评 桂林 桂林广西

Java零基础适合看的5本书!

java易二三

Java 编程 教学 新手入门

零代码,使用 Dify 两分钟接入企业微信 AI 机器人

Dify

开源 AI LLMOps

Java 后端有哪些不用学的技术?劝退。。。

java易二三

Java 编程 计算机 jsp

Docker学习路线13:部署容器

小万哥

Java c++ Python Go Docker

向量数据库这杯“啤酒”与“泡沫”

脑极体

AI 向量数据库

火山引擎DataLeap的Data Catalog系统公有云实践 (下)

字节跳动数据平台

数据库 数据中台 数据治理 数据安全 企业号 7 月 PK 榜

C++实现哈希桶

芯动大师

Hadoop,开发者纠结的十件事_语言 & 开发_张天雷_InfoQ精选文章