溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Hadoop的I/O 操作是什么

發(fā)布時(shí)間:2021-10-20 16:52:35 來(lái)源:億速云 閱讀:218 作者:柒染 欄目:大數(shù)據(jù)

Hadoop的I/O 操作是什么,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

1.數(shù)據(jù)完整性

  • 檢測(cè)數(shù)據(jù)是否損壞

    • 在數(shù)據(jù)第一次引入系統(tǒng)時(shí)計(jì)算校驗(yàn)和并在數(shù)據(jù)通過(guò)一個(gè)不可靠的通道進(jìn)行傳輸時(shí)再次計(jì)算校驗(yàn)和

    • 校驗(yàn)和也是可能損壞的

    • 錯(cuò)誤檢測(cè)碼CRC-32 HDFS 使用的是一個(gè)更有效的變體CRC-32C

  • HDFS 的數(shù)據(jù)完整性

    • 對(duì)寫(xiě)入的所有數(shù)據(jù)計(jì)算校驗(yàn)和,并在讀取數(shù)據(jù)時(shí)驗(yàn)證校驗(yàn)和

    • hadoop fs -checksum 檢查一個(gè)文件的校驗(yàn)和

    • LocalFileSystem 執(zhí)行客戶端的校驗(yàn)和驗(yàn)證

    • ChecksumFileSystem

2.壓縮

  • 優(yōu)勢(shì):減少存儲(chǔ)文件所需要的磁盤(pán)空間,并加速數(shù)據(jù)在網(wǎng)絡(luò)和磁盤(pán)上的傳輸

    壓縮格式工具算法文件擴(kuò)展名是否可切分
    DEFLATE無(wú)DEFLATE.deflate
    gzipgzipDEFLATE.gz
    bzip2bzip2bzip2.bz2
    LZOlzopLZO.lzo
    LZ4無(wú)LZ$.lz4
    Snappy無(wú)Snappy.snappy
  • 所有壓縮算法都需要權(quán)衡空間/時(shí)間

  • bzip2的壓縮能力強(qiáng)于gzip,但速度慢

  • codec

壓縮格式HadoopCompressionCodeC
gziporg.apache.hadoop.io.compress.GzipCodeC
bzip2org.apache.hadoop.io.compress.BZip2Codec
  • 最好使用原生類(lèi)庫(kù),而不是Java實(shí)現(xiàn)

  • 大量壓縮和解壓縮,可以考慮使用CodecPool

  • 壓縮和輸入分片

  • 在MapReduce 中使用壓縮

public static void main(String[] args) throws Exception {
        if (args.length != 2) {
            System.err.println("Usage: MaxTemperatureWithCompression <input path> <output path>");
            System.exit(-1);
        }
        Job job = new Job();
        job.setJarByClass(MaxTemperature.class);
        job.setJobName("Max Temperature");

        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        FileOutputFormat.setCompressOutput(job, true);
        FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class);

        job.setMapperClass(MaxTemperatureMapper.class);
        job.setCombinerClass(MaxTemperatureReducer.class); //減少 map 跟reducer 之間的數(shù)據(jù)傳輸
        job.setReducerClass(MaxTemperatureReducer.class);

        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
  • 對(duì)map任務(wù)輸出進(jìn)行壓縮

3.序列化

定義:序列化是指將結(jié)構(gòu)化對(duì)象轉(zhuǎn)化為字節(jié)流以便在網(wǎng)絡(luò)上傳輸或?qū)懙酱疟P(pán)進(jìn)行永久存儲(chǔ)的過(guò)程,反序列化是指將字節(jié)流轉(zhuǎn)回結(jié)構(gòu)化對(duì)象的逆過(guò)程

序列化用于分布式數(shù)據(jù)處理的兩大領(lǐng)域:進(jìn)程間通信和永久存儲(chǔ)

  • Writable 接口

    void write(DataOutput out) throws IOException;
    void readFields(DataInput in) throws IOException;


  • IntWritable

  • WritableComparable

  • org.apache.hadoop.io

  • VIntWritable VLongWritable (變長(zhǎng)格式會(huì)更節(jié)省空間)

  • Text 最大2GB

4.基于文件的數(shù)據(jù)結(jié)構(gòu)

  • 關(guān)于SequenceFile

    • 適合二進(jìn)制類(lèi)型的數(shù)據(jù)

    • hadoop fs -text numbers.seq|head

  • 關(guān)于MapFile

    • MapFile 是已經(jīng)排過(guò)序的SequenceFile,它有索引,所以可以按鍵查找。索引自身就是一個(gè)SequenceFile,包含了map中的一小部分健

  • Avro 數(shù)據(jù)文件

  • 以上幾個(gè)都是面向行的數(shù)據(jù)格式,還有面向列的格式 RCFile

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI