1. hadoop 設置分布式緩存 可以多次讀取嗎
Hadoop 分布式緩存實現目的是在所有的MapRece調用一個統一的配置文件,首先將緩存文件放置在HDFS中,然後程序在執行的過程中會可以通過設定將文件下載到本地具體設定如下:
public static void main(String[] arge) throws IOException, ClassNotFoundException, InterruptedException{
Configuration conf=new Configuration();
conf.set("fs.default.name", "hdfs://192.168.1.45:9000");
FileSystem fs=FileSystem.get(conf);
fs.delete(new Path("CASICJNJP/gongda/Test_gd20140104"));
conf.set("mapred.job.tracker", "192.168.1.45:9001");
conf.set("mapred.jar", "/home/hadoop/workspace/jar/OBDDataSelectWithImeiTxt.jar");
Job job=new Job(conf,"myTaxiAnalyze");
2. spark 自定義分區後大於128m會在一個partition嗎
hdfs中的block是分布式存儲的最小單元,類似於盛放文件的盒子,一個文件可能要佔多個盒子,但一個盒子里的內容只可能來自同一份文件。假設block設置為128M,文件是250M,那麼這份文件佔3個block(128+128+2)。這樣的設計雖然會有一部分磁碟空間的浪費,但是整齊的block大小,便於快速找到、讀取對應的內容。(p.s. 考慮到hdfs冗餘設計,默認三份拷貝,實際上3*3=9個block的物理空間。)
spark中的partion是彈性分布式數據集RDD的最小單元,RDD是由分布在各個節點上的partion組成的。partion是指的spark在計算過程中,生成的數據在計算空間內最小單元,同一份數據(RDD)的partion大小不一,數量不定,是根據application里的運算元和最初讀入的數據分塊數量決定的,這也是為什麼叫「彈性分布式」數據集的原因之一。
總結:
block位於存儲空間、partion位於計算空間,
block的大小是固定的、partion大小是不固定的,
block是有冗餘的、不會輕易丟失,partion(RDD)沒有冗餘設計、丟失之後重新計算得到
另外補充幾點:
partition也可以有冗餘,通過storagelevel來配置;
local或者yarn模式和partition,block概念上沒有半毛錢關系,local模式也能操作hdfs,yarn模式也能操作本地文件;
存儲上為什麼要將空間抽象成塊前面的兄台已經敘述了,而且之所以設計成這么大的理由還牽扯到大存儲空間中的各種管理、容錯等等。那麼與之對應的,在並行計算里我們希望降低網路帶寬的負荷,所以會對計算做一層計算本地性優化,那麼怎樣做到這點呢?最簡單的邏輯,把計算代碼發到數據所在的節點上執行就可以了。那麼這樣一來,怎樣做到並行優化?很簡單啦,把一個超大的文件切切切分成一個一個不大不小的塊(比如hdfs默認的64M,或者配得再大一點),然後把這些塊打散在集群的不同節點上,最後把應用代碼跟著數據塊走,就能在不同節點上並行計算了。與之相對應的,spark為了利用起內存,對一些中間數據盡可能的用內存訪問速度進行讀寫,所以把這部分管理工作納入到自己這里(對比一下,經典的hadoop maprece就直接交給hdfs進行管理),可是就算存到內存里,那也得沿著這個思路來啊,不然計算本地化,並行之類的就很混亂了,那好吧,我也引入個概念,就叫partition好了,目的和前面一樣。然後突然發現,哎呀我靠,這不得了,不僅能做到這些,既然我把一個超大份的數據都分成一塊一塊的了,那每一塊是不是就能獨立分隔開來了?那一個超大份文件,內存完全放不下,完全可以把其中一些塊放到內存里,另外一些暫時放到硬碟里嘛,好歹也比純放到hdfs來得快嘛……於是生活就變得美好了起來。但是要注意的是,計算本地性優化並不是說絕對地把任務只發到數據所在地進行執行,還要考慮到均衡和並發能力的取捨。
3. 什麼是分布式緩存
分布式緩存能夠處理大量的動態數據,因此比較適合應用在Web 2.0時代中的社交網站等需要由用戶生成內容的場景。從本地緩存擴展到分布式緩存後,關注重點從CPU、內存、緩存之間的數據傳輸速度差異也擴展到了業務系統、資料庫、分布式緩存之間的數據傳輸速度差異。
常用的分布式緩存包括Redis和Memcached。
Memcached
Memcached是一個高性能的分布式內存對象緩存系統,用於動態Web應用以減輕資料庫負載。Memcached通過在內存中緩存數據和對象來減少讀取資料庫的次數,從而提高動態、資料庫驅動網站的速度。
特點:哈希方式存儲;全內存操作;簡單文本協議進行數據通信;只操作字元型數據;集群由應用進行控制,採用一致性哈希演算法。
限制性:數據保存在內存當中的,一旦機器重啟,數據會全部丟失;只能操作字元型數據,數據類型貧乏;以root許可權運行,而且Memcached本身沒有任何許可權管理和認證功能,安全性不足;能存儲的數據長度有限,最大鍵長250個字元,儲存數據不能超過1M。
Redis
Redis是一個開源的使用ANSI C語言編寫、支持網路、可基於內存亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。
特點:
Redis支持的數據類型包括:字元串、string、hash、set、sortedset、list;Redis實現持久化的方式:定期將內存快照寫入磁碟;寫日誌;Redis支持主從同步。
限制性:單核運行,在存儲大數據的時候性能會有降低;不是全內存操作;主從復制是全量復制,對實際的系統運營造成了一定負擔。
4. hadoop yarn源碼怎麼進行修改
第一個階段:學習hadoop基本使用和基本原理,從應用角度對hadoop進行了解和學習
這是第一個階段,你開始嘗試使用hadoop,從應用層面,對hadoop有一定了解,比如你可以使用hadoop shell對hdfs進行操作,使用hdfs API編寫一些程序上傳,下載文件;使用MapRece API編寫一個數據處理程序。一旦你對hadoop的基本使用方法比較熟悉了,接下來可以嘗試了解它的內部原理,注意,不需要通過閱讀源代碼了解內部原理,只需看一些博客,書籍,比如《Hadoop權威指南》,對於HDFS而言,你應該知道它的基本架構以及各個模塊的功能;對於MapRece而言,你應該知道其具體的工作流程,知道partition,shuffle,sort等工作原理,可以自己在紙上完整個畫完maprece的流程,越詳細越好。
在這個階段,建議你多看一些知名博客,多讀讀《hadoop權威指南》(可選擇性看相關的幾章)。如果你有實際項目驅動,那是再好不過了,理論聯系實際是最好的hadoop學習方法;如果你沒有項目驅動,那建議你不要自己一個人悶頭學,多跟別人交流,多主動給別人講講,最好的學習方式還是「講給別人聽」。
============
第二個階段:從無到入門,開始閱讀hadoop源代碼
這個階段是最困苦和漫長的,尤其對於那些沒有任何分布式經驗的人。 很多人這個階段沒有走完,就放棄了,最後停留在hadoop應用層面。
這個階段,第一件要做的事情是,選擇一個hadoop組件。如果你對分布式存儲感興趣,那麼你可以選擇HDFS,如果你讀分布式計算感興趣,你可以選擇MapRece,如果你對資源管理系統感興趣,你可以選擇YARN。
選擇好系統後,接下來的經歷是最困苦的。當你把hadoop源代碼導入eclipse或intellij idea,沏上一杯茶,開始准備優哉游哉地看hadoop源代碼時,你懵逼了:你展開那數不盡的package和class,覺得無從下手,好不容易找到了入口點,然後你屁顛屁顛地通過eclipse的查找引用功能,順著類的調用關系一層層找下去,最後迷失在了代碼的海洋中,如同你在不盡的壓棧,最後棧溢出了,你忘記在最初的位置。很多人經歷過上面的過程,最後沒有順利逃出來,而放棄。
如果你正在經歷這個過程,我的經驗如下:首先,你要摸清hadoop的代碼模塊,知道client,master,slave各自對應的模塊(hadoop中核心系統都是master/slave架構,非常類似),並在閱讀源代碼過程中,時刻謹記你當前閱讀的代碼屬於哪一個模塊,會在哪個組件中執行;之後你需要摸清各個組件的交互協議,也就是分布式中的RPC,這是hadoop自己實現的,你需要對hadoop RPC的使用方式有所了解,然後看各模塊間的RPC protocol,到此,你把握了系統的骨架,這是接下來閱讀源代碼的基礎;接著,你要選擇一個模塊開始閱讀,我一般會選擇Client,這個模塊相對簡單些,會給自己增加信心,為了在閱讀代碼過程中,不至於迷失自己,建議在紙上畫出類的調用關系,邊看邊畫,我記得我閱讀hadoop源代碼時,花了一疊紙。注意,看源代碼過程中,很容易煩躁不安,建議經常起來走走,不要把自己逼得太緊。
在這個階段,建議大家多看一些源代碼分析博客和書籍,比如《Hadoop技術內幕》系列叢書(軒相關網站:Hadoop技術內幕)就是最好的參考資料。藉助這些博客和書籍,你可以在前人的幫助下,更快地學習hadoop源代碼,節省大量時間,注意,目前博客和書籍很多,建議大家廣泛收集資料,找出最適合自己的參考資料。
這個階段最終達到的目的,是對hadoop源代碼整體架構和局部的很多細節,有了一定的了解。比如你知道MapRece Scheler是怎樣實現的,MapRece shuffle過程中,map端做了哪些事情,rece端做了哪些事情,是如何實現的,等等。這個階段完成後,當你遇到問題或者困惑點時,可以迅速地在Hadoop源代碼中定位相關的類和具體的函數,通過閱讀源代碼解決問題,這時候,hadoop源代碼變成了你解決問題的參考書。
============
第三個階段:根據需求,修改源代碼。
這個階段,是驗證你閱讀源代碼成效的時候。你根據leader給你的需求,修改相關代碼完成功能模塊的開發。在修改源代碼過程中,你發現之前閱讀源代碼仍過於粗糙,這時候你再進一步深入閱讀相關代碼,彌補第二個階段中薄弱的部分。當然,很多人不需要經歷第三個階段,僅僅第二階段就夠了:一來能夠通過閱讀代碼解決自己長久以來的技術困惑,滿足自己的好奇心,二來從根源上解決解決自己遇到的各種問題。 這個階段,沒有太多的參考書籍或者博客,多跟周圍的同事交流,通過代碼review和測試,證明自己的正確性。
============
閱讀hadoop源代碼的目的不一定非是工作的需要,你可以把他看成一種修養,通過閱讀hadoop源代碼,加深自己對分布式系統的理解,培養自己踏實做事的心態。
5. 分布式系統中本地緩存用在什麼地方
雲存儲本身目用戶消除存儲伺服器概念給用戶提供限存儲池要覺自能存儲池像操作自本存儲伺服器比般用戶使用自水用關自水水廠七層濾並沉澱存放
雲存儲背量存儲伺服器計算伺服器用戶提供存儲計算服務通布式存儲系統統起通虛擬化技術(實際提供統介面屏蔽復雜端)用戶提供類似於面所談存儲池
談訪問虛擬伺服器存儲看虛擬存儲器看存儲池比網路雲、金山雲使用計算功能才看雲計算廠商虛擬伺服器能些伺服器背使用存儲池
6. 配置完全分布式hadoop,yarn,為什麼slave上當時能啟動nodemanager,一會後就沒有了
在slave上啟動yarn
7. YARN與Hadoop+MapRece1.0的主要區別
摘要 Hadoop
8. spark 在yarn中會使用maprece.map.memory.mb嗎
spark是一種分布式計算框架,和maprece並列,可以運行於yarn上。yarn是hadoop2.0的一種資源管理框架。對,就是這么亂
9. hadoop的yarn和zookeeper是什麼關系
yarn 是為了提高資源利用率,也就是多類程序的資源分配。
而zookeeper是分布式程序的協調服務,可以說是某一類程序。
zookeeper是相對多台機器同一分布式程序來說的,yarn可以針對一台伺服器多個程序資源進行協調