hive SymlinkTextInputFormat介绍及用法

1、介绍
   先摘一段官方介绍,如下:
   Symlink file is a text file which contains a list of filename / dirname.This input method reads symlink files from specified job input paths and takes the files / directories specified in those symlink files as actual map-reduce input. The target input data should be in TextInputFormat.
    simlink文件其实就是一个text的文件,不过文件里面存放的不是hive表中要读取的数据,而是数据存放的地址。类似于linux下的软链接。simlink文件中的数据地址,支持正则表达式,用起来非常灵活。


2、举例说明

2.1 创建表 
CREATE TABLE symlink_text_input_format (key STRING, value STRING) STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat';

2.2 在hdfs上上传两个text格式的文件,如下,放到/tmp目录

hadoop fs -put symlink1.txt /tmp/symlink1.txt
hadoop fs -put symlink2.txt /tmp/symlink1.txt

2.3 创建一个link文件,内容是真实的文件地址:
/tmp/symlink1.txt
/tmp/symlink1.txt

2.4 上传link文件到hive表symlink_text_input_format 的目录中
hadoop fs -put link /user/hive/warehouse/test.db/symlink_text_input_format/link

2.5 查询symlink_text_input_format 

select * from  symlink_text_input_format  ;
当查询symlink_text_input_format,首先读到的链接文件的地址,会把这些地址当做hive表中的input file。

2.6 在创建的链接文件中,支持正则表达式。如下的链接文件,会把/tmp目录下symlink开头的文件当做hive表的输入
/tmp/symlink*


3、应用场景

集群下面有3个目录,以及目录中的文件如下,
/logdata/uigs/web/cnc/201401/20140414
----/logdata/uigs/web/cnc/201401/20140414/ip1.201404141220.log
----/logdata/uigs/web/cnc/201401/20140414/ip2.201404141220.log
----/logdata/uigs/web/cnc/201401/20140414/ip3.201404141220.log
----/logdata/uigs/web/cnc/201401/20140414/ip4.201404141220.log
/logdata/uigs/web/tc/201401/20140414
----/logdata/uigs/web/tc/201401/20140414/ip5.201404141220.log
----/logdata/uigs/web/tc/201401/20140414/ip6.201404141220.log
----/logdata/uigs/web/tc/201401/20140414/ip7.201404141220.log
----/logdata/uigs/web/tc/201401/20140414/ip81.201404141220.log
/logdata/uigs/web/sjs/201401/20140414
----/logdata/uigs/web/sjs/201401/20140414/ip9.201404141220.log
----/logdata/uigs/web/sjs/201401/20140414/ip10.201404141220.log
----/logdata/uigs/web/sjs/201401/20140414/ip11.201404141220.log
----/logdata/uigs/web/sjs/201401/20140414/ip12.201404141220.log

hive中有表 uigs,以分钟当做分区,为了把上面的数据写入到logdata=201404141220的分区中,可以创建一个link文件,内容如下

/logdata/uigs/web/sjs/201401/20140414/*201404141220*
/logdata/uigs/web/cnc/201401/20140414/*201404141220*
/logdata/uigs/web/tc/201401/20140414/*201404141220*

然后把这个link文件put到logdata=201404141220的分区目录中。


你可能感兴趣的:(Hive)