如何自动加载配置单元中的数据

时间:2013-01-17 06:33:08

标签: hadoop load hive

最近我想将日志文件加载到hive表中,我想要一个可以从某个目录读取数据并自动将它们加载到hive的工具。该目录可能包含许多子目录,例如,某个目录是'/ log',子目录是'/ log / 20130115','/ log / 20130116','/ log / 201301017'。是否有一些ETL工具可以实现以下功能:一旦新数据存储在某个目录中,该工具就可以自动检测这些数据并将其加载到hive表中。是否有这样的工具,我是否必须自己编写脚本?

2 个答案:

答案 0 :(得分:4)

您可以使用Hive外部表格和白天对表格进行分区来轻松完成此操作。例如,按原样创建表:

create external table mytable(...) 
partitioned by (day string) 
location '/user/hive/warehouse/mytable';

这实际上会在Metastore中创建一个空表,并使其指向/user/hive/warehouse/mytable

然后,您可以使用 key = value 格式在此目录中加载数据,其中是您的分区名称(此处为“day”),value是值你的分区。例如:

hadoop fs -put /log/20130115 /user/hive/warehouse/mytable/day=20130115

一旦你的数据被加载,它就在HDFS目录中,但Hive Metastore还不知道它属于该表,所以你可以这样添加:

alter table mytable add partition(day='20130115');

你应该好好去,你的新分区会更新Metastore,你现在可以在这个分区上查询你的表。

这对于脚本来说应该是微不足道的,您可以创建一个每天运行一次的cron作业,按顺序执行这些命令,并找到要使用date命令加载的分区,例如继续执行此命令: / p>

hadoop fs -test /log/`date +%Y%m%d`

并检查$?是否等于0将告诉您文件是否在这里,如果是,您可以传输它并按上述方法添加分区。

答案 1 :(得分:1)

您可以使用Hive提供的LOAD DATA命令。它完全符合您的使用案例。在本地文件系统中指定一个目录并从中创建Hive表。

使用示例 - LOAD DATA LOCAL INPATH' / home / user / some-directory' OVERWRITE INTO TABLE表