2015-01-12 3 views
1

다음과 같은 경우에 도움을 요청하고 싶습니다.Flume - TwitterSource 언어 필터

(클라우 데라) I 현재 클라우 데라 CDH 5.1.2를 사용하고 있는데, I는 그것이 다음 porsts에서 설명하는 바와 같이 수조를 이용하여 트위터 데이터를 수집하려고 :

나는 소스를 다운로드 pom.xml 파일의 버전을 업데이트 한 후 수로-소스를 재건 :

<flume.version>1.5.0-cdh5.1.2</flume.version> 
<hadoop.version>2.3.0-cdh5.1.2</hadoop.version> 

완벽하게 작동했습니다.

그 후 특정 언어의 트윗을 캡처하기 위해 "언어"필터를 추가하고 싶었습니다. 이를 위해, 나는 이런 식으로 어떻게 든 FilterQuery.language 메서드를 호출 TwitterSource.java 수정 : 나는 twitter4j 스트림 버전 3.0.6을 사용하기 위해 노력하고있어

FilterQuery query = new FilterQuery();
...
if (languages.length != 0) {
query.language(languages);
}

. pom.xml에서 업데이트했습니다 :

<!-- For the Twitter API --> 
<dependency> 
<groupId>org.twitter4j</groupId> 
<artifactId>twitter4j-stream</artifactId> 
<version>3.0.6</version> 
</dependency> 

이 설정으로 jar (mvn 패키지)를 다시 작성했습니다. 내 에이전트를 시작하면

, 나는 다음과 같은 예외 (NoSuchMethodError)를 얻을 :

Unable to start EventDrivenSourceRunner: { source:com.cloudera.flume.source.TwitterSource{name:Twitter,state:IDLE} } - Exception follows. java.lang.NoSuchMethodError: twitter4j.FilterQuery.language([Ljava/lang/String;)Ltwitter4j/FilterQuery; at com.cloudera.flume.source.TwitterSource.start(TwitterSource.java:165) at org.apache.flume.source.EventDrivenSourceRunner.start(EventDrivenSourceRunner.java:44) at org.apache.flume.lifecycle.LifecycleSupervisor$MonitorRunnable.run(LifecycleSupervisor.java:251) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745)

내가 확인하고, twitter4j 스트림이 버전의 언어 방법을 포함

  • github.com /yusuke/twitter4j/blob/3.0.6/twitter4j-stream/src/main/java/twitter4j/FilterQuery.java

내가 무슨 일을하고 있는가? 사전에

감사합니다,

피터

답변

1

마지막으로 나는이 문제를 해결할 수있었습니다. 그래서 여기에 같은 문제에 직면 해있는 사람들에 대한 해결책이 있습니다.

처음 (위의 경우 원래 게시물에서) 생성 된 jar 파일을 /var/lib/flume-ng/plugins.d/twitter-streaming/lib/에 넣고 Cloudera Manager 구성에서이 위치를 사용하도록 설정했습니다.

이 경우 CM은이 디렉토리를 러너 파일의 클래스 경로 (및 소포 디렉토리 다음)에 배치했습니다.그래서 클래스 경로에있는 디렉토리 순서는 다음과 같이 보았다 :

  • /var/lib/flume-ng/plugins.d/twitter-streaming/lib/*

    • /opt/cloudera/parcels/CDH-5.1.2-1.cdh5.1.2.p0.3/lib/flume-ng/lib/*

    • 는 불행하게도 twitter4j 스트림-3.0.3.jar와 twitter4j-코어 -가 있었다 3.0.3.jar을 parcel 디렉토리에 넣고 flume이 3.0.6 대신 그 파일을 사용하려고 시도했을 때 FilterQuery.language은 분명히 존재하지 않습니다.

      그래서 필자는이 소포를 소포 목록에서 삭제했으며 현재는 정상적으로 작동합니다.

    0

    나는 cdh3 이것을 시도하고 저와 잘 일했다. 시스템 시간이 현재 시간으로 설정되어야한다는 것을 알아 채 셨습니다. 귀하의 경우, FilterQuery 클래스에서 Language 메서드를 찾고 있다고 생각합니다.