使用Hadoop文件系统命令管理文件

时间:2020-02-23 14:33:35  来源:igfitidea点击:

HDFS是Hadoop框架的两个主要组成部分之一;另一个是称为mapreduce的计算范例。
分布式文件系统是一个文件系统,用于在网络的计算机集群上管理存储。

HDFS存储块中的数据,默认大小为64MB的单元。
我们想要存储在HDF中的文件需要被丢弃到块大小的块中,然后在整个群集中独立存储。
我们可以使用fsck line命令列出构成HDF中的每个文件的块,如下所示:

% hadoop fsck/-files blocks

由于Hadoop是用Java编写的,因此通过Java API管理与HDF的所有交互。
但是,请记住,我们不需要成为Java Guru,可以使用HDFS中的文件。
内置在Java API之上的几个Hadoop接口现在都是常见的(并隐藏Java),但最简单的是命令行界面;使用命令行在提供的示例中与HDF进行交互。

通过运行一种形式的hadoop命令来访问Hadoop文件系统shell。
所有Hadoop命令都由Bin/Hadoop脚本调用。
(要检索所有Hadoop命令的描述,请运行Hadoop脚本而不指定任何参数。
)Hadoop命令具有语法

hadoop [--config confdir] [COMMAND] [GENERIC_OPTIONS] [COMMAND_OPTIONS]

Config Confdir选项覆盖默认配置目录($hadoop_home/conf),因此我们可以轻松自定义Hadoop环境配置。
通用选项和命令选项是多个命令支持的一组常见选项。

Hadoop文件system shell命令(用于命令行接口)将统一的资源标识符(URI)作为参数。
URI是一串字符,用于标识名称或者Web资源。

该字符串可以包括方案名称 - 用于数据源的性质的限定符。
对于HDFS,方案名称是HDFS,以及本地文件系统,方案名称是文件。
如果未指定方案名称,则默认值是配置文件中指定的方案名称。
HDFS中的文件或者目录可以以完全限定的方式指定,例如在此示例中:

hdfs://namenodehost/parent/child

或者它可以简单地是/父/父母如果配置文件指向HDFS://nameNodehost。

Hadoop文件系统shell命令类似于linux文件命令,具有以下常规语法:

hadoop hdfs dfs file_cmd

有一些先前的Hadoop经验的读者可能会问,"但那个Hadoop FS命令怎么样?
" FS命令在Hadoop 0.2版本系列中弃用,但它仍然在Hadoop 2中工作。
使用HDFS DFS。

正如我们可能希望的那样,我们使用Mkdir命令在HDFS中创建目录,就像我们在Linux上或者基于UNIX的操作系统上一样。
虽然HDFS具有默认工作目录,/用户/$用户,但其中$用户是登录用户名,我们需要使用语法创建自己

$hadoop hdfs dfs -mkdir /user/login_user_name

例如,要创建名为"joanna"的目录,请运行此mkdir命令:

$hadoop hdfs dfs -mkdir /user/joanna

使用Hadoop Put命令将本地文件系统中的文件复制到HDFS:

$hadoop hdfs dfs -put file_name /user/login_user_name

例如,要将名为data.txt的文件复制到此新目录,请运行以下put命令:

$hadoop hdfs dfs put data.txt /user/joanna

运行ls命令以获取HDFS文件列表:

$hadoop hdfs dfs -ls .
Found 2 items
drwxr-xr-x - joanna supergroup 0 2013-06-30 12:25 /user/joanna
-rw-r--r-- 1 joanna supergroup 118 2013-06-30 12:15 /user/joanna/data.txt

列出本身本身的文件分解如本列表中所述:

  • 第1列显示了文件模式(目录"d",""对于普通文件,然后是权限)。三种权限类型 - 读取(R),写(W)和Execute(x) - 与基于UNIX和UNIX的系统上的发现相同。忽略文件的执行权限,因为我们无法在HDF上执行文件。权限由所有者,组和公共(其他人)分组。

  • 第2列显示文件的复制因子。 (复制的概念不适用于目录。)复制构成HDF中文件的块以确保容错。复制因子或者保存特定文件的副本的数量是可配置的。我们可以通过应用程序创建文件或者稍后的复制因子指定复制因子。

  • 列3和4显示文件所有者和组。 SuperGroup是超级用户组的名称,超级用户是具有与NameNode进程相同的用户的用户。如果我们启动NameNode,我们现在是超级用户。这是一个特殊的组 - 常规用户将拥有他们的userids属于一个没有特殊特征的组 - 一个由Hadoop Administrator简单定义的组。

  • 第5列显示文件的大小,以字节为单位,如果是该目录。

  • 列6和7分别显示了最后一个修改的日期和时间。

  • 第8列显示文件或者目录的不合格名称(意味着未指定的方案名称)。

使用hadoop get命令将文件从hdfs复制到本地文件系统:

$hadoop hdfs dfs -get file_name /user/login_user_name

使用hadoop rm命令删除文件或者空目录:

$hadoop hdfs dfs -rm file_name /user/login_user_name

使用Hadoop HDFS DFS -Help命令对每个选项获取详细帮助。