轉帖|使用教程|編輯:龔雪|2014-10-30 09:30:07.000|閱讀 320 次
概述:在Hadoop生態繁榮的背后,是開發者們夜以繼日的開發與支持。而在用戶得益甚至贊賞這些應用的時候,開發者們卻不得不面對Hadoop平臺中一些可用性較差的地方。本文列舉了網絡上一些關于Hadoop的缺點,供大家探討,部分觀點來自InfoWorld及開發者博客。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
開源數據處理平臺Hadoop在大數據時代的今天有著非常廣泛的應用。著名的大象圖標遍布各行各業,從醫療記錄到銀行交易,從車票預定到房屋租賃,乃至很多科學數據處理,都可以見到Hadoop的身影。
在Hadoop生態繁榮的背后,是開發者們夜以繼日的開發與支持。而在用戶得益甚至贊賞這些應用的時候,開發者們卻不得不面對Hadoop平臺中一些可用性較差的地方。本文列舉了網絡上一些關于Hadoop的缺點,供大家探討,部分觀點來自及開發者博客。
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平臺的適用范圍方面,它對實時數據訪問支持并不好,也無法高效存儲大量小文件,而且目前尚不支持多用戶。
作者 張天雷
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件網