章作者Andrew C. Oliver是一位专业的软件顾问,同时还是北卡罗来纳州达勒姆大数据咨询公司Open Software Integrators的总裁和创始人。长时间的使用Hadoop,他发现了这12件事情真的影响了Hadoop的易用性。
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能做得更好!