相反,我認為Hadoop很棒。 但是,它并不能證明Hadoop出現了一些公然的失敗,可能是架構,概念上或文檔上的明智選擇。 Hadoop的普及不應使它免受Hadoop實施中的重新設計和返工問題的需要。 以下幾點是基于幾個月來圍繞Hadoop進行探索和黑客攻擊的。 挖吧。
- 我聽到有人說“數據本地性”嗎?
Hadoop一次又一次地在數據局部性方面。 在Hadoop擠奶者舉辦的一些講習班中,他們只是繼續進行下去。 他們說,Hadoop將盡可能嘗試通過HDFS在該節點本地存儲的數據塊上啟動任務。 這聽起來像是一項超級功能,不是嗎? 它節省了大量帶寬,而無需傳輸TB的數據,對嗎? 地獄,不。 它不是。 這意味著首先必須找到一種將數據導入HDFS(Hadoop分布式文件系統)的方法。 除非您生活在過去的十年中,并且所有數據都以文件形式存在,否則這并非易事。 假設您這樣做了,讓我們將數據的TB轉移到HDFS。 現在,它將開始完成整個“數據局部性”工作。 嗯,好。 我是否被一波光輝打動了,還是應該做什么? 讓我們弄清事實。 要使用Hadoop,我們的問題應該能夠并行執行。 如果問題或至少一個子問題無法并行化,它將不會從Hadoop中獲得太多收益。 這意味著任務算法獨立于它處理的數據的任何特定部分。 這將進一步簡化,也就是說,任何任務都可以處理數據的任何部分。 那么,這是否意味著顯而易見的事情就是“數據局部性”? 為什么,Hadoop開發人員甚至會編寫一些代碼,使某任務在另一個節點上處理數據,除非出現嚴重錯誤。 該功能將是如果這樣做否則! 如果任務已完成對節點本地數據的操作,然后又從另一個節點傳輸數據并處理該數據,那將是難題的一個重要特征。 至少那是值得的。
- 你能把所有東西都放回文件中嗎
您在數據庫中是否有結構良好的數據? 也許,您變得有點幻想,并使用了最新最好的NoSQL數據存儲? 現在讓我寫下您的想法。 “好吧,讓我們來運行一些Hadoop作業,因為我想在我的數據中找到所有這些隱藏的金礦,這將使我成為《福布斯》的頭版。” 我聽到你了 讓我們滾動一些Hadoop作業。 可是等等! 什么…..? 為什么所有樣本都在文本文件中。 使用CSV文件,制表符分隔文件,空格分隔文件以及所有其他類型的整潔文件的大量示例。 為什么每個人都回溯幾十年并再次使用文件? 所有這些家伙都沒有聽說過DB和所有這些花哨的東西。 看來您采用數據存儲還為時過早。 文件是Hadoop世界的英雄。 如果您想快速,輕松地使用Hadoop,那么正確的最佳選擇是將數據整齊地導出到文件中,并運行所有那些令人眼花word亂的字數示例(Pun打算這樣做!)。 因為沒有文件,Hadoop無法完成所有很酷的“數據局部性”。 一切都必須首先放在HDFS中。 那么,您將如何分析假設的FUHadoopDB中的數據? 首先,實現大約10多個必要的類,以將數據拆分并傳輸到Hadoop節點并運行您的任務。 Hadoop需要知道如何從FUHadoopDB中獲取數據,因此我們假設這是可以接受的。 現在,如果不將其存儲在HDFS中,則不會丟失數據本地性。 在這種情況下,任務運行時,他們自己將不得不從FUHadoopDB中提取數據來處理數據。 但是,如果您想使數據位置變得混亂,則需要從FUHadoopDB中提取數據并將其存儲在HDFS中。 您不會招致任務運行時提取數據的損失,但是會在作業準備階段以將數據傳輸到HDFS的形式支付。 哦,我是否提到了在HDFS中存儲相同數據所需的額外磁盤空間。 我想節省磁盤空間,所以我選擇讓我的任務在運行任務時提取數據。 這是你的選擇。
- Java是與操作系統無關的,不是嗎?
Java有其缺陷,但是在大多數情況下,它可以在大多數操作系統上順利運行。 即使存在某些操作系統問題,也可以輕松解決。 Hadoop的人們大多基于Linux環境發布了文檔。 他們說Windows受支持,但是由于沒有提供足夠的文檔而忽略了那些無知的人。 Windows甚至沒有使它進入推薦的生產環境。 它可以用作開發平臺,但是隨后您必須將其部署在Linux上。 我當然不是Windows迷。 但是,如果我編寫Java程序,我會費心地使其在Windows上運行。 如果沒有,為什么還要使用Java? 為什么要搞出怪異的字節碼呢? 哦,所有想出字節碼和JVM并沒有浪費的好人的不眠之夜。
- CS 201:面向對象的編程
如果您嘗試將Hadoop集成到平臺中,請再考慮一下。 讓我自由輸入您的想法。 “讓我們擴展一些接口并插入我的身份驗證機制。 它應該很容易。 我的意思是這些家伙設計了世界上最偉大的軟件,可以消除世界的饑餓。” 我又聽到你了 如果您打算這樣做,請不要這樣做。 就像那里的OOP反圖案101。 如此多的地方會說“ if(kerberos)”并執行一些特定于安全性的功能。 我的一位同事經歷了這一痛苦,最終決定為他的軟件編寫基于keberos的身份驗證,然后使其與Hadoop一起使用更容易。 擁有權利的同時也被賦予了重大的責任。 Hadoop無法履行此職責。
即使存在這些問題,Hadoop的流行似乎也引起了極大的關注,這是理所應當的。 它應該具有大數據分析能力。 但是我認為它太流行了,太快了。 Hadoop社區需要進一步改進這一出色的軟件。
參考: Hadoop中的問題–何時無法交付? 來自我們的JCG合作伙伴 ? Mackie Mathew在dev_religion博客上
翻譯自: https://www.javacodegeeks.com/2012/03/problems-in-hadoop-when-does-it-fail-to.html