0

我是 Linux 和 Apache Pig 的新手。我正在按照本教程学习猪: http ://salsahpc.indiana.edu/ScienceCloud/pig_word_count_tutorial.htm

这是一个基本的字数统计示例。数据文件“input.txt”和程序文件“wordcount.pig”在网站上链接的 Wordcount 包中。

我已经Pig 0.11.1在我的本地机器上下载了Hadoop, 和Java 6.

当我下载 Wordcount 包时,它把我带到了一个 " tar.gz" 文件。我对这种类型不熟悉,不知道如何提取它。它包含文件“input.txt”、“wordcount.pig”和一个自述文件。我将“ input.txt”保存到我的桌面。我不确定在哪里保存 wordcount.pig,并决定在 shell 中逐行输入命令行。

我在本地模式下运行 pig 如下:pig -x local

然后我只是在 grunt> 提示符处复制粘贴 wordcount.pig 脚本的每一行,如下所示:

A = load '/home/me/Desktop/input.txt';

B = foreach A generate flatten(TOKENIZE((chararray)$0)) as word;

C = group B by word;

D = foreach C generate COUNT(B), group;

转储 D;

这会产生以下错误: ...

Retrying connect to server: localhost/127.0.0.1:8021. Already tried 9 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)

 ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2043: Unexpected error during execution.

我的问题:

1. 我应该将'input.txt' 和原始'wordcount.pig' 脚本保存到pig-0.11.1 目录中的某个特殊文件夹中吗?也就是说,在 pig-0.11.1 中创建一个名为 word 的文件夹并将 'wordcount.pig' 和 'input.txt' 放在那里,然后在 grunt> 提示符下输入“wordcount.pig” ??? 一般来说,如果我有数据说“dat.txt”,脚本说“program.pig”,我应该在哪里保存它们以从 grunt shell 运行“program.pig”???我认为他们都应该进入 pig-0.11.1,所以我可以做 $ pig -x local wordcount.pig,但我不确定。

2. 为什么我不能像我尝试的那样逐行运行脚本?我在加载语句中指定了文件“input.txt”的位置。那么为什么它不只是逐行运行命令行并将 D 的内容转储到我的屏幕上???

3. 当我尝试使用 $pig 在 mapreduce 模式下运行 Pig 时,会出现以下错误:

重试策略是 RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS) 2013-06-03 23:57:06,956 [main] ERROR org.apache.pig.Main - ERROR 2999: Unexpected internal error。创建数据存储失败

4

2 回答 2

3

此错误表示 Pig 无法连接到 Hadoop 来运行作业。你说你已经下载了 Hadoop——你安装了吗?如果你已经安装了它,你有没有根据它的文档启动它——你有没有运行bin/start-all.sh脚本?Using-x local告诉 Pig 使用本地文件系统而不是 HDFS,但它仍然需要一个正在运行的 Hadoop 实例来执行执行。在尝试运行 Pig 之前,请按照 Hadoop 文档设置您的本地“集群”并确保您的NameNodeDataNodes 等已启动并运行。

于 2013-06-04T15:15:49.907 回答
0

当 hadoop 和 pig 无法相互通信时发生 2043 错误。

处理 tar.gz 文件时,切勿右键单击 --> 在此处提取。

提取它们时,您总是在终端上执行 tar -xzvf *.tar.gz 。

我注意到当您右键单击猪时,猪没有正确安装。.tar.gz 文件并在此处选择提取。做个 tar -xzvf pig 就好了。来自终端的 .tar.gz。

在执行 pig -x 本地命令之前,请确保您正在运行 Hadoop。

如果你想从 grunt> 提示符运行 *.pig 文件,使用: grunt> exec *.pig

如果你想在 grunt> 提示符之外运行 pig 文件,使用: $ pig -x local *.pig

于 2015-08-02T10:23:40.777 回答