Video: How To Compress Large Video Files On Mac Without Losing Video Quality 2024
De enorma datavolymer som är realiteter i en typisk Hadoop-implementering gör komprimering nödvändig. Datakomprimering sparar definitivt mycket lagringsutrymme och kommer säkerligen att påskynda rörelsen för data i hela ditt kluster. Inte överraskande finns ett antal tillgängliga komprimeringssystem, kallade codecs, där ute för att du ska överväga.
I en Hadoop-implementering handlar du (potentiellt) med ett stort antal enskilda slavnoder, som alla har ett antal stora hårddiskar. Det är inte ovanligt att en enskild slavkod har upp till 45 TB rålagerutrymme tillgängligt för HDFS.
Även om Hadops slavnoder är utformade för att vara billiga, är de inte lediga och med stora datamängder som har en tendens att växa med ökande hastigheter är komprimering ett självklart verktyg för att styra extremt datamängder.
För det första är några grundläggande termer: A codec, som är en förkortad form av co mpressor / dec ompressor, är teknik (mjukvara eller hårdvara, eller båda) för komprimering och dekomprimering av data; Det är implementeringen av en komprimerings / dekomprimeringsalgoritm.
Du måste veta att vissa codecs stöder något som kallas splittable compression och att codecs skiljer sig åt i både den hastighet som de kan komprimera och dekomprimera data och graden till vilken de kan komprimera den.
Splittable compression är ett viktigt koncept i ett Hadoop-sammanhang. Det sätt som Hadoop arbetar på är att filerna delas om de är större än filens blockstorlek och enskilda filsplittor kan bearbetas parallellt med olika mappers.
Med de flesta codecs kan inte textfilskivor dekomprimeras oberoende av andra splittringar från samma fil, så de codecs sägs vara icke-delbara, så MapReduce-bearbetning är begränsad till en enda mapper.
Eftersom filen kan dekomprimeras i sin helhet och inte som enskilda delar baserade på splittringar, kan det inte hända att en sådan fil hanteras parallellt, och prestanda kan ta en stor träff när ett jobb väntar på en enskild mappare till bearbeta flera datablock som inte kan dekomprimeras oberoende.
Splittable-komprimering är bara en faktor för textfiler. För binära filer komprimerar Hadoop-komprimerings codecs data i en binärkodad behållare, beroende på filtypen (till exempel en sekvensfil, avro eller protokollbuffer).
Med tanke på prestanda finns det en kostnad (när det gäller behandling av resurser och tid) som är associerad med att komprimera data som skrivs till ditt Hadoop-kluster.
Med datorer, som med livet, är ingenting gratis. När du komprimerar data byter du behandlingscykler för diskutrymme. Och när dessa data läses, finns det en kostnad förknippad med dekomprimering av data också. Var noga med att väga fördelarna med lagringsbesparingar mot de extra prestandakostnaderna.
Om inmatningsfilen till ett MapReduce-jobb innehåller komprimerad data, är tiden som behövs för att läsa den data från HDFS reducerad och jobbet har förbättrats. Inmatningsdata dekomprimeras automatiskt när den läses av MapReduce.
Inmatningsfilnamnstillägget bestämmer vilken stödd codec som används för att automatiskt dekomprimera data. Till exempel a. gz förlängning identifierar filen som en gzip-komprimerad fil.
Det kan också vara användbart att komprimera mellanfasen av kartfasen i MapReduce-processflödet. Eftersom kartfunktionsutgången skrivs till disken och skickas över nätverket för att minska uppgifterna, kan komprimering av utmatningen leda till betydande prestandaförbättringar.
Och om du vill lagra MapReduce-utmatningen som historikfiler för framtida bruk, kan komprimering av dessa data betydligt minska den mängd utrymme som krävs i HDFS.
Det finns många olika kompressionsalgoritmer och verktyg, och deras egenskaper och styrkor varierar. Den vanligaste avvägningen är mellan kompressionsförhållandena (graden till vilken en fil komprimeras) och komprimerar / dekomprimerar hastigheter. Hadoop-ramen stöder flera codecs. Ramverket transparenter komprimerar och dekomprimerar de flesta inmatnings- och utdatafilformat.
Följande lista identifierar några vanliga codecs som stöds av Hadoop-ramen. Var noga med att välja den codec som stämmer överens med kraven i ditt specifika användningsfall (till exempel med arbetsbelastningar där hastigheten på bearbetningen är viktig, välj en codec med höga dekompressionshastigheter):
-
Gzip: En kompression verktyg som antogs av GNU-projektet, genererar Gzip (kort för GNU zip) komprimerade filer som har a. gz förlängning. Du kan använda kommandot gunzip för att dekomprimera filer som skapades av ett antal komprimeringsverktyg, inklusive Gzip.
-
Bzip2: Från användbarhetssynpunkt är Bzip2 och Gzip liknande. Bzip2 genererar ett bättre kompressionsförhållande än Gzip, men det är mycket långsammare. Faktum är att Bzip2 av alla tillgängliga komprimerings codecs i Hadoop är den längsta.
Om du konfigurerar ett arkiv som du sällan behöver fråga och det finns mycket högt utrymme, kanske Bzip2 är värt att överväga.
-
Snappy: Snappy codec från Google ger blygsamma kompressionsförhållanden, men snabba komprimerings- och dekompressionshastigheter. (Faktum är att den har de snabbaste dekompressionshastigheterna, vilket gör det mycket önskvärt för dataset som sannolikt kommer att bli frågade ofta.)
Snappy codec är integrerad i Hadoop Common, en uppsättning gemensamma verktyg som stöder andra Hadoop-delprojekt. Du kan använda Snappy som tillägg för senare versioner av Hadoop som ännu inte tillhandahåller Snappy codec support.
-
LZO: Liknande Snappy, LZO (kort för Lempel-Ziv-Oberhumer, trio av datavetenskapare som kom med algoritmen) ger blygsamma kompressionsförhållanden, men snabba kompressions- och dekompressionshastigheter. LZO är licensierad enligt GNU Public License (GPL).
LZO stöder delbar komprimering, vilket möjliggör parallell bearbetning av komprimerade textfiler med dina MapReduce-jobb. LZO behöver skapa ett index när det komprimerar en fil, eftersom kompressionsblock med variabel längd krävs ett index för att berätta mappen där den kan dela den komprimerade filen på ett säkert sätt. LZO är bara verkligen önskvärt om du behöver komprimera textfiler.
Codec | Filförlängning | Splittable? | Kompressionsgrad | Kompressionshastighet |
---|---|---|---|---|
Gzip | . GZ | Nej | Medium | Medium |
Bzip2 | . bz2 | Ja | Hög | Slow |
Snappy | . Snappy | Nej | Medium | Snabb |
LZO | . lzo | Nej, om inte indexerat | Medium | Fast |
Alla kompressionsalgoritmer måste göra avvägningar mellan graden av kompression och kompressionshastigheten som de kan uppnå. De codecs som listas ger dig lite kontroll över vad balansen mellan kompressionsförhållandet och hastigheten ska vara vid kompressionstiden.
Gzip tillåter dig till exempel att reglera kompressionshastigheten genom att ange ett negativt heltal (eller nyckelord), där -1 anger den snabbaste komprimeringsnivån och -9 anger den sämsta komprimeringsnivån. Standardkompressionsnivån är -6.