【问题标题】:MapReduce - use hadoop configuration object to read in a text fileMapReduce - 使用 hadoop 配置对象读取文本文件
【发布时间】:2017-02-05 02:42:30
【问题描述】:

我是一个家庭作业,要求我使用 hadoop/mapreduce/java 运行 k-means 算法。 k-means 算法的每次迭代都是一个 MapReduce 作业,问题涉及链接 n 个作业,其中 n 是我们选择运行的 k-means 算法的迭代次数。

我们得到一个初始质心文件,称为 centroids.txt,如下所示:

1. 0 0.64 0.64 0 0.32
2. 0.21 0.28 0.5 0 0.14
3. 0.06 0 0.71 0 1.23 
4. 1.03 1.36 0.32 0.51 0
5. 0 0 0 0 0.63

...行号不在文件中。每行是一个 5 维向量,表示 k-means 算法的初始簇质心。这里我们有 5 个初始集群。

接下来我们有一个必须分配给集群的数据点文件,名为 data.txt,如下所示:

1. 0 0.64 0.64 0 0.32
2. 0.21 0.28 0.5 0 0.14
3. 0.06 0 0.71 0 1.23
4. 0 0 0 0 0.63 
5. 0 0 0 0 0.63 
6. ... 
... 

这里的 ... 表示我们有很多行数据点(这个问题约为 10000 行)。同样,每一行都是一个 5 维向量。

好的,现在我的问题与构建 MapReduce 作业有关,这是我目前不太熟悉的(即 mapreduce)。对于每个映射函数,输入文件是 data.txt 文件。这是我们需要读取的文件,检查每一行,检查该行所属的质心,并创建一个合适的键值对。但是,如何将 centroids.txt 文件读入映射器?我的教授给出了以下提示:

“您还需要与映射器共享质心文件的位置。有很多方法可以做到这一点,您可以使用任何您认为合适的方法。一种方法是使用 Hadoop 配置对象。您可以设置它作为 Configuration 对象中的属性,并在 Mapper 设置函数中检索属性值。"

为此我很困惑。我的程序有一个 main 函数、一个 run 函数、一个 mapper 和一个 reducer。还建议我使用 Configuration set() 和 get() 方法 - 然后我可以为配置中的每个迭代设置文件名,然后将其传递给作业。然后在映射器中,您可以读取该文件名。

这有点令人困惑。我是否在 main() 或 run() 函数中创建 hadoop 配置对象?我在我的主函数中设置(),然后在我的地图函数中调用get(),或者我在我的运行函数中设置()?它使我必须在 for 循环中运行我的 map 和 reduce 函数 n 次的事情进一步复杂化,每次都使用一个新的/更新的 centroids.txt 文件。

对此表示赞赏!

【问题讨论】:

    标签: hadoop mapreduce


    【解决方案1】:

    其实很简单。 Hadoop 映射器具有#setup 方法,该方法在开始时调用以配置映射器。你要做的就是用这个方法读取centroids.txt文件:

    class MyMapper extends Mapper {
    
        double[][] centroids = new double[5][];
    
        public void setup(Configuration conf) {
             InputStream is = FileSystem.get(conf).open(new Path("centroids.txt"));
             // read centroid values
        }
    }
    

    如果您不想在映射器代码中硬编码文件路径,您可以在提交作业之前将其传递给配置对象:

    conf.set("centroids.path", "centroids.txt");
    

    然后在mapper中读取

    InputStream is = FileSystem.get(conf).open(new Path(conf.get("centroids.path")));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多