日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BZip2Codec压缩、Map端压缩控制、Reduce端压缩控制……都在这份Hadoop整合压缩知识点里了!...

發(fā)布時(shí)間:2024/8/23 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZip2Codec压缩、Map端压缩控制、Reduce端压缩控制……都在这份Hadoop整合压缩知识点里了!... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者 |?Tai_Park

責(zé)編 |?Carol

來源 | CSDN 博客

封圖 | CSDN付費(fèi)下載于東方 IC

今天來聊聊 Hadoop 的壓縮。

壓縮:原始數(shù)據(jù)通過壓縮手段產(chǎn)生目標(biāo)數(shù)據(jù),要求輸入和輸出的內(nèi)容是一樣的(大部分),但體積是不一樣的。

對于單機(jī)用戶來說,磁盤空間的限制導(dǎo)致了文件壓縮的需求;對于Hadoop用戶來說,由于DataNode的限制,也要對HDFS上的數(shù)據(jù)進(jìn)行壓縮。壓縮的目的是減少存儲在HDFS上的數(shù)據(jù)所占用的空間(磁盤的角度),提升網(wǎng)絡(luò)的傳輸效率(網(wǎng)絡(luò)的角度)。對于分布式計(jì)算框架來說,Shuffle是一個(gè)主要的技術(shù)瓶頸。

大數(shù)據(jù)處理流程基本上是輸入==>處理==>輸出,舉例來說,在離線處理方面,Spark可以HDFS==>Spark==>HDFS,在實(shí)時(shí)處理方面,Spark Streaming可以Kafka==>Spark Streaming==>RDBMS。壓縮可以使用在輸入時(shí),也可以使用在處理時(shí)(比如map作為中間狀態(tài),它的輸出可以壓縮以減少Shuffle的量),輸出時(shí)。

MR在進(jìn)行壓縮數(shù)據(jù)處理時(shí),不需要手工去處理。但是MR執(zhí)行過程中,是需要一個(gè)動(dòng)作進(jìn)行數(shù)據(jù)壓縮、解壓的,MR根據(jù)后綴名進(jìn)行處理。在處理壓縮、解壓的過程中,是有CPU資源的消耗的。如果集群本來CPU使用率很高,就會對其他作業(yè)產(chǎn)生影響,不建議使用壓縮。

常見的壓縮格式有GZIP、BZIP2、LZO、SNAPPY。選擇壓縮格式要從壓縮比、壓縮速度考慮。不同的壓縮格式對應(yīng)不同的codec。

BZip2Codec壓縮

package com.bigdata.compression;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.io.compress.CompressionCodec; import org.apache.hadoop.io.compress.CompressionOutputStream; import org.apache.hadoop.util.ReflectionUtils;import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream;public class CompressionApp {public static void main(String[] args) throws Exception{String filename = "ip.txt";String method = "org.apache.hadoop.io.compress.BZip2Codec";compress(filename,method);}private static void compress(String filename, String method) throws Exception{FileInputStream fis = new FileInputStream(new File(filename));Class<?> codecClass = Class.forName(method);CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(codecClass, new Configuration());FileOutputStream fos = new FileOutputStream(new File(filename + codec.getDefaultExtension()));CompressionOutputStream cos = codec.createOutputStream(fos);IOUtils.copyBytes(fis,cos,1024*102485);cos.close();fos.close();fis.close();} }
  • 讀取輸入流

  • 通過類名反射出對應(yīng)的codec

  • 寫出輸出流

  • 通過IOUtils.copyBytes寫出去

  • 壓縮前后對比:

    BZip2Codec解壓

    private static void decompression(String filename) throws Exception{CompressionCodecFactory factory = new CompressionCodecFactory(new Configuration());CompressionCodec codec = factory.getCodec(new Path(filename));CompressionInputStream fis = codec.createInputStream(new FileInputStream(new File(filename)));FileOutputStream fos = new FileOutputStream(new File(filename) + ".decoded");IOUtils.copyBytes(fis,fos,1024*102485);fos.close();fos.close();fis.close();}

    解壓前后對比:

    Map端壓縮控制

    mapred-default.xml中有mapreduce.map.output.compress參數(shù),控制map輸出時(shí)的壓縮,mapreduce.map.output.compress.codec控制壓縮類型。

    代碼層面可以用:

    configuration.setBoolean("mapreduce.map.output.compress",true); configuration.setClass("mapreduce.map.output.compress.codec",BZip2Codec.class,CompressionCodec.class);

    進(jìn)行設(shè)置即可。

    若要在配置層面更改,core-site.xml需要加上:

    <property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.SnappyCodec</value> </property>

    ?mapred-site.xml添加:

    mapreduce.map.output.compress=true mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.BZip2Codemapreduce.output.fileoutputformat.compress=true mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.BZip2Code

    配置文件修改完重啟Hadoop即可。

    Reduce端壓縮控制

    mapred-default.xml中有mapreduce.output.fileoutputformat.compress參數(shù),控制reduce端輸出時(shí)的壓縮,

    mapreduce.output.fileoutputformat.compress.codec控制壓縮類型。

    設(shè)置同上。

    你還有什么 Hadoop 整合壓縮相關(guān)知識點(diǎn)?歡迎評論告訴我們?~

    《原力計(jì)劃【第二季】-?學(xué)習(xí)力挑戰(zhàn)》正式開始!即日起至?3月21日,千萬流量支持原創(chuàng)作者!更有專屬【勛章】等你來挑戰(zhàn)

    推薦閱讀:6 個(gè)步驟,教你在Ubuntu虛擬機(jī)環(huán)境下,用Docker自帶的DNS配置Hadoop | 附代碼 刪庫跑路事件發(fā)生,SaaS云服務(wù)如何守護(hù)數(shù)據(jù)安全 釋放低代碼小宇宙,微軟 Power Platform 震撼來襲! 閃電網(wǎng)絡(luò)的 5 個(gè)優(yōu)點(diǎn)和4 個(gè)缺點(diǎn)、本質(zhì)、來源與工作原理……一文帶你讀懂閃電網(wǎng)絡(luò)! 喬布斯遺孀裸捐 250 億美元財(cái)產(chǎn):沒興趣累積財(cái)富 賠償谷歌1.8億美元!前Uber自動(dòng)駕駛主管被告到破產(chǎn) 真香,朕在看了!

    總結(jié)

    以上是生活随笔為你收集整理的BZip2Codec压缩、Map端压缩控制、Reduce端压缩控制……都在这份Hadoop整合压缩知识点里了!...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。