将数据写入每个datanode中的本地磁盘

r9f1avp5  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(384)

我想把map任务中的一些值存储到每个数据节点的本地磁盘中。例如,

public void map (...) {
   //Process
   List<Object> cache = new ArrayList<Object>();
   //Add value to cache
   //Serialize cache to local file in this data node
}

如何将这个缓存对象存储到每个数据节点的本地磁盘上,因为如果像上面那样将这个缓存存储在map函数中,那么性能会因为i/o任务而变得很差?
我的意思是,有没有办法等待这个数据节点中的map任务完全运行,然后我们将这个缓存存储到本地磁盘?或者hadoop有解决这个问题的功能吗?

gxwragnw

gxwragnw1#

请参阅下面的示例,创建的文件将位于nodemanager用于容器的目录下的某个位置。这是yarn-site.xml中的配置属性yarn.nodemanager.local-dirs,或从yarn-default.xml继承的默认值,位于 /tmp 请参阅@chris nauroth answer,它说它只是用于调试目的,不建议作为永久性的生产配置。它清楚地描述了为什么不建议这样做。

public void map(Object key, Text value, Context context)
        throws IOException, InterruptedException {
    // do some hadoop stuff, like counting words
    String path = "newFile.txt";
    try {
        File f = new File(path);
        f.createNewFile();
    } catch (IOException e) {
        System.out.println("Message easy to look up in the logs.");
        System.err.println("Error easy to look up in the logs.");
        e.printStackTrace();
        throw e;
    }
}

相关问题