2

所以,

import java.io.IOException;
import java.util.Properties;

import org.apache.pig.ExecType;
import org.apache.pig.PigServer;


public class CommitPig {

    public static void main(String[] args)
    {
        try{
        String pigScript = "category_count.pig";
        pigScriptReader psReader = new pigScriptReader();
        psReader.readPigScript( pigScript );
        } catch ( IOException e){
            e.printStackTrace();
        }

        try{
            Properties props = new Properties();
            props.setProperty("fs.default.name", "<server id>");
            props.setProperty("mapred.job.tracker.http.address", "<server id>");
            props.setProperty("<server id> ");
            PigServer pigServer = new PigServer( ExecType.MAPREDUCE, props); 
            runIdQuery(pigServer,"<input location>");

        } catch ( Exception e){
            e.printStackTrace();
        }

    }

    private static void runIdQuery(PigServer pigServer, String inputFile) throws IOException {

        pigServer.registerQuery("A = load '" + inputFile + "' using PigStorage(' ');");
        pigServer.registerQuery("B = filter A BY $0 == 'testing';");
        pigServer.store("B","id.out");

    }
}

这是我目前正在运行的代码。

我正在尝试使用 Java 从本地连接到集群服务器,以运行 pig 查询。

它给了我错误

ERROR 4010: Cannot find hadoop configurations in classpath (neither hadoop-site.xml nor core-site.xml was found in the classpath)

我尝试按照 apache 的说明在集群中设置类路径。

在 Mapreduce 模式下运行 Pig 脚本 要在 mapreduce 模式下运行 Pig 脚本,请执行以下操作:

  1. 将 PIG_CLASSPATH 环境变量设置为集群配置目录的位置(包含 core-site.xml、hdfs-site.xml 和 mapred-site.xml 文件的目录): export PIG_CLASSPATH=/mycluster/conf

  2. 将 HADOOP_CONF_DIR 环境变量设置为集群配置目录的位置: export HADOOP_CONF_DIR=/mycluster/conf

但是我仍然遇到同样的错误。我在这里理解有什么问题吗?有人可以帮我理解这里到底是什么问题以及如何解决它?

谢谢 !

4

6 回答 6

2

正在做

export HADOOP_HOME=/path/to/hadoop

运行猪再次为我修复了它。

于 2014-06-03T12:20:42.727 回答
1

试图:

HADOOP_CLASSPATH=/mycluster/conf

你也可以检查你的 hadoop-env.sh 脚本,看看类路径设置在那里。

于 2013-07-16T20:55:36.923 回答
1

您必须在属性文件中将属性“pig.use.overriden.hadoop.configs”设置为 true,PigServer 将使用文件中定义的属性,而不是在类路径中查找配置文件

于 2015-03-30T09:41:18.373 回答
1

请添加 conf 文件夹作为 -classpath 的参数。那应该工作

 -classpath /home/nubes/pig/conf:/home/nubes/hadoop/conf;
于 2013-07-16T23:43:17.087 回答
0

我在 maven 的 pom.xml 中包含了 hadoop 配置文件(core-site.xml 和 mapred-site.xml)。

<build>
...
<resources>
<resource>
<director>[hadoop-directory]/etc/hadoop</directory>
<includes>
<include>core-site.xml</include>
<include>mapred-site.xml</include>
</includes>
</resource>
</resources>
...
</build>
于 2017-05-22T06:31:08.120 回答
0

导出 HADOOP_CLASSPATH=$HADOOP_HOME/etc/hadoop

于 2017-03-24T18:55:44.583 回答