配额: 目录配额: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:1、 2、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(); } }