Components of Hadoop 在上一章节我们了解了如何安装及配置Hadoop。我们了解了不同节点的作用以及这些节点是如何工作的,还了解了如何配置这些节点。现在我们可以运行Hadoop了,现在我们从程序的角度了解一下Hadoop框架。 首先我们讲解HDFS,HDFS用来存储你的Hadoop应用的各种数据。之后我们讲解MapReduce框架的细节。第一章时,我们已经看到了MapReduce程序,但是我们只是停留在概念层。在这一章我们将进入Java类和方法层面,当然还包括如何部署。我们还会知道如何使用不同数据格式进行读写操作。 Working with files in HDFS 你可以将100TB的数据集作为一个单独的数据存储在HDFS中,有时仅仅这一点就足以强过其他文件系统。我们在第二章讨论了HDFS的复制机制。HDFS隐藏了这些底层的处理机制,让开发者感觉只是在处理某个单独的文件。 HDFS并不是Unix的原生的文件系统,所以标准的Unix文件工具,比如ls和cp不可用,并且也无法使用标准的Unix文件IO操作。但是,Hadoop提供一系列与Unix非常相似的命令和工具。下一节,我们将讨论这些Hadoop文件操作shell命令。之后,我们将看到Hadoop HDFS Java API 基本的文件操作命令: hadoop fs -cmd <args> 其中cmd指具体的文件操作命令。args是命令参数。 通常来讲cmd命令与Unix的命令相同。比如说,文件列表命令就是: hadoop fs -ls 我们看一下常见的文件操作命令包括: 1.新建文件及目录 2.检索文件 3.删除文件 新建文件及目录: 在运行Hadoop程序之前,我们需要将数据先放进HDFS。我们先假设已经格式化好了整个HDFS系统,并且运行了Hadoop程序。 HDFS的默认工作路径是 /usr/$USER,这个$USER就是指的登陆名。但是这个目录并不会自动建立,所以我们需要使用mkdir命令手动建立这个目录。比如我的用户名是chuck。当然各位看官如果想自己试试,那要使用你自己的用户名。 hadoop fs -mkdir /user/chuck Hadoop's mkdir 命令使用-p参数回自动创建父一级的目录。 使用ls命令可以查看: hadoop fs -ls / 这是你就会看到刚刚创建的文件目录的了。 使用 hadoop fs -lsr / 还可以看到其子目录下的内容起作用与Unix下的ls -r效果相同。 通过URI精确访问指定的目录 Hadoop 文件命令行可以让HDFS与本地文件系统交互。同时也可以与Amazon S3交互。一个 URI 指向一个确定的文件或者目录。完整的URI格式为:scheme://authority/path。scheme 类似于协议的意思。authority是指NameNode所在的服务器host。path是指文件或者路径的位置。 比如说,一个标准的伪分布式的HDFS运行在本机的9000端口。那么如果想要访问user/chuck目 录下的example.txt文件。其URI就是hdfs://localhost:9000/user/chuck/example.txt。 运行的命令就是 hadoop fs -cat hdfs://localhost:9000/user/chuck/example.txt。 如你所见,大多数的设置下,URI中不需要指定scheme://authority。处理本地文件时,你可能 更愿意使用Unix 命令而不是hadoop file 命令。 所以在本地文件与hdfs的拷贝过程中, 在URI上即便不加file:scheme,put命令与get命令也会使用本地系统作为目的地或者数据源 另外,如果你在Hadoop 的配置中配置了scheme://authority部分。那么在你的命令中就可以省略 这个部分。比如:如果你的conf/hadoop-site.xml中配置如下: <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property> 在这个配置下,URI hdfs://localhost:9000/user/chuck/example.txt可以缩写为 /user/chuck/example.txt 此外,HDFS默认使用的目录为:/user/$USER 这个$USER就是你的登录用户名。如果你用chuck登录 ,那么如果要访问的URI是 hdfs://localhost:9000/user/chuck/example.txt。你甚至可以缩写为 example.txt。 此时,你在用cat命令时,只用输入: hadoop fs -cat example.txt RETRIEVING FILES(查看文件内容) Hadoop的get命令用来hdfs文件系统中的文件拷贝到本地文件系统。如果我们想将example.txt文件 拷贝到本地目录。使用如下命令: hadoop fs -get example.txt 这个命令将会把example.txt文件拷贝到本地的当前目录。 另外hadoop的cat命令可以允许我们查看文件中的内容。 hadoop fs -cat example.txt 我们当然也可以使用Unix shell的管道方式链接另一个命令。 比如,如果一个文件很大,而这事你想快速的查看其中的内容,你可以使用hadoop 的cat命令的输出作为 Unix head命令的输入,比如: hadoop fs -cat example.txt | head 目前,Hadoop本身也支持tail命令: hadoop fs -tail example.txt DELETING FILES(删除文件) ok,不废话,言简意该:如下 hadoop fs –rm example.txt LOOKING UP HELP(查看帮助) ok,不废话,言简意该:继续如下 hadoop fs –help ls |