sequence File 的文件存储格式
-
SequenceFile文件是Hadoop用来存储二进制形式的key-value对而设计的一种平面文件(Flat File)。目前,也有不少人在该文件的基础之上提出了一些HDFS中小文件存储的解决方案,他们的基本思路就是将小文件进行合并成一个大文件,同时对这些小文件的位置信息构建索引。不过,这类解决方案还涉及到Hadoop的另一种文件格式——MapFile文件。SequenceFile文件并不保证其存储的key-value数据是按照key的某个顺序存储的,同时不支持append操作。
-
在SequenceFile文件中,每一个key-value被看做是一条记录(Record),因此基于Record的压缩策略,SequenceFile文件可支持三种压缩类型(SequenceFile.CompressionType):
-
NONE: 对records不进行压缩;
-
RECORD: 仅压缩每一个record中的value值;
-
BLOCK: 将一个block中的所有records压缩在一起;
-
那么,基于这三种压缩类型,Hadoop提供了对应的三种类型的Writer:
-
SequenceFile.Writer 写入时不压缩任何的key-value对(Record);
hive 自定义UDF函数
- 依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>
3.创建一个类
package com.dorr.hive;
import org.apache.hadoop.hive.ql.exec.UDF;
public class Lower extends UDF {
// 重写一下evaluate方法
public String evaluate (final String s) {
if (s == null) {
return null;
}
return s.toLowerCase();
}
}
4.打成jar包上传到服务器/opt/module/jars/udf.jar
5.将jar包添加到hive的classpath
hive (default)> add jar /opt/module/datas/udf.jar;
6.创建临时函数与开发好的java class关联
hive (default)> create temporary function mylower as “com.dorr.hive.Lower”;
7.即可在hql中使用自定义的函数strip
hive (default)> select ename, mylower(ename) lowername from emp;