복붙노트

[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. ==============================

    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 (예)를 사용할 수 있습니다.

  2. from https://stackoverflow.com/questions/24699305/how-to-read-nutch-content-from-java-scala by cc-by-sa and MIT license