• hadoop归档、压缩


    配额:
        目录配额:hdfs dfsadmin -setQuota
        空间配额:hdfs dfsadmin -setSpaceQuota    块大小x副本数
    
    快照:
        和Linux的硬链接类似,作为数据块的引用
        原文件发生改变,快照不会改变
    
    回收站:
        core-site.xml
    
        hdfs dfs -expunge
    
    序列化
        序列化是将结构化对象转化为字节流
        序列化出现的领域:
            进程间通信
            永久存储
    
        hadoop中的进程间通信是通过RPC实现的,
        RPC是一种协议,使用的是序列化技术
    
    
        特点:
            紧凑
            快速
            可扩展
            支持互操作
    
        writable:是java中基本类型的封装
    
            int    ==> intWritable
            String    ==> Text
    
    hadoop归档文件:har
        
        1文件 ====> 150字节
        hadoop archive -archiveName my.har /data data1 data2 /        //启动yarn
        hdfs dfs -lsr har:///my.har
    
    hadoop的压缩:
        deflate(default)
        gzip
        bzip2
        lzo
        lz4
        snappy
    
    
    
        .deflate压缩耗时:    1029    压缩大小:    1646396        .deflate解压耗时:    841 
        .gz压缩耗时:        405    压缩大小:    1646408        .gz解压耗时:        173 
        .bz2压缩耗时:        4347    压缩大小:    1139847        .bz2解压耗时:        1225
        .lz4压缩耗时:        68    压缩大小:    2531023        .lz4解压耗时:        104 
    
        压缩效率:lz4 < gzip < deflate < bzip2
        解压效率:lz4 < gzip < deflate < bzip2
        压缩占比:bzip2 < deflate < gzip < lz4
    
    
    引入lzo依赖:pom
        <!-- Lzo的依赖 -->
        <dependency>
                <groupId>org.anarres.lzo</groupId>
                <artifactId>lzo-hadoop</artifactId>
                <version>1.0.0</version>
            </dependency>
    
    
        apache的hadoop默认不支持snappy:
            1、将s101的hadoop配置文件的etc文件夹备份到~下
                mv /soft/hadoop/etc ~
            2、删除/soft/hadoop-2.7.3目录'
                rm -rf /soft/hadoop-2.7.3
            3、将hadoop-2.7.3_snappy.tar.gz发送到s101,并解压到/soft目录
                tar -xzvf hadoop-2.7.3_snappy.tar.gz -C /soft
            4、将新文件夹的etc目录删除
                rm -rf /soft/hadoop-2.7.3/etc
            5、将备份的etc文件夹移动到/soft/hadoop即可
                mv ~/etc /soft/hadoop/
    
    
    将代码稍作修改,将其打成jar放在Linux上运行
        1、修改代码
        2、在idea上进行build
            <build>
                <plugins>
                    <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                        <encoding>${project.build.sourceEncoding}</encoding>
                    </configuration>
                    </plugin>
                    <plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <configuration>
                        <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <archive>
                        <manifest>
                            <mainClass>com.oldboy.compression.TestCodec</mainClass>
                        </manifest>
                        </archive>
                    </configuration>
                    <executions>
                        <execution>
                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
                        <phase>package</phase> <!-- bind to the packaging phase -->
                        <goals>
                            <goal>single</goal>
                        </goals>
                        </execution>
                    </executions>
                    </plugin>
                    
                </plugins>
                </build>
    
    .deflate压缩耗时:       763     压缩大小:       1646396 .deflate解压耗时:       254
    .gz压缩耗时:        294     压缩大小:       1646408 .gz解压耗时:    89
    .bz2压缩耗时:        2992    压缩大小:       1139847 .bz2解压耗时:   730
    .lz4压缩耗时:        70      压缩大小:       2531023 .lz4解压耗时:   81
    .lzo_deflate压缩耗时:   184     压缩大小:       2564953 .lzo_deflate解压耗时:   148
    .snappy压缩耗时:        65      压缩大小:       2563606 .snappy解压耗时:        47
    
        
        压缩效率:snappy <  lz4 < lzo < gzip < deflate < bzip2
        解压效率:snappy <  lz4 < gzip < lzo < deflate < bzip2
        压缩占比:bzip2 < deflate < gzip < lz4 < snappy < lzo
    
    
        所以,在生产环境中,序列化或者网络间传输数据一般都使用压缩技术
        平衡硬件占用率:压缩使用cpu的多线程实现,解决空间占用和网络带宽的消耗
    
    
    解决小文件:
        har        //hadoop archive
        压缩        //codec
        序列文件    //sequenceFile
    
    
    
    sequenceFile:序列文件
    
        SeqFile是扁平化文件包含二进制的K-V
    
        SequenceFile在内部支持压缩,并包括以下三种压缩类型:
            不压缩:    //不压缩
            记录压缩:    //只压缩value
            块压缩 :    //k-v以block的形式聚合在一起并进行压缩,block可配置
    
        SequenceFile的数据格式:
            版本:        //包括3个字节的SEQ,和真实版本号(e.g. SEQ4 or SEQ6)
            key的类名    //e.g. org.apache.hadoop.io.IntWritabe
            value的类名    //
            是否压缩    //boolean
            是否是块压缩    //boolean
            压缩编解码器    //compression codec
            元数据        //真实数据
            同步点        //
        
    
        创建SeqFile:1、
        读取SeqFile:12、hdfs dfs -text file:///F:/seq/1.seq
    
    
        sequenceFile可切割:
            1、物理切割:hdfs块切割
            2、逻辑切割:mapreduce计算单位是行,所以文件需要逻辑可切割
                     即在文件的任意位置都能定位到文件数据
                     能够进行逻辑切割的文件形式:
                    1)bzip2压缩    //自带压缩
                    2)Lzo压缩    //手动加索引
                            //LzoIndexer indexer = new LzoIndexer(conf);
                            //indexer.index(new Path(lzoPath));
    
                    3)sequenceFile    //通过同步点(sync)机制获取数据定位,并进行计算
        
    
    SequenceFile的seek和Sync:
        seek:硬性定位指针,从此位置开始读取
        sync:定位到最近同步点(当前位置之后的),从同步点读取数据
    
    
    SequenceFile的sort:
    
    
    MapFile:排序且带索引的seqFile
        index:        //索引数据
                //key= data中的key
                  value = 条目的position
    
        data:        //真实数据
    
                
        
    SeqFile转换为Mapfile
        
        person ===> personWritable
    
        通过personWritable形式将person对象,转化为SequenceFile
    
        MapFile.fix( fs, p, IntWritable.class, Text.class, false, conf);    //必须是false
    
    
    SequenceFile三种压缩类型:
        不压缩:    //不压缩
        记录压缩:    //只压缩value
        块压缩:    //
    
    
    
    
    
    创建SequenceFile或压缩编解码器出现异常:
    
    
        1、在windows的cmd中输入hadoop version测试版本,如果出现版本号则下一步    //环境变量
        2、输入winutils,如果出现错误,需要安装vc++运行库            //vc++运行库缺失
    
    
    
    maven:
        项目构建、依赖管理和项目信息管理
        配置maven环境变量:
            1、M2_HOME=E:Programapache-maven-3.5.0
            2、PATH
            3、在cmd中输入mvn -v
    
        %M2_HOME%下的conf文件夹里面的settings.xml文件是非常重要的文件
    
        0、创建pom文件:pom.xml
            <?xml version="1.0"?>
            <project>
                <modelVersion>4.0.0</modelVersion>
    
                <groupId>com.oldboy</groupId>
                <artifactId>helloworld</artifactId>
                <version>1.0</version>
            </project>
    
        1、创建一个文件夹,并在文件夹中打开cmd,并输入以下命令创建文件夹
            md srcmainjavacomoldboyhelloworld
    
        2、使得pom.xml文件和src文件夹保持在相同目录下
    
        3、在helloworld文件夹编写HelloWorld.java
            package com.oldboy.helloworld;
            public class HelloWorld{
                public static void main(String[] args){
                    System.out.println("Hello world");
                }
            }
    
        4、在pom文件所在目录下输入mvn clean compile
    
            mvn clean    //删除target文件夹
                compile    //编译
                package    //打包
                archetype:generate    //生成项目骨架
    
    
            
            
    public class TestSeqCompress {
    
        public static void main(String[] args) throws Exception {
            System.setProperty("HADOOP_USER_NAME","centos");
            Configuration conf  = new Configuration();
    
            conf.set("fs.defaultFS","file:///");//这一步需要在FileSystem之前,如果在之后,就是先连接Hadoop在设置成本地,
                                                //导致后面使用的conf还是Hadoop的,set就没有意义了。
    
            FileSystem fs = FileSystem.get(conf);//连接系统
            CompressionCodec cos = (CompressionCodec)ReflectionUtils.newInstance(LzoCodec.class, conf);
    
            Path p = new Path("file:///D:/e/2.seq");
    
            SequenceFile.Writer writer =  SequenceFile.createWriter(fs,conf,p,IntWritable.class,Text.class,
                    SequenceFile.CompressionType.NONE);
            //IntWritable key = new IntWritable(1);
            //Text value = new Text("hello"+1);
            for(int i = 1;i<100;i++){
                Random r = new Random();
                int j = r.nextInt(1000);
                IntWritable key = new IntWritable(j);
                Text value = new Text("tom"+i);
                writer.append(key,value);
            }
    
            writer.close();
            //System.out.println();
        }
    
    }
  • 相关阅读:
    [课程设计]Scrum 1.6 多鱼点餐系统开发进度
    [课程设计]Scrum 1.7 多鱼点餐系统开发进度
    [课程设计]Scrum 1.5 多鱼点餐系统开发进度
    [课程设计]Scrum 1.4 多鱼点餐系统开发进度
    [课程设计]Scrum 1.3 多鱼点餐系统开发进度
    [课程设计]Scrum 1.2 Spring 计划&系统流程&DayOne燃尽图
    [课程设计]Scrum 1.1 NABCD模型&产品Backlog
    [课程设计]Scrum团队分工及明确任务1.0 ----多鱼点餐
    学习进度条
    [课程设计]多鱼点餐系统个人总结
  • 原文地址:https://www.cnblogs.com/zyde/p/9225111.html
Copyright © 2020-2023  润新知