[HADOOP] 어떻게 자바 / 스칼라에서 Nutch 내용을 읽어?
HADOOP어떻게 자바 / 스칼라에서 Nutch 내용을 읽어?
내가 Jsoup를 사용하여 웹 사이트의 HTML 데이터를 분석하는 자바 (스칼라) 프로그램을 사용하고자하는 동안 나는, (다른 모든 것들의 분리를 실행하는 프로세스로) 일부 웹 사이트를 크롤링 Nutch를 사용하고 있습니다.
나는 (단지 개별 지침을 일했다 실행, 스크립트없이) 튜토리얼을 따라 일을 Nutch을 가지고, 및 I / <시간> / 컨텐츠 / 부품-00000 디렉토리가 크롤링 / 세그먼트의 웹 사이트 'HTML을 저장하는 것 같아요.
문제는 내가 실제로 자바 / 스칼라 프로그램에서 웹 사이트 데이터 (URL 및 HTML)을 읽는 방법을 알아낼 수 있다는 것입니다. 나는이 문서를 읽을 수 있지만 내가 Hadoop을 사용한 적이 이후 조금 압도 찾을 수 있습니다.
내 환경에 예제 코드를 적응했는데, 이것은 내가 (대부분 guesswprk에 의한)에 도착 것입니다 :
val reader = new MapFile.Reader(FileSystem.getLocal(new Configuration()), ".../apache-nutch-1.8/crawl/segments/20140711115438/content/part-00000", new Configuration())
var key = null
var value = null
reader.next(key, value) // test for a single value
println(key)
println(value)
나는 그것을 실행할 때,이 예외를 얻고있다 :
Exception in thread "main" java.lang.NullPointerException
at org.apache.hadoop.io.SequenceFile$Reader.next(SequenceFile.java:1873)
at org.apache.hadoop.io.MapFile$Reader.next(MapFile.java:517)
나는 내가 그것을 통과해야 하죠 무엇을 생성자 매개 변수, 특히, MapFile.Reader와 함께 작동하는 방법을하지 확신합니다. 어떤 구성 객체는 내가 전달 해야하는 건가요? 즉, 올바른 파일 시스템인가? 그리고 데이터가 내가 관심이있는 파일이다?
해결법
-
==============================
1.규모 :
규모 :
val conf = NutchConfiguration.create() val fs = FileSystem.get(conf) val file = new Path(".../part-00000/data") val reader = new SequenceFile.Reader(fs, file, conf) val webdata = Stream.continually { val key = new Text() val content = new Content() reader.next(key, content) (key, content) } println(webdata.head)
자바:
public class ContentReader { public static void main(String[] args) throws IOException { Configuration conf = NutchConfiguration.create(); Options opts = new Options(); GenericOptionsParser parser = new GenericOptionsParser(conf, opts, args); String[] remainingArgs = parser.getRemainingArgs(); FileSystem fs = FileSystem.get(conf); String segment = remainingArgs[0]; Path file = new Path(segment, Content.DIR_NAME + "/part-00000/data"); SequenceFile.Reader reader = new SequenceFile.Reader(fs, file, conf); Text key = new Text(); Content content = new Content(); // Loop through sequence files while (reader.next(key, content)) { try { System.out.write(content.getContent(), 0, content.getContent().length); } catch (Exception e) { } } } }
양자 택일로, 당신은 org.apache.nutch.segment.SegmentReader (예)를 사용할 수 있습니다.
from https://stackoverflow.com/questions/24699305/how-to-read-nutch-content-from-java-scala by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 원격 이클립스 디버깅 하둡 (0) | 2019.10.13 |
---|---|
[HADOOP] HDFS : 파일 업로드 후 배포되지 않습니다 (0) | 2019.10.13 |
[HADOOP] 얌 하둡을 설치 오류를 찾을 수 없습니다 CentOS는 (0) | 2019.10.13 |
[HADOOP] Nutch - 가져 오기 오류 : JAVA_HOME이 설정되어 있지 않습니다. 크롤링하려고 할 때 (0) | 2019.10.13 |
[HADOOP] 피클과 sys.stdin를 사용하여 하둡에서 defaultdict로드 (0) | 2019.10.13 |