繁体   English   中英

使用Pig LOAD语句加载新文件

[英]Loading new files using Pig LOAD statement

我想使用PIG脚本将数据从HDFS加载到HBSE表。

我有hadfs文件夹结构如下:

-rw-r--r--  1 user supergroup   63 2014-05-15 20:28 dataparse/good/goodrec_051520142028
-rw-r--r--  1 user supergroup   72 2014-05-15 20:30 dataparse/good/goodrec_051520142030
-rw-r--r--  1 user supergroup   110 2014-05-15 20:32 dataparse/good/goodrec_051520142032

在上面,所有文件名都附带时间戳。

下面是我的从HDFS加载到HBASE的PIG脚本:

G = LOAD '/user/user/dataparse/good/' USING PigStorage(',') as (c1:chararray, c2:chararray,c3:chararray,c4:chararray,c5:chararray);
STORE G INTO 'hbase://test' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('t1:name t1:state t1:phone_no t1:gender');

脚本运行正常,并且所有3个文件中的数据都写入了Hbase“ test ”表。

假设一段时间后,如果有更多具有相同结构的文件进入HDFS,则当我运行Pig脚本时,它将把“ good ”目录中的所有文件与已读取的文件一起加载。 所以我怎么能只加载那些是新文件的文件。 已经加载的文件不应该再次加载到我的HBASE表中。

我怎样才能做到这一点?

谢谢,Sapthashree

我认为您在这里有一些选择。

使用全局

  • 使用shell脚本拾取“新”文件,使用glob功能,以便可以将多个文件输入脚本中。 一个相关的用例在这里
  • 如果文件名中包含日期和时间戳,则可以直接使用glob,请在此处查找灵感

使用大枪

  • 如果使用glob失败了,那么您需要发挥作用,使用逻辑中放置的自定义加载功能来识别其中的“新文件”,您应该一切顺利。 详情在这里

您需要有一些调度机制,其中清管器作业会不时运行。 因此,在此过程中,您只能通过继续跟踪时间戳和文件名或任何其他字段来处理之前未处理的文件。

请参阅此处以获取更多信息从Java应用程序中执行Pig

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM