2015-10-13 93 views
1

我的序列文件直接存储在HDFS例如为:Apache Pig:如何加载存储在hdfs中的序列文件?

grunt> ls 
grunt> ls /blabla 
hdfs://namenode1:54310/blabla/0411f03a-db7f-48d0-9542-5203304e3e81.seq<r 3> 185284523 
hdfs://namenode1:54310/blabla/05be8fc0-e967-42e1-b76a-0d7108a69d17.seq<r 3> 201489688 
hdfs://namenode1:54310/blabla/06222427-519c-49c0-bbbf-49a9f43bbd13.seq<r 3> 196858576 
hdfs://namenode1:54310/blabla/066da26a-48da-45b1-83f5-60d16475e40d.seq<r 3> 194832641 
hdfs://namenode1:54310/blabla/07cbfc83-42a2-47bf-b364-d39da3a2d071.seq<r 3> 194806047 
hdfs://namenode1:54310/blabla/10dea7b8-9ed3-4e66-b4bd-a3c07d8bf39e.seq<r 3> 166224702 

如何创建一个猪脚本,从目录“布拉布拉”读取每个文件和执行行动?

我试过多种方式加载那些工作的投入,但没有:

%default INPUT '/blabla/f8fbbe9a-aae3-413f-b3b9-37cdef71da8f.seq' 
%default INPUT 'hdfs://namenode1:54310/blabla/f8fbbe9a-aae3-413f-b3b9-37cdef71da8f.seq' 
%default INPUT 'f8fbbe9a-aae3-413f-b3b9-37cdef71da8f.seq' 

我总是得到错误:

输入(S):

Failed to read data from "hdfs://namenode1:54310/........." 

回答

0

难道你可以这样试试:

%default INPUT 'hdfs://namenode1:54310/blabla/*' 

它应该工作,如果你的.seq文件是可读的。看起来他们不是,因为你的尝试应该加载一个文件。可以 - 你给完整的日志行吗?

也许你将不得不使用pig SequenceFileLoader。

+0

你说得对。这是一个许可问题。 %default INPUT'hdfs:// namenode1:54310/blabla/*'正常 –

2

您可以尝试读取序列文件在以下方面:

猪SequenceFileLoader:

A = LOAD 'hdfs://namenode1:54310/blabla/*' using org.apache.pig.piggybank.storage.SequenceFileLoader(); 

(或者)使用象鸟:

REGISTER 'elephant-bird-pig-3.0.5.jar'; 
REGISTER 'elephant-bird-core-4.1.jar'; 
REGISTER 'elephant-bird-hadoop-compat-4.1.jar'; 
A = LOAD 'hdfs://namenode1:54310/blabla/*' using com.twitter.elephantbird.pig.load.SequenceFileLoader();