Hadoop常見的文件格式及壓縮演算法

来源:https://www.cnblogs.com/tangshanqun/archive/2022/08/20/16602547.html
-Advertisement-
Play Games

前言 該文章中將會整理一些大數據中常見的文件格式及壓縮演算法的理論知識,作為後期實踐的理論指導。理論+實踐才會更方便用這些文件格式和壓縮演算法。 目前hadoop中常見的文件格式有textfile、sequencefile、avro、rcfile、orcfile、parquet等,上述六種文件格式又可以 ...


前言

 該文章中將會整理一些大數據中常見的文件格式及壓縮演算法的理論知識,作為後期實踐的理論指導。理論+實踐才會更方便用這些文件格式和壓縮演算法。
    目前hadoop中常見的文件格式有textfile、sequencefile、avro、rcfile、orcfile、parquet等,上述六種文件格式又可以劃分為行式存儲(textfile、sequencefile、avro)和列式存儲(rcfile、orcfile、parquet)。那麼什麼是行式存儲?什麼又是列式存儲呢?

一、行式存儲及列式存儲

1.行式存儲

行式存儲就是每一行的所有數據存在一個block中,各個block之間連續存儲。

優點:

  • 因為每一行的所有欄位都存在一起,因此對數據進行插入(INSERT)和修改(UPDATE)操作很方便。
  • 整表查詢比較方便,可以很快將整張表組裝出來。

缺點:

  • 查詢(SELECT)時如果涉及到某條數據,需要把該行數據所有內容都讀取到記憶體中,即使只SELECT一兩個欄位也要把整行數據都讀進來。讀取數據的時候硬碟定址範圍很大。
  • 要加速查詢的話需要建立索引,建立索引需要花費很多時間。
  • 空值也要占固定的空間。

應用場景:

行式存儲用於存儲關係型數據,用於使用數據的時候需要經常用到數據之間的依賴關係的場景,即讀取的時候需要整行數據或者整行中大部分列的數據,需要經常用到插入、修改操作,比如存儲用戶的註冊信息等。

2.列式存儲

列式存儲就是每一列的所有數據存在一起,不同列之間可以分開存儲。

優點:

  • 每一列單獨存儲,因此僅SELECT個別列的時候,可以僅讀取需要的那幾個列,相當於為每一列都建立了索引。因此硬碟尋道範圍小。
  • 數據壓縮。列式存儲的時候可以為每一列創建一個字典,存儲的時候就僅存儲數字編碼即可,降低了存儲空間需求

缺點:

  • SELECT完成時,被選中的數據需要重新組裝。
  • 插入(INSERT)和修改(UPDATE)操作比較麻煩。

應用場景:

列式存儲適合分散式資料庫和數據倉庫,適合於對大量數據進行統計分析,列與列之間關聯性不強,僅進行插入和讀取操作的場景,如網站流量統計、用戶行為分析等。

二、具體的文件格式

看完具體的大類劃分,我們再看看具體的文件格式。

1. TextFile

預設格式,存儲方式為行存儲,數據不做壓縮,磁碟開銷大,數據解析開銷大。可結合 Gzip、Bzip2 使用(系統自動檢查,執行查詢時自動解壓),但使用 這種方式,壓縮後的文件不支持 split,Hive 不會對數據進行切分,從而無法對數據進行並行操作。並且在反序列化過程中,必須逐個字元判斷是不是分隔符和行結束符,因此反序列化開銷會比 SequenceFile 高幾十倍 。

2. SequenceFile

 

SequenceFile 是 Hadoop API 提供的一種二進位文件支持,存儲方式為行存儲,其具有使用方便、可分割、可壓縮的特點。SequenceFile 支持三種壓縮選擇:NONE,RECORD,BLOCK。Record 壓縮率低,一般建議使用 BLOCK 壓縮。優勢是文件和 hadoop api 中的 MapFile 是相互相容的 。

3. Avro

Avro格式是Hadoop的一種基於行的存儲格式,被廣泛用作序列化平臺。Avro格式以JSON格式存儲模式,使其易於被任何程式讀取和解釋。數據本身以二進位格式存儲,使其在Avro文件中緊湊且高效。Avro格式是語言中立的數據序列化系統。它可以被多種語言處理(目前是C、C++、C#、Java、Python和Ruby)。Avro格式的一個關鍵特性是對隨時間變化的數據模式的強大支持,即模式演變。Avro處理模式更改,例如缺少欄位、添加的欄位和更改的欄位。Avro格式提供了豐富的數據結構。例如,您可以創建包含數組、枚舉類型和子記錄的記錄。

4. RCFile

RCFile是為基於MapReduce的數據倉庫系統設計的數據存儲結構。它結合了行存儲和列存儲的優點,可以滿足快速數據載入和查詢,有效利用存儲空間以及適應高負載的需求。RCFile是由二進位鍵/值對組成的flat文件,它與sequence file有很多相似之處,在數倉中執行分析時,這種面向列的存儲非常有用。當我們使用面向列的存儲類型時,執行分析很容易。缺點是RC不支持schema擴展,如果要添加新的列,則必須重寫文件,這會降低操作效率。

5. OrcFile

 

Apache ORC是Apache Hadoop生態系統面向列的開源數據存儲格式,它與Hadoop環境中的大多數計算框架相容,ORC代表“優化行列”,它以比RC更為優化的方式存儲數據,提供了一種非常有效的方式來存儲關係數據,然後存儲RC文件。ORC將原始數據的大小最多減少75%,數據處理的速度也提高了。

6. Parquet

與以行方式存儲數據的傳統方法相比,Parquet文件格式在存儲和性能方面更高效。這對於從“寬”(具有許多列)表中讀取特定列的查詢特別有用,因為只讀取需要的列,並且最小化 IO。Parquet的獨特功能之一是它也可以以柱狀方式存儲具有嵌套結構的數據。這意味著在 Parquet 文件格式中,即使是嵌套欄位也可以單獨讀取,而無需讀取嵌套結構中的所有欄位。Parquet 格式使用記錄分解和組裝演算法以柱狀方式存儲嵌套結構。

三、壓縮演算法

壓縮格式

工具

演算法

文件擴展名

是否可切分

default/deflate

deflate

.deflate

gzip

gzip

deflate

.gz

bzip2

bzip2

bzip2

.bz2

lzo

lzop

lzo

.lzo

lz4

lz4

.lz4

snappy

snappy

.snappy

四、總結

Hadoop支持的文件格式和壓縮演算法非常多,每種文件格式和壓縮演算法都有自己獨特的特點和一定的應用場景。下一期我們講講這些內容,並選擇合適的文件格式和壓縮演算法組合,作為預設的文件格式和壓縮演算法。

如有錯誤,不吝指正。

參考文章

  1. https://zhuanlan.zhihu.com/p/459444652
  2. https://www.51cto.com/article/615292.html
  3. https://segmentfault.com/a/1190000040823167
  4. https://blog.csdn.net/longyanchen/article/details/97160466

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、前言 在開發過程中經常有這樣的場景:一個工具性質的代碼會經常被用到,在.net中一般的做法是將這些代碼封裝成一個類庫,讓後需要用到這個功能時直接引入類庫的dll文件,然後就可以直接使用這些代碼了。但是相比於人工的方式引入dll文件,通過nuget來進行包的管理將會更加優雅方便,今天就來向大家介紹 ...
  • ASP.NET Core應用本質上,其實就是由若幹個中間件構建成的請求處理管道。管道相當於一個故事的框架,而中間件就相當於故事中的某些情節。同一個故事框架採用不同的情節拼湊,最終會體現出不同風格的故事。而我們的ASP.NET Core應用也正是如此,同一管道採用不同的中間件組合,最終也會呈現出不同的 ...
  • ABP的依賴註入基於Castle Windsor,可以通過Nuget搜索Castle.Windsor來安裝使用 ABP框架運行其實是以模塊進行載入的運行的,通過源碼得知AbpModule是所有模塊基類(也就是說一個程式集就是一個模塊,我們在創建類庫時,可以在創建一個模塊類的時候繼承AbpModule ...
  • 背景 最近一直在搞一件事,就是熟悉Blazor,後期需要將Blazor真正運用到項目內。前期做了一些調研,包括但不限於 Blazor知識學習 組件庫生態預研 與現有SPA框架做比對 與WebForm做比對 自己動手做個演示項目 最終的體驗非常不錯,功能全面。現有的一些SPA思想Blazor基本都有, ...
  • CoreShop商城 特色:.net第一國產電商項目,影響力最大 核心商城系統(CoreShop) 是基於 Asp.Net 5.0、Uni-App開發、 支持可視化佈局的小程式商城系統; 前後端分離,支持分散式部署,跨平臺運行;擁有分銷、代理、團購秒殺、 接龍、拼團、直播、優惠券、自定義表單等眾多營 ...
  • 前言 一開始買了筆記本電腦後,不懂事,隨手就把電腦用戶名設置成了中文。 作為一名程式猿,實在是覺得彆扭,故在網路上尋找修改用戶名的方法,並記錄一些坑點。 提示:如果有比較多重要文件,最好提前備份。 以下內容用原來的用戶名和NewName表示新舊用戶名,記得更換為自己的實際用戶名。 我的筆記本電腦配置 ...
  • Bridge 2022 mac版更新了,這是一款Adobe系列的資源管理軟體,它擁有強大的媒體集中資產訪問功能:可以查看、搜索、排序、管理和處理圖像文件。軟體可以使用高級過濾器、集合和搜索來查找您正在尋找的資產;可以快速組織和堆疊全景和 HDR 圖像,快速組織和堆疊全景和 HDR 圖像;還可以在ma ...
  • 修改PS1變數即可實現 臨時修改 export PS1='\[\e[1;32m\][\u@\h \W]\$ \[\e[0m\]' 永久修改 echo "export PS1='\[\e[1;32m\][\u@\h \W]\\$ \[\e[0m\]'" >> /etc/bashrc ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...