2

私は初めての EMR/Hadoop ユーザーであり、初めての Apache Nutch ユーザーです。Apache Nutch 2.1 を使用してスクリーン スクレイピングを実行しようとしています。Hadoop で実行したいのですが、独自のクラスターをセットアップしたくありません (一度に 1 つの学習曲線)。だから私はEMRを使っています。そして、S3を出力(および必要な入力)に使用したいと思います。

Nutch のセットアップ wiki を読んでいます。

http://wiki.apache.org/nutch/NutchTutorial
http://wiki.apache.org/nutch/NutchHadoopTutorial

そして、ナッツの基本を理解するのに非常に役立ちました。ソースから Nutch をビルドし、いくつかの正規表現を事前に構成してから、Hadoop に適した jar を残すことができることに気付きました。

$NUTCH_HOME/runtime/deploy/apache-nutch-2.1.job

ほとんどのチュートリアルは、クロール コマンドの実行で終了します。Hadoop の例では、次のようになります。

hadoop jar nutch-${version}.jar org.apache.nutch.crawl.Crawl urls -dir crawl -depth 3 -topN 5

ローカル展開の例では、次のようになります。

bin/nutch crawl urls -dir crawl -depth 3 -topN 5

私の質問は次のとおりです。apache-nutch-2.1.job を EMR で実行するにはどうすればよいですか? 私がそれを渡す引数は何ですか?上記の Hadoop クロールの例では、「urls」ファイルはすでにシード URL を持つ hdfs にあります。EMR でこれを行うにはどうすればよいですか? また、最終出力を HDFS ではなく S3 にするには、コマンドラインで何を指定すればよいですか?

4

1 に答える 1

0

まず、これは GUI を使用して実際に行うことはできません。代わりに、AWS Java API を使用してうまくいきました。

シード ファイルは s3 にあり、出力を s3 に戻します。

dsdistcp jar を使用して、データを s3 から hdfs にコピーします。

これが私の基本的なステップ構成です。MAINCLASS は、ナッチ クロールのパッケージの詳細になります。org.apach.nutch.mainclass のようなもの。

    String HDFSDIR = "/user/hadoop/data/";

    stepconfigs.add(new StepConfig()
            .withName("Add Data")
            .withActionOnFailure(ActionOnFailure.TERMINATE_JOB_FLOW)
            .withHadoopJarStep(new HadoopJarStepConfig(prop.getProperty("S3DISTCP"))
            .withArgs("--src", prop.getProperty("DATAFOLDER"), "--dest", HDFSDIR)));

    stepconfigs.add(new StepConfig()
            .withName("Run Main Job")
            .withActionOnFailure(ActionOnFailure.CONTINUE)
            .withHadoopJarStep(new HadoopJarStepConfig(nutch-1.7.jar)
            .withArgs("org.apache.nutch.crawl.Crawl", prop.getProperty("CONF"), prop.getProperty("STEPS"), "-id=" + jobId)));


    stepconfigs.add(new StepConfig()
            .withName("Pull Output")
            .withActionOnFailure(ActionOnFailure.TERMINATE_JOB_FLOW)
            .withHadoopJarStep(new HadoopJarStepConfig(prop.getProperty("S3DISTCP"))
            .withArgs("--src", HDFSDIR, "--dest", prop.getProperty("DATAFOLDER"))));

    new AmazonElasticMapReduceClient(new PropertiesCredentials(new File("AwsCredentials.properties")), proxy ? new ClientConfiguration().withProxyHost("dawebproxy00.americas.nokia.com").withProxyPort(8080) : null)
                .runJobFlow(new RunJobFlowRequest()
                .withName("Job: " + jobId)
                .withLogUri(prop.getProperty("LOGDIR"))
                .withAmiVersion(prop.getProperty("AMIVERSION"))
                .withSteps(getStepConfig(prop, jobId))
                .withBootstrapActions(getBootStrap(prop))
                .withInstances(getJobFlowInstancesConfig(prop)));
于 2013-08-27T18:44:38.683 に答える