hive SymlinkTextInputFormat介绍及用法

本文介绍了Hive中的Symlink Input Format使用方法及其应用场景。通过创建包含实际数据路径的文本文件,可以灵活地指定MapReduce任务的输入数据,并支持正则表达式。文章通过实例展示了如何设置表格和进行查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值