在hdfs中,块分布在活动节点/从节点之间。块的内容是简单的文本,因此有没有任何方法可以查看、读取或访问每个数据节点中存在的块?
gwo2fgha1#
hadoop读取一个数据块,并将每一行提供给Map器进行进一步处理。另外,hadoop客户机在连接块之前从不同的数据节点获取与文件相关的块。因此,应该可以从特定的块中获取数据。hadoop客户机可能是一个开始查看代码的好地方。但是,hdfs提供了文件系统抽象。不确定从特定块读取数据的要求是什么。
x8goxv8g2#
假设您拥有对datanodes的ssh访问(和适当的权限),您可以 cd 到存储块的路径,并读取存储在该节点上的块(例如,执行 cat BLOCK_XXXX ). 告诉您块存储位置的配置参数是 dfs.datanode.data.dir ,默认为 file://${hadoop.tmp.dir}/dfs/data . 更多细节在这里。警告:块名由hdfs根据其内部块id进行编码。只需查看它们的名称,就无法知道块属于哪个文件。最后,我假设您希望这样做是为了调试,或者只是为了满足您的好奇心。通常,没有理由这样做,您应该使用hdfswebui或命令行工具查看文件的内容。
cd
cat BLOCK_XXXX
dfs.datanode.data.dir
file://${hadoop.tmp.dir}/dfs/data
ve7v8dk23#
作为一个完整的文件或读取一个单一的块(说块编号3)的顺序?您可以通过各种机制(包括JavaAPI)读取文件,但不能从文件的中间开始读取(例如在块3的开头)。
3条答案
按热度按时间gwo2fgha1#
hadoop读取一个数据块,并将每一行提供给Map器进行进一步处理。另外,hadoop客户机在连接块之前从不同的数据节点获取与文件相关的块。因此,应该可以从特定的块中获取数据。
hadoop客户机可能是一个开始查看代码的好地方。但是,hdfs提供了文件系统抽象。不确定从特定块读取数据的要求是什么。
x8goxv8g2#
假设您拥有对datanodes的ssh访问(和适当的权限),您可以
cd
到存储块的路径,并读取存储在该节点上的块(例如,执行cat BLOCK_XXXX
). 告诉您块存储位置的配置参数是dfs.datanode.data.dir
,默认为file://${hadoop.tmp.dir}/dfs/data
. 更多细节在这里。警告:块名由hdfs根据其内部块id进行编码。只需查看它们的名称,就无法知道块属于哪个文件。
最后,我假设您希望这样做是为了调试,或者只是为了满足您的好奇心。通常,没有理由这样做,您应该使用hdfswebui或命令行工具查看文件的内容。
ve7v8dk23#
作为一个完整的文件或读取一个单一的块(说块编号3)的顺序?
您可以通过各种机制(包括JavaAPI)读取文件,但不能从文件的中间开始读取(例如在块3的开头)。