写点什么

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:154034
用户头像

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

关注

评论

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

"无密码时代"已经来临!

龙归科技

身份认证

经典排序算法分析

roseduan

算法 排序算法

DCache 分布式存储系统|Set, ZSet 缓存模块的创建与使用

TARS基金会

nosql 缓存 分布式 MySQL 高可用 TARS

全球案例 | Infobip :这家估值十亿美元的公司像初创企业一样规模化发展,像大型企业一样标准化

Atlassian

DevOps Agile Atlassian Jira ITSM

直击面试!阿里技术官手码12W字面试小册在Github上爆火

Java架构之路

Java 程序员 架构 面试 编程语言

声网Agora发布创业支持计划:聚合50+合作伙伴、11项资源扶持创业者

ToB行业头条

声网 Agora

以数字人民币为契机 推动人民币国际化进程

CECBC

金融

图解垃圾算法,No,捡垃圾算法

叫练

GC算法 引用计数法 标记清除法

科技进化的终点,与荣耀全场景的起点

脑极体

打卡学习VBA和PYTHON week01

小怪兽

IT蜗壳教学

炸裂,IBM系统架构师居然把自己15年Java经验整合成一本小说?

Java架构师迁哥

如何评估需求优先级?

石云升

项目管理 28天写作 职场经验 管理经验 3月日更

寻找被遗忘的勇气(十八)

Changing Lin

3月日更

php 再上热搜!swoole 创始人投出反对票,质疑 php 协程最新提案

薇薇

php 编程 新特性 php扩展

聊聊 Python 自动化脚本部署服务器全流程(详细)

星安果

Python 自动化 服务器 部署

霸榜Git!2021年阿里巴巴Java面试权威指南(泰山版)

Java架构之路

Java 程序员 架构 面试 编程语言

epoll源码分析以及在Redis中的实现

Linux服务器开发

redis 后端 epoll web服务器 Linux服务器开发

filecoin挖矿软件开发|filecoin挖矿APP系统开发

系统开发

低代码/无代码,作为IT开发界的“新英雄”它究竟有何神技?

优秀

低代码 无代码开发

霸榜Git!2021年阿里巴巴Java面试权威指南(全彩版)

Java 程序员 面试 架构师

全凭阿里大牛总结的Java面试笔记,首战成功拿蚂蚁offer

Java架构之路

Java 程序员 架构 面试 编程语言

朱嘉明:比特币开创人类新型财富实验

CECBC

数字货币

uni-app跨端开发H5、小程序、IOS、Android(二):开发工具HBuilderX使用技巧

黑马腾云

微信小程序 uni-app App 3月日更 Hbuilderx

收藏!这些IDE使用技巧,你都知道吗

xcbeyond

IDEA 技巧 3月日更

2021年新兴的十大区块链技术趋势

CECBC

数字技术

一周信创舆情观察(3.8~3.14)

统小信uos

发布两小时,霸榜GitHub!Spring Boot实战文档

Java 编程 程序员 架构师

趋势预测:2021年五大流行的编程语言

薇薇

Java c php JavaScript Python PEP

filecoin云算力软件开发|filecoin云算力APP系统开发

系统开发

filecoin矿机系统开发|filecoin矿机软件APP开发

系统开发

JDBC—往MySQL中写入Blob数据时,出现错误:com.mysql.jdbc.PacketTooBigException: Packet for query is too large (5724349 > 1048576)

打工人!

Java MySQL JDBC Blob

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