2014-11-26 12 views
0

돼지를 사용하는 그루트 (Grunt)에서 자바 기능을 호출하려고 시도하고 있습니다. 나는 Hadoop에 대해 상당히 새롭기 때문에 몇 년 안에 Linux 나 Java를 사용하지 않았다 (나는 .Net 소녀). 제공된 PiggyBank.jar의 기능을 사용했습니다. 이클립스에서 간단한 테스트 클래스를 작성하고 jar 파일을 그 루트 (Grunt)의 루트 폴더에 내 보냈다. 다음 명령을 실행하여 아래 오류를 얻습니다.Apache Pig에서 UDF 실행

grunt> Register KellyProject1.jar 
grunt> grades = load 'grades.txt' as (studentName:charArray, <etc>); 
grunt> grades2 = foreach grades generate studentName, hadoop.Upper(studentName); 

오류 org.apache.pig.tools.grunt.Grunt - ERROR 1070 : hadoop.Upper 사용하여 수입을 확인할 수 없습니다 : [java.lang의, org.apache.pig.builtin, 조직을... . apache.pig.impl.builtin]

Upper.java : 처음에는

package hadoop; 

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

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); 
      String str = "something"; 
      return str.toUpperCase(); 
     }catch(Exception e){ 
      throw new IOException("Caught exception processing input row ", e); 
     } 
    } 
} 

나는 정규 수업 시간에 "안녕하세요!"간단한 정적 인 방법을 쓴 후 나는 확장이 온라인으로 모든 예제를 보았다 EvalFunc 그래서 자바 코드를 복사했습니다. 또한 어쩌면 내가 제대로 jar 파일을 생성/내보내기하는 방법을 이해할 수없는 경우 궁금해? Eclipse가 자동으로 빌드되도록 설정되었으므로 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 내보내기로 이동하여 jar 파일을 내 Cloudera 폴더에 넣습니다. Visual Studio와 dll에서 내 머리를 돌리는 것은 어렵습니다.

+2

글쎄,이 코드는 완벽하게 괜찮아요. 나는 커맨드 라인을 재시작하고 툴툴 거리는 소리를 내며 작동했다. 내 컴퓨터를 창밖으로 던지고 싶습니다. – Kelly

답변

0

Windows 플랫폼에서 실행되는 동안. ADMIN 모드에서 cmd 프롬프트를여십시오. !! 사용자 이름에 공백이 포함되지 않았는지 확인하십시오.

1

돼지에 'hadoop'단어가 없어도 보통이 단어에 오류가 발생합니다. 확실하게 jar를 등록하는 것이 옳은 단계이지만, 한 가지 더 중요한 단계는 돼지에게 UDF (귀하의 경우에는 Java 함수)로 사용하는 클래스에 대한 완전한 자격을 갖춘 이름을 알려주는 것입니다. 두 가지 경우가 있습니다.

사례 1 : 사용자가 직접 UDF를 정의한 경우입니다. 당신은 하둡 패키지에 돼지 UDF를 기존의 이미 사용하려고하면이의 경우 :

grunt> Register KellyProject1.jar 
grunt> DEFINE YourUdfName FullyQualifiedname; 
grunt> grades = load 'grades.txt' as (studentName:charArray, <etc>); 
grunt> grades2 = foreach grades generate studentName, YourUdfName(studentName); 

그냥 확인 항아리를 만드는 당신은 당신이 FullyQualified 이름을 사용

Case2하는 클래스를 포함해야합니다 등록하는 .

grunt> grades2 = foreach grades generate studentName,UPPER(studentName); 

두번째 경우는 하둡 패키지로 제공되는 붙박이 돼지 기능을 사용하려고 귀하의 경우이다.

따라서 내장 된 PIG 기능을 위해 우리는 완전한 이름을 사용할 필요가 없습니다.