在 Linux 文件系统中我可以在哪里看到 Hadoop HDFS 的文件?

在 Linux 文件系统中我可以在哪里看到 Hadoop HDFS 的文件?

我是一名非计算机背景的数据分析师(不是硬核系统程序员),在 Linux 操作系统上工作。在使用 Hadoop 进行分析时,我突然想到一个问题... / 是一个根目录,系统中所有文件都以分层方式存在于该目录下。在 Hadoop 环境中,有一个称为 HDFS 的特殊文件系统,它实际上用于存储要由 Hadoop 编程框架处理的大型文件。

hadoop -fs put localfile.txt 

虽然,这样的文件应该可以在 / 下访问。那么在哪里可以使用 cat、less 或更多 linux 命令来查看此类文件,而无需在 hadoop -fs 前面加上前缀

如果不幸的是,我在 Hadoop/HDFS 环境中遇到一些错误,那么我该如何访问仍驻留在我的 Linux 机器上的数据。

答案1

您可以使用hdfs fsck实用程序来定位块的名称,然后您可以在本地文件系统中手动找到它:

$ echo "Hello world" >> test.txt
$ hdfs dfs -put test.txt /tmp/
$ hdfs fsck /tmp/test.txt -files -blocks
/tmp/test.txt 12 bytes, 1 block(s):  OK
    0. BP-1186293916-10.25.5.169-1427746975858:blk_1075191146_1451047 len=12 repl=1

记下该blk_....字符串。使用它来定位文件:

$ find /hadoop/hdfs/data/current/BP-1186293916-10.25.5.169-1427746975858/current/finalized -name 'blk_1075191146*'
/hadoop/hdfs/data/current/BP-1186293916-10.25.5.169-1427746975858/current/finalized/subdir22/subdir29/blk_1075191146_1451047.meta
/hadoop/hdfs/data/current/BP-1186293916-10.25.5.169-1427746975858/current/finalized/subdir22/subdir29/blk_1075191146

$ cat /hadoop/hdfs/data/current/BP-1186293916-10.25.5.169-1427746975858/current/finalized/subdir22/subdir29/blk_1075191146
Hello world

您可以看到带有解释的完整示例这里

答案2

您无法使用 cat 或类似命令直接从终端浏览 HDFS。HDFS 是一个逻辑文件系统,并不直接映射到 Unix 文件系统。您应该有一个 HDFS 客户端,并且您的 Hadoop 集群应该正在运行。当您浏览 HDFS 时,您将从 namenode 获取目录结构,从 datanode 获取实际数据。

虽然您无法浏览,但数据由 datanode 守护进程存储在那里。其路径由dfs.数据.目录hdfs-site.xml 中的属性。

目录结构由 namenode 守护进程存储,其路径由dfs.名称.目录hdfs-site.xml 中的属性

答案3

Hadoop 在每个数据节点上以块的形式本地存储数据,并且该属性可在hdfs-site.xml归档于dfs.数据.目录财产

大多数情况下是

$HADOOP_HOME/data/dfs/data/hadoop-${user.name}/current

答案4

您可以导航到由Hadoop只需编写以下命令:

更合适的命令是 hdfs dfs -ls

Linux 终端上给出的命令将显示以下输出/目录中第一列显示文件的权限,第二列显示用户文件和第三列显示姓名文件的

相关内容