我是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 -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'???我认为他们都应该进入猪-0.11.1,所以我可以做$ pig -x local wordcount.pig,但我不确定。
2。 为什么我不能像我尝试的那样逐行运行脚本? 我在load语句中指定了文件'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:意外的内部错误。无法创建DataStorage
答案 0 :(得分:3)
此错误表示Pig无法连接到Hadoop以运行该作业。你说你已经下载了Hadoop - 你安装了吗?如果您已安装它,是否已按照其文档启动它 - 您是否运行了bin/start-all.sh
脚本?使用-x local
告诉Pig使用本地文件系统而不是HDFS,但它仍然需要一个正在运行的Hadoop实例来执行。在尝试运行Pig之前,请按照Hadoop文档设置本地“群集”,确保您的NameNode
,DataNode
等已启动并运行。
答案 1 :(得分:0)
永远不要右键单击 - >在处理tar.gz文件时提取这里。
U shud在提取它们时总是在终端上执行tar -xzvf * .tar.gz。
我注意到当你右键点击猪。 .tar.gz文件并且在这里选择提取时,猪没有正确安装。从终端做一个tar -xzvf猪。 .tar.gz很不错。
在执行pig -x local命令之前,确保你正在运行Hadoop。
如果你想从grunt>运行* .pig文件提示,使用: 咕噜> exec * .pig
如果你想在grunt之外运行猪文件>提示,使用: $ pig -x local * .pig