//2023年5月2日
hadoop檔案格式:
一、hdfs
1.hdfs一次寫入,多次讀取,每次分析應涉及大部分資料-批處理才有優勢
2.hdfs缺點
低延遲訪問
大量小檔案
使用者修改
3.hdfs塊大小
預設64m,但實際工作中往往調大
最小化定址開銷
但不能太大,一般乙個map處理乙個block,保持足夠併發性
檔案可超過硬碟大小
簡化了儲存系統的設計,均衡負載
講元資料與其分開
4.namenode,datanode
namenode
管理檔案系統的命名空間
會問到檔案系統樹結構
兩個檔案的形式:命名空間映象檔案和編輯日誌檔案
記錄每個塊在哪個節點而不是具體的位置資訊
輔助namenode將定期通過編輯日誌合併命名空間映象來防止編輯日誌過大
fsimage檔案包含檔案系統中的所有目錄和檔案inode的序列化資訊。每個inode都是乙個檔案或目錄的元資料的內部描述方式。
對資料塊儲存在datanode中,但fsimage並不描述datanode。取而代之的是,namenode將這種塊對映關係放在記憶體中。
當datanode加入集群時,namenode向datanode索取塊列表以建立塊對映關係。namenode會定期徵詢datanode以確保它擁有最新的塊對映。
其是檔案系統元資料的乙個永久檢查點。並非每乙個寫操作都會更新這個檔案,因為他很大。如何傳送故障,可以把fsimage載入記憶體,再執行編輯日誌中記錄的各項操作。
5.檔案讀取剖析
cilent建乙個fs物件
fs物件向namenode取塊位址
cilent通過lnputstream從各個datanode上讀,按照與客戶端的距離
同時再向namenode檢索下一批datanode位址
設計重點:namenode不會成為效能瓶頸,無需響應資料請求
6.檔案寫入剖析
重點:乙個塊寫三份,則第二第三份是從第一datanode傳過去的
副本的布局
7.檔案快取
hdfs建乙個目錄或乙個小檔案,可能不會馬上看到
和作業系統一樣,hdfs也需要同步命令來同步記憶體緩衝區與硬碟。
8.複製、均衡、存檔
均衡使用均衡器,或distcp
小檔案處理方法:歸檔;
二、haddop io
1.壓縮與輸入分片
各種序列化方法壓縮,壓縮可以更好地傳輸
壓縮格式,bzip2支援切分,或者可以用sequence file
2.序列化,writable
序列化:程序間通訊和永久儲存
hadoop中程序間通訊是通過遠端過程呼叫rpc實現的
hadoop自己的序列化格式:writable
3.基於檔案的資料結構
對於基於mr的資料處理,將每個二進位制的大物件融入自己的檔案中並不能實現很多的可擴充套件性
一條日誌檔案是一行文字,如果想記錄二進位制型別,存文字是不合適的
sequencefile 提供了二進位制鍵值對的永久儲存的資料結構
還可以作為小檔案的容器,可以獲得更高效率的儲存和處理。將整個檔案作為一條記錄處理 206
mapfile是已經排序的seqfile,加入了搜尋鍵的索引
三、mr應用開發
1.演算法除錯與任務剖析
2.reduce輸出
每個reduce產生乙個輸出
如果輸出檔案很大,那麼把檔案分成多個reducer任務很重要,這樣才能讓多個reducer並行工作。
3.mr調優
4.mr工作機制
jobcilent獲取輸入分片資訊,為每乙個分片建立乙個map任務,建立的reduce任務數量由task屬性決定
任務的分配:通過heartbeat給tasktrace分配任務
在選擇任務之前,要選定任務所在的作業 (fair scheduler ;capacity scheduler)一般簡單維護乙個作業優先順序列表
對map和reduce任務,tasktrace有固定數量的任務槽,根據核的數量和記憶體大小決定;169
預設在處理reduce任務槽之前會填滿map槽,因此tasktrace會先選擇map任務
reduce不用考慮資料本地化,而map任務需要;jobtrack會考慮tasktrack的網路位置,選取距離其輸入分片檔案最近的tasktrack。
在理想情況下,任務是資料本地化的
5.shuffle和排序
map端產生輸出時,並不是簡單地將其寫到磁碟;而是運用乙個環形記憶體緩衝區;
一旦緩衝區到達閾值,後台執行緒就把內容寫到磁碟,寫磁碟過程中,若緩衝區滿了,會阻塞到任務完成
寫磁碟之前,執行緒會根據資料的partition,在每個分割槽中按鍵進行內部排序。如果有乙個combiner,會在排序後的輸出上執行;
map寫完後會有幾個溢位寫檔案,在任務完成前,這幾個會被合併成為乙個已經分割槽且已經排序的輸出檔案;
後面是combiner,寫磁碟時壓縮map輸出也是乙個好主意
用於檔案分割槽的執行緒可以增加
reduce的shuffle階段也是記憶體緩衝區;完成所有複製後進入排序階段,合併因子;最後一趟合併到reducer
第乙個塊副本寫到本地磁碟
6.任務執行-adv
推測執行機制、jvm重用、跳過壞記錄
7.mr型別和格式
8.reduce個數
為達到高效能,數量應該小於reducer任務槽數,這樣使得reducer在同乙個週期完成
四、mr的特性
1.writable comparable 部分排序
對於查詢操作來說部分有序已經夠了
2.mapfile查詢
3.全排序
取樣也需共享,分布式快取
5.兩級排序
輔助排序:組合鍵;設定乙個分割槽的patitioner;但在乙個分割槽之內,reducer任是通過鍵進行分割槽的分組;因此還需要進行分組設定
6.連線join
map端連線:在map函式前就執行連線操作;為達到該目的,各map輸入資料應該先分割槽並以特定方式排序。各個輸入資料集被劃分成相同數量的分割槽,並且均按相同的鍵排序。其要求輸入資料集符合特定結構,如reduce個數相同
reduce端連線:更為常用;但兩個資料集都要經過shuffle過程,效率低;基本思路是在map處標記源,並且使用連線鍵作為輸出鍵;
multipleinputs來乙個個map;先到的放在記憶體裡,後到的作為乙個流去連線;
7.序列化邊際資料--分布式快取
五、hive
1.託管表,外部表
2.分割槽、桶
分割槽與分桶:會為資料提供更高效的查詢處理
桶為表加上了額外的結構,join的時候可以利用,在map端連線;二是取樣更高效
桶中資料還可以進行排序
3.distribute by
distribute by 和sort by一起用
cluster by
4.子查詢
必須放在from後
5.檢視
Hadoop 權威指南
rpm包和deb包是兩種linux系統下最常見的安裝包格式,在安裝一些軟體或服務的時候免不了要和它們打交道。rpm包主要應用在redhat系列包括 fedora等發行版的linux系統上,deb包主要應用於debian系列包括現在比較流行的ubuntu等發行版上。yum可以用於運作rpm包,例如在f...
Hadoop 權威指南學習筆記(四)
mapreduce 來編寫程式,有乙個特定的流程。首先寫 map 函式和 reduce 函式,最好使用單元測試來確保函式的執行符合預期。然後,寫乙個驅動程式來執行作業,要看這個驅動程式是否可以執行,可以從本地 ide 用乙個小的資料集來執行它。如果驅動程式不能正確執行,就用本地 盡可能正確地處理這些...
Hadoop 權威指南學習筆記(七)
計數器是一種收集作業統計資訊的有效手段,用於質量控制或應用級統計。計數器還可輔助診斷系統故障。hadoop 為每個作業維護若干內建計數器 以描述該作業的各項指標。在任務執行過程中,每個作業的所有任務的結果都會被任務計數器聚集起來。計數器由其關聯任務維護,井定期傳到 tasktracker 再由 ta...