【问题标题】:How to select the optimal key in map reduce?如何在map reduce中选择最优key?
【发布时间】:2023-04-06 22:42:01
【问题描述】:

我正在处理股票交易日志文件。每行表示具有 20 个制表符分隔值的贸易交易。我正在使用 hadoop 来处理这个文件并对交易进行一些基准测试。现在对于每一行,我必须执行单独的基准计算,因此在 map-reduce 中不需要 reduce 函数。为了执行每行的基准计算,我必须查询 Sybase 数据库以获取与该行对应的一些标准值。数据库根据每行的两个值进行索引 [交易 ID 和股票 ID]。现在我的问题是我应该在我的 mapreduce 程序中使用 tradeId 和 StockId 作为键,还是应该为我的键选择其他值/[值组合]。

【问题讨论】:

  • 还需要key吗?由于没有减少功能,我认为选择键不会影响任何事情?
  • 这就是我的理解:对于每一行输入,您将查询数据库,然后分别对每一行执行基准计算。我理解正确的那部分吗?另外,你在做基准计算后想做什么?
  • 是的,对于每一行,我都在查询数据库以获取一些值。拥有它们后,我会分别为每条线执行基准计算。之后我想用它的基准值输出每一行。

标签: java hadoop mapreduce query-optimization sybase


【解决方案1】:

因此,对于每一行输入,您将查询数据库,然后分别对每一行执行基准计算。完成基准计算后,您将输出具有基准值的每一行。

在这种情况下,您可以根本不使用 reducer,也可以使用 identity reducer。

因此,您的 map 函数将读取一行,然后向 Sybase 数据库发起查询以获取标准值,然后执行基准计算。由于您想用基准值输出每一行,您可以让 Map 函数将行作为键输出,将基准值作为值输出,即<line, benchmark value>

你的地图函数看起来像这样:(我假设你的基准值是一个整数)

public void map(Text key, IntWritable value, Context context) throws Exception {
    String line = value.toString();   //this will be your key in the final output

     /* 
         Perform operations on the line

      */

      /* 

         standard values = <return value from sybase query.>;

      */

      /*Perform benchmark calculations and obtain benchmark values */

      context.write(line,benchmarkValue);     




}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 2015-09-09
    • 1970-01-01
    相关资源
    最近更新 更多