领略 MapReducer
当前位置:以往代写 > 其他教程 >领略 MapReducer
2019-06-14

领略 MapReducer

领略 MapReducer


本教程中的代码分为 3 个部门:

表明 SalesMapper 类

表明 SalesCountryReducer 类

表明 SalesCountryDriver 类

SalesMapper类的说明

在本节中,我们将相识 SalesMapper 类的实现。

我们首先指定类的包名称。 SalesCountry 就是这个示例中利用的包名。请留意编译的输出,SalesMapper.class 将进入目次并定名这个软件包名称:SalesCountry.

其次,我们导入库软件包。

以下快照显示实现 SalesMapper 类 

明确 MapReducer

代码表明:

1. SalesMapper 类界说

public class SalesMapper extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> {…}

每一个 mapper 类必需从 MapReduceBase 类举办扩展,它必需实现 Mapper 接口。

2. 界说 'map' 函数

1

2

3

4

publicvoidmap(LongWritable key,

         Text value,

OutputCollector<Text, IntWritable> output,

Reporter reporter) throwsIOException

Mapper类的主要部门是接管四个参数的 “map()” 要领。

每次挪用 'map()' 要领, 一个键值 key-value 对 ('key' 和 'value' 在代码里) 被通报。

'map()' 要领开始被接管拆分输入文本作为一个参数,并利用分词来拆分这些行成词。

1

2

String valueString = value.toString();

String[] SingleCountryData = valueString.split(",");

这里,“,” 被用作脱离符。

在这之后,利用记录在数组  'SingleCountryData' 中的第七索引,其值为 '1'.

        output.collect(new Text(SingleCountryData[7]), one);

我们在选择第7索引记录,因为我们需要的国度数据,它位于数组 'SingleCountryData' 的第七索引。

请留意,我们输入的数据是下面的名目 (Country 在索引的位置为:7,  0 是开始的索引)-

Transaction_date,Product,Price,Payment_Type,Name,City,State,Country,Account_Created,Last_Login,Latitude,Longitude

mapper的输出利用的是 'OutputCollector' 的 'collect()' 要领的键值对.

SalesCountryReducer 类的说明

在本节中,我们将相识 SalesCountryReducer 类的实现。

1. 我们首先为类指定包的名称。SalesCountry 是包的名称。请留意编译的输出, SalesCountryReducer.class 将进入定名这个软件包名称目次: SalesCountry.

其次,我们导入库软件包。

以下快照显示实现 SalesCountryReducer 类

#p#分页标题#e#

明确 MapReducer

代码表明:

1. SalesCountryReducer 类界说 –

public class SalesCountryReducer extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> {

此处,前两个数据范例, 'Text' 和 'IntWritable' 是输入键值的数据范例到reducer。

映射器的输出的形式<CountryName1, 1>, <CountryName2, 1>.映射器的输出被输入到reducer。所以,以共同其数据范例, Text 和 IntWritable 数据在这里输入被利用。

最后两个数据范例,'Text' 和 'IntWritable' 是由 reducer 的键 – 值对的形式生成的输出的数据范例。

每个 reducer 类必需从MapReduceBase类举办扩展,它必需实现 Reducer 接口。

2. Defining 'reduce' function-

1

2

3

publicvoidreduce( Text t_key,

             Iterator<IntWritable> values,  OutputCollector<Text,IntWritable> output,

             Reporter reporter) throwsIOException {

输入到 reduce() 要领是在具有多个值的列表中选择一个键。

譬喻,在我们的示例中,这将是 –

<United Arab Emirates, 1>, <United Arab Emirates, 1>, <United Arab Emirates, 1>,<United Arab Emirates, 1>, <United Arab Emirates, 1>, <United Arab Emirates, 1>.

这赋予 reducer 作为 <United Arab Emirates, {1,1,1,1,1,1}>

因此,接管这种形式参数,前两个数据范例的利用,即 Text 和 Iterator<IntWritable>. Text是一个数据范例的键 和 Iterator<IntWritable>为对付键的值的列表的数据范例。

接下来的参数的范例是 OutputCollector<Text,IntWritable> 它收集 reducer 阶段的输出。

reduce() 要领开始通过复制键值和初始化频率计数为0。

        Text key = t_key;
        int frequencyForCountry = 0;

然后,利用 “while” 轮回,我们通过与键关联的值列表轮回,并通过总结所有计较的值。

1

2

3

4

5

6

while(values.hasNext()) {

           // replace type of value with the actual type of our value

           IntWritable value = (IntWritable) values.next();

           frequencyForCountry += value.get();

           

       }

此刻,功效中的键获得的频率计数输出到收集器。

下面的代码执行这个 –

        output.collect(key, new IntWritable(frequencyForCountry));

SalesCountryDriver类的说明

在本节中,我们将相识 SalesCountryDriver 类实现。

#p#分页标题#e#

1. 我们首先为类指定包的名称。 SalesCountry 是这里利用的包名。请留意编译的输出, SalesCountryDriver.class 将进入定名这个包名称的目次: SalesCountry.

这里一行指定是包名称后头的代码是导入库软件包。

明确 MapReducer

2. 界说一个用于建设一个新的客户端事情,设置 Mapper及Reducer 类工具驱动措施类。

该驱动措施类认真配置我们的 MapReduce 功课在 Hadoop 运行。 在这个类中,我们指定功课名称,输入/输出,mapper 和 reducer 类名称的数据范例。明确 MapReducer

3. 在下面的代码片断中,我们配置这是用来输入数据集消费和出产输出,别离输入和输出目次。

arg[0] 和 arg[1] 是通过 MapReduce 的实际操纵,也就是赋予在呼吁行参数执行呼吁,

$HADOOP_HOME/bin/hadoop jar ProductSalePerCountry.jar /inputMapReduce /mapreduce_output_sales

明确 MapReducer


4. 触发我们的功课

下面的代码开始执行 MapReduce 功课

try{
           // Run the job
           JobClient.runJob(job_conf);
       } catch(Exception e) {
           e.printStackTrace();
       }

    关键字:

在线提交作业