hadoop—直接在datanode中读取块的内容

lmyy7pcs  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(231)

在hdfs中,块分布在活动节点/从节点之间。块的内容是简单的文本,因此有没有任何方法可以查看、读取或访问每个数据节点中存在的块?

gwo2fgha

gwo2fgha1#

hadoop读取一个数据块,并将每一行提供给Map器进行进一步处理。另外,hadoop客户机在连接块之前从不同的数据节点获取与文件相关的块。因此,应该可以从特定的块中获取数据。
hadoop客户机可能是一个开始查看代码的好地方。但是,hdfs提供了文件系统抽象。不确定从特定块读取数据的要求是什么。

x8goxv8g

x8goxv8g2#

假设您拥有对datanodes的ssh访问(和适当的权限),您可以 cd 到存储块的路径,并读取存储在该节点上的块(例如,执行 cat BLOCK_XXXX ). 告诉您块存储位置的配置参数是 dfs.datanode.data.dir ,默认为 file://${hadoop.tmp.dir}/dfs/data . 更多细节在这里。
警告:块名由hdfs根据其内部块id进行编码。只需查看它们的名称,就无法知道块属于哪个文件。
最后,我假设您希望这样做是为了调试,或者只是为了满足您的好奇心。通常,没有理由这样做,您应该使用hdfswebui或命令行工具查看文件的内容。

ve7v8dk2

ve7v8dk23#

作为一个完整的文件或读取一个单一的块(说块编号3)的顺序?
您可以通过各种机制(包括JavaAPI)读取文件,但不能从文件的中间开始读取(例如在块3的开头)。

相关问题