我是第一次使用EMR / Hadoop用户并第一次使用Apache Nutch用户。我正在尝试使用Apache Nutch 2.1进行一些屏幕抓取。我想在hadoop上运行它,但不想设置我自己的集群(一次一个学习曲线)。所以我正在使用EMR。我希望S3用于输出(以及我需要的任何输入)。
我一直在阅读Nutch的设置维基:
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上执行此操作?另外,我在命令行中指定什么才能使我的最终输出变为S3而不是HDFS?
答案 0 :(得分:0)
首先,使用GUI无法实现这一点。相反,我得到了使用AWS Java API的nutch工作。
我的种子文件位于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)));