在每个datanode中将数据写入本地磁盘
Write data to local disk in each datanode
我想将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有解决这个问题的功能吗?
请看下面的示例,创建的文件将位于 NodeManager 用于容器的目录下的某个位置。这是yarn-site.xml中的配置属性yarn.nodemanager.local-dirs,或者默认继承自yarn-default.xml,在/tmp
下
请参阅@Chris Nauroth 的回答,
这表示它仅用于调试目的,不建议将其作为永久性生产配置。说清楚了为什么不推荐。
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;
}
}
我想将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有解决这个问题的功能吗?
请看下面的示例,创建的文件将位于 NodeManager 用于容器的目录下的某个位置。这是yarn-site.xml中的配置属性yarn.nodemanager.local-dirs,或者默认继承自yarn-default.xml,在/tmp
请参阅@Chris Nauroth 的回答, 这表示它仅用于调试目的,不建议将其作为永久性生产配置。说清楚了为什么不推荐。
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;
}
}