gpt4 book ai didi

spring - 在单个Hadoop节点上连接Hadoop Jobfactorybean,多个Reducer

转载 作者:行者123 更新时间:2023-12-02 20:12:30 25 4
gpt4 key购买 nike

我要实现的目标:

我已经设置了一个包含Hadoop任务的Spring Batch作业来处理一些较大的文件。
为了使多个Reducers运行,我需要使用setNumOfReduceTasks设置Reducers的数量。我正在尝试通过JobFactorybean进行设置。

我在类路径中的bean配置:/META-INF/spring/batch-common.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="jobFactoryBean" class="org.springframework.data.hadoop.mapreduce.JobFactoryBean" p:numberReducers="5"/>
<bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean" />
<bean id="transactionManager" class="org.springframework.batch.support.transaction.ResourcelessTransactionManager"/>
<bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher" p:jobRepository-ref="jobRepository" />
</beans>

通过以下方式包含XML:
    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<context:property-placeholder location="classpath:batch.properties,classpath:hadoop.properties"
ignore-resource-not-found="true" ignore-unresolvable="true" />


<import resource="classpath:/META-INF/spring/batch-common.xml" />
<import resource="classpath:/META-INF/spring/hadoop-context.xml" />
<import resource="classpath:/META-INF/spring/sort-context.xml" />

</beans>

我正在通过jUnit测试获取bean
    JobLauncher launcher = ctx.getBean(JobLauncher.class);
Map<String, Job> jobs = ctx.getBeansOfType(Job.class);
JobFactoryBean jfb = ctx.getBean(JobFactoryBean.class);

jUnit测试因错误而停止:
No bean named '&jobFactoryBean' is defined

因此:JobFactoryBean未加载,但其他已正确加载且没有错误。

没有线
JobFactoryBean jfb = ctx.getBean(JobFactoryBean.class);

项目测试运行,但是每个作业只有一个Reducer。

方法
ctx.getBean("jobFactoryBean");

返回Hadoop作业。我希望那里有factoryBean ...

为了测试它,我扩展了Reducer的构造函数以记录每个Reducer的创建,以便在生成一个Reducer时得到通知。到目前为止,我只在日志中获得一个条目。

我有2个VM,每个VM分配了2个内核,每个RAM 2 GB,并且我正在尝试排序一个75MB的文件,其中包含来自Gutenberg项目的多本书。

编辑:

我尝试过的另一件事是通过属性设置hadoop作业中的reducers数量,而没有结果。
<job id="search-jobSherlockOk" input-path="${sherlock.input.path}"
output-path="${sherlockOK.output.path}"
mapper="com.romediusweiss.hadoopSort.mapReduce.SortMapperWords"
reducer="com.romediusweiss.hadoopSort.mapReduce.SortBlockReducer"
partitioner="com.romediusweiss.hadoopSort.mapReduce.SortPartitioner"
number-reducers="2"
validate-paths="false" />
  • 在两个节点上的mapreduce-site.xml中的设置:
    <property>
    <name>mapred.tasktracker.reduce.tasks.maximum</name>
    <value>10</value>
    </property>

  • ...以及原因:

    我想复制以下博客文章的示例:
    http://www.philippeadjiman.com/blog/2009/12/20/hadoop-tutorial-series-issue-2-getting-started-with-customized-partitioning/

    我需要在同一台计算机或完全分布式的环境中使用不同的Reducer来测试Partitioner的行为。第一种方法会更容易。

    附言:具有较高声誉的用户可以创建标签“spring-data-hadoop”吗?谢谢!

    最佳答案

    在还发布了该问题的Spring论坛上回答了该问题(建议将其用于Spring Data Hadoop问题)。

    完整的答案是http://forum.springsource.org/showthread.php?130500-Additional-Reducers,但简而言之, reducer 的数量由输入拆分的数量驱动。参见http://wiki.apache.org/hadoop/HowManyMapsAndReduces

    关于spring - 在单个Hadoop节点上连接Hadoop Jobfactorybean,多个Reducer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12490889/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com