如何使用 apache pig 在 hadoop 集群上加载文件?
Posted
技术标签:
【中文标题】如何使用 apache pig 在 hadoop 集群上加载文件?【英文标题】:how to load files on hadoop cluster using apache pig? 【发布时间】:2012-02-29 00:20:36 【问题描述】:我有一个 pig 脚本,需要从本地 hadoop 集群加载文件。我可以使用 hadoop 命令列出文件:hadoop fs –ls /repo/mydata,` 但是当我尝试在 pig 脚本中加载文件时,它失败了。加载语句是这样的:
in = LOAD '/repo/mydata/2012/02' USING PigStorage() AS (event:chararray, user:chararray)
错误信息是:
Message: org.apache.pig.backend.executionengine.ExecException: ERROR 2118: Input path does not exist: file:/repo/mydata/2012/02
有什么想法吗?谢谢
【问题讨论】:
知道了,应该是这样的:in = LOAD "hdfs:/repo/mydata/2012/02" USING PigStorage() AS ... 【参考方案1】:我的建议:
在 hdfs 中创建一个文件夹:hadoop fs -mkdir /pigdata
将文件加载到创建的hdfs文件夹:hadoop fs -put /opt/pig/tutorial/data/excite-small.log /pigdata
(或者你可以在 grunt shell 中使用 grunt> copyFromLocal /opt/pig/tutorial/data/excite-small.log /pigdata
)
执行猪拉丁脚本:
grunt> set debug on
grunt> set job.name 'first-p2-job'
grunt> log = LOAD 'hdfs://hostname:54310/pigdata/excite-small.log' AS
(user:chararray, time:long, query:chararray);
grunt> grpd = GROUP log BY user;
grunt> cntd = FOREACH grpd GENERATE group, COUNT(log);
grunt> STORE cntd INTO 'output';
输出文件将存储在hdfs://hostname:54310/pigdata/output
【讨论】:
【参考方案2】:我遇到了同样的问题..请在下面找到我的建议:
要开始使用 PIG,请输入: [root@localhost 培训]# pig -x local
现在键入 load 语句,就像我在下面的示例中所做的那样: grunt> a= LOAD '/home/training/pig/TempFile.txt' using PigStorage(',') as (c1:chararray,c2:chararray,c3:chararray);
【讨论】:
【参考方案3】:去掉“=”两边的空格 in=LOAD '/repo/mydata/2012/02' USING PigStorage() AS (event:chararray, user:chararray)
【讨论】:
以上是关于如何使用 apache pig 在 hadoop 集群上加载文件?的主要内容,如果未能解决你的问题,请参考以下文章
Pig 0.13 错误 2998:未处理的内部错误。 org/apache/hadoop/mapreduce/task/JobContextImpl
Apache pig 错误 org.apache.pig.backend.hadoop.executionengine.Launcher - 错误:org.apache.avro.file.DataF
Apache Pig:使用 hadoop fs -text 加载显示良好的文件
Pig Elephant-Bird 找到接口 org.apache.hadoop.mapreduce.JobContext,但是应该有类