Pig 错误:无法找到或加载主类 org.apache.pig.Main

Posted

技术标签:

【中文标题】Pig 错误:无法找到或加载主类 org.apache.pig.Main【英文标题】:Pig Error: Could not find or load main class org.apache.pig.Main 【发布时间】:2015-01-04 18:10:39 【问题描述】:

我是 PIG 的初学者。

我根据 WIKI 编写了一个程序,将文件中的单词转换为大写。

--cat UPPER.java

package com.bigdata.myUdf;

import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
import org.apache.pig.impl.util.WrappedIOException;

public class UPPER extends EvalFunc<String> 

public String exec(Tuple input) throws IOException 
    if (input == null || input.size() == 0)
    return null;
    try
    String str = (String)input.get(0);
    return str.toUpperCase();
    catch(Exception e)
    throw WrappedIOException.wrap("Caught exception processing input row ", e);
    
    


-- cat /home/hduser/lab/mydata/myscript.pig

REGISTER /home/hduser/software/myUdfs/UPPER.jar
std_det = LOAD '/pigdata/udf1.txt' USING PigStorage(',') as (name:chararray);
B = FOREACH std_det GENERATE com.bigdata.myUdf.UPPER(name);
dump B;

但是当我运行它时,我得到了错误。

 java -cp com.bigdata.myUdf.UPPER.jar org.apache.pig.Main -x local /home/hduser/lab/mydata/myscript.pig

错误

Error: Could not find or load main class org.apache.pig.Main

猫.bashrc

export PIG_INSTALL=/home/hduser/software/pig
export PATH="$PATH:$PIG_INSTALL/bin"
export PIG_CLASSPATH=$HADOOP_CONF_DIR:$PIG_INSTALL:.
export CLASSPATH=.:$PIG_CLASSPATH

猪脚本位于: /home/hduser/lab/mydata/myscript.pig

JAR 文件位于: /home/hduser/software/myUdfs/UPPER.jar

请帮助我了解我做错了什么。提前致谢。 在遵循 Shivashakti 的指示之后。程序运行了,但没有给出任何输出。

 pig -x local myScript.pig

 15/01/05 04:47:57 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL
15/01/05 04:47:57 INFO pig.ExecTypeProvider: Picked LOCAL as the ExecType
2015-01-05 04:47:57,920 [main] INFO  org.apache.pig.Main - Apache Pig version 0.14.0 (r1640057) compiled Nov 16 2014, 18:02:05
2015-01-05 04:47:57,921 [main] INFO  org.apache.pig.Main - Logging error messages to:       /home/hduser/lab/piglog/pig_1420462077918.log
2015-01-05 04:47:57,959 [main] INFO  org.apache.hadoop.conf.Configuration.deprecation - user.name is deprecated. Instead, use mapreduce.job.user.name
2015-01-05 04:47:58,314 [main] INFO  org.apache.hadoop.conf.Configuration.deprecation - fs.default.name is deprecated. Instead, use fs.defaultFS
2015-01-05 04:47:58,315 [main] INFO  org.apache.hadoop.conf.Configuration.deprecation - mapred.job.tracker is deprecated. Instead, use mapreduce.jobtracker.address
2015-01-05 04:47:58,318 [main] INFO  org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at:   file:///
2015-01-05 04:47:58,463 [main] INFO  org.apache.hadoop.conf.Configuration.deprecation -   fs.default.name is deprecated. Instead, use fs.defaultFS
2015-01-05 04:47:59,070 [main] INFO  org.apache.hadoop.conf.Configuration.deprecation - fs.default.name is deprecated. Instead, use fs.defaultFS
2015-01-05 04:47:59,227 [main] INFO  org.apache.pig.Main - Pig script completed in 2 seconds and 505 milliseconds (2505 ms)

【问题讨论】:

java -cp 我猜不是必需的。您不是在执行嵌入在 java 中的猪,而是需要执行 UDF。试试 pig -x local file.pig 【参考方案1】:

您可以按照以下步骤操作吗?

1.从以下链接下载3个jar文件(pig-0.11.1.jar、hadoop-common-0.21.0.jar和piggybank.jar)

http://www.java2s.com/Code/Jar/p/Downloadpig0111jar.htm
http://www.java2s.com/Code/Jar/h/Downloadhadoopcommon0210jar.htm
http://www.java2s.com/Code/Jar/p/Downloadpiggybankjar.htm

2。将以上 3 个 jar 文件全部设置到你的类路径

export CLASSPATH=/tmp/pig-0.11.1.jar:/tmp/hadoop-common-0.21.0.jar:/tmp/piggybank.jar

3。从当前目录创建目录名称“com/bigdata/myUdf/”

>>mkdir -p com/bigdata/myUdf/

4.编译 UPPER.java 文件并确保 JAVA_HOME 设置正确,并且所有上述三个 jar 文件都包含在类路径中,否则会出现编译问题

>>javac UPPER.java

5.将编译好的 UPPER.class 文件移动到“com/bigdata/myUdf/”文件夹

>>mv UPPER.class com/bigdata/myUdf/

6.创建一个jar文件名UPPER.jar

>>jar -cvf UPPER.jar com/

7.现在将 UPPER.jar 包含到您的 pig 脚本中并运行以下命令

   >>pig -x local myscript.pig 

运行上述命令后,您将获得实际输出。

示例输入

hello
world

myscript.pig

REGISTER UPPER.jar; 
std_det = LOAD 'input' USING PigStorage(',') as (name:chararray);
B = FOREACH std_det GENERATE com.bigdata.myUdf.UPPER(name);
dump B;

输出:

(HELLO)
(WORLD)

示例命令:

$ ls
UPPER.java      input   myscript.pig

$ mkdir -p com/bigdata/myUdf/
$ javac UPPER.java
$ mv UPPER.class com/bigdata/myUdf/
$ jar -cvf UPPER.jar com/
$ pig -x local myscript.pig 

【讨论】:

嗨 Sivasakthi,感谢您的宝贵时间。现在程序不会抱怨缺少罐子......但它没有给出任何有效的输出。我已经发布了上面的输出。 对不起,我忘记了猪脚本中的 DUMP .. 它现在工作正常。感谢所有的帮助。【参考方案2】:

错误表明 apache jar 不在类路径中。 -cp com.bigdata.myUdf.UPPER.jar 不包括所需的罐子。它只包括“UPPER.jar”。你可以看看如何在类路径here中正确包含所有需要的jar

附:我认为您应该从命令行使用 pig 命令,而不是按照您的方式执行它。但我自己没有用过,所以只是猜测。

【讨论】:

感谢您的宝贵时间。

以上是关于Pig 错误:无法找到或加载主类 org.apache.pig.Main的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse“错误:无法找到或加载主类”

IntelliJ IDEA 错误:无法找到或加载主类 GradleStart

Gradle(包装器)+ STS + Spring Boot:错误:无法找到或加载主类 1.1,

错误:无法找到或加载主类 sample.Main

Xcode 构建失败:无法找到或加载主类

“错误:无法找到或加载主类”JavaFX终端