hive SymlinkTextInputFormat介绍及用法,textinputformat


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的分区目录中。

相关内容

    暂无相关文章