Hadoop是一个很神奇的创造,但它发展过快而表现出一些瑕疵。我爱大象,大象也爱我。不过这世上没什么是完美的,有的时候,即使是再好的朋友间也会起冲突。就像我和Hadoop之间的存在斗争一样。下面是我列举的12个痛点。
1. Pig vs. Hive
你在 Pig 里用不了 Hive UDFS。在 Pig 中你必须用 HCatalog 来访问 Hive 表。你在 Hive 里用不了Pig UDFS。在 Hive 中无论是多么小的额外功能,我都不会感觉像写一个 Pig 脚本或者“啊,如果是在 Hive 里我可以轻易地完成”,尤其是当我写 Pig 脚本的时候,当我在写其中之一的时候,我经常想,“要是能跳过这堵墙就好了!”。
2. 被迫存储我所有共享库到 HDFS
这是 Hadoop 的复发机制。如果你保存你的 Pig 脚本到 HDFS 上,那么它会自动假设所有的 JAR 文件都会在你那里一样。这种机制在 Oozie 和别的工具上也出现了。这通常无关紧要,但有时,必须存储一个组织的共享库版本就很痛苦了。还有,大多数时候,你安装在不同客户端的相同 JAR,那么为什么要保存两次?这在 Pig 中被修复了。别的地方呢?
3. Oozie
Debug 并不好玩,所以文档里有很多老式的例子。当你遇到错误,可能并不是你做错了什么。可能是配置打印错误或者格式验证错误,统称“协议错误”。很大程度上,Oozie 就像 Ant 或 Maven,除了分布式的,不需要工具、有点易错。
4. 错误信息
你在开玩笑,对吧?说到错误信息。我最喜欢的是任何 Hadoop 工具说的,“失败,无错误返回,”可以翻译成“发生了什么,能找到是你的运气。”
5. Kerberos 身份认证协议
如果你想要想出一种相对安全的 Hadoop,你就要用到 Kerberos。记住 Kerberos 和它是多么的老旧?所以你只要 LDAP,除了它 Hadoop 中的都没有被集成:没单点登录,无 SAML,无 OAuth,无证书传递(相反地,它会重新认证)。更有趣的是,Hadoop 是生态系统的每一个部分都写它自己的LDAP 支持,所以这就是矛盾的。
6. Knox 数据保护应用程序
因为用 Java 写一个合适的 LDAP 连接器需要做至少100次才能保证正确。哎呀,看看那代码。它并不真正地有效维护好连接池。实际上,我想 Knox 就是为 Java 或者一时的热情而创造出来的。你可以通过一个写好的 Apache config,mod_proxy,mod_rewrite 做同样的事情。实际上,那是 Knox 的基础,除了在 Java 中。对于启动,在认证之后,它不传递信息给 Hive 或 WebHDFS 或你正在访问的东西,但是会启动它。
7. Hive 不会让我制作外部表格,但也不会删除它
如果你让 Hive 来管理表格,要是你终止对表格的使用的话,它会自动将它们全部删除。如果你有一个外部表格,它就不会将它删除。为什么不能有一个“也删除外部表”的功能呢?为什么我必须在外部删除?还有,当 Hive 特别是与 RDBMS 一起应用时,为什么不能有 Update 和 Delete 功能?
8. Namenode 失败
Oozie、Knox 和 Hadoop 的其它部分都不遵循新的 Namenode HA 资料。你可以在 Hadoop 中启用HA,只要你不使用与之相关的东西。
9. 文档
抱怨都是陈词滥调了,但是还是检查一下。37行错了——更糟糕的是,网络上的所有文章都错了。这证明没有人会费心在执行前检查一下。Oozie 文档更可怕,大多数例子对它给的格式校验都无法通过。
10. Ambari 覆盖范围
我曾批评过Ambari,就我所知的 Hadoop 架构来说,Ambari 能够工作真是很神奇。那么,他们可能会抱怨,Ambari 的缺点到底在哪?例如,Ambari 不能安装,或者有些情况下不能正确安装,包括多种HA 设置,Knox 等等。我确定它会变得更好,但是“手动安装之后”或者“我们已经创建了一个备份脚本”,这些不应该出现在我的邮件和文档中。
11. 知识库管理
说到Ambari,当知识正在升级的时候,你有完成过安装吗?我有过,但是它表现的并不好。实际上,有时候它找到了最快的镜像。Ambari 并不关注它下载下来的东西是否兼容。你可以用你自己的方式配置那部分,但是它在数百个 Hadoop 节点上仍然会报说你安装有误。
12. Null 指针异常
我经常在运行过程中遇到这样的转换错误,换句话说,他们不应该在Pig、Hive 等数据查询和处理工具中被表示为 Null 指针异常。对任何相似的抱怨,都会有的答复,“欢迎补丁!”或者“嘿,我正在处理。”
Hadoop 已经出来很长时间了,它一直是我最喜欢的工具之一,但是那些令人发狂的尖锐问题也使我很生气。只是希望开发者能多用心解决这些问题。不知道你有没有相似的 Hadoop bug 可以拿出来和大家分享一下,目的是督促Hadoop能做得更好!