带你快速进阶:HDFS架构与操作

如果需要查看某个文件的内容,则可以使用 cat 参数。最容易想到的是直接填写 HDFS 上的某个文件路径。

(2)文件对比

如果需要比对本地目录与 HDFS 之上的文件,则可以分别填写它们的路径。但需要注意的是,本地目录需要以 file:// 指示符开头,并辅以文件路径(如 /home/hadoop/.bashrc ,不要忘记路径开始的 / )。否则,任何填写到此处的路径都会默认识别为 HDFS 上的路径。

hdfs dfs -cat file:///home/hadoop/.bashrc /user/hadoop/mapred-env.sh

(3)复制

如果需要复制某个文件到另一个路径,则可以使用 cp 参数。

hdfs dfs -cp /user/hadoop/mapred-env.sh /user/hadoop/copied_file.txt

(4)移动

同样地,如果需要移动某个文件,则使用 mv 参数。这与 Linux 的文件系统命令格式基本相同。

hdfs dfs -mv /user/hadoop/mapred-env.sh /moved_file.txt

(5)追加

如果想把一些新的内容追加到 HDFS 上的某个文件中,则可以使用 appendToFile 参数。并且在填写待追加的本地文件路径时,可以填写多个。最后一个参数将作为被追加的对象,该文件必须在 HDFS 上存在,否则将报错。

echo 1 >> a.txt

echo 2 >> b.txt

hdfs dfs -appendToFile a.txt b.txt /user/hadoop/mapred-env.sh

可以使用 tail 参数来查看文件尾部内容,以确认是否追加成功。

hdfs dfs -tail /user/hadoop/mapred-env.sh

(6)删除

如果需要删除某个文件或目录,则使用 rm 参数。该参数还可以附带 -r-f,其意义与 Linux 文件系统相同。

hdfs dfs -rm /moved_file.txt

目录操作

(1)遍历创建

实际上,如果需要同时创建多个目录,你可以直接将多个目录的路径作为参数填入。-p 参数表明当其父目录不存在时,将会被自动创建。

hdfs dfs -mkdir -p /user/hadoop/dir1 /user/hadoop/dir2/sub_dir1

(2)查看资源占有

如果想查看某些文件或者目录占用了多少的空间,则可以使用 du 参数:

hdfs dfs -du /user/hadoop/

导出文件


在前文中我应用程序计算完成并产生了记录结果的文件,则可以使用 get 参数来将其导出到 Linux 系统的本地目录中。

在此处第一个路径参数指的是 HDFS 内部的路径,而最后一个路径指的是保存在本地目录的路径。

hdfs dfs -get /user/hadoop/mapred-env.sh /home/hadoop/exported_file.txt

如果导出成功,可以在本地目录找到该文件

Web 管理界面


每个 NameNode 和 DataNode 都在内部运行着一个 Web 服务器,用于显示集群的当前状态等基本信息。在默认配置下,NameNode 的首页是http://localhost:50070/。它列出了集群中的 DataNode 和集群的基本统计数据。

打开浏览器,在地址栏中输入:

http://localhost:50070/

在 OverView 中可以看到当前“集群”中活跃的 DataNode 节点数量:

Untitled

如果集群发生了问题,并且使用 HDFS 时始终报错,可以先从这里检查集群的状态是否正常,再结合日志进行分析。

Web 界面也可以用于浏览 HDFS 内部的目录和文件,在顶部菜单栏点击 “Utilities” 下的 “Broswe the file system” 链接。

Untitled

WebHDFS REST API

===============================================================================

WebHDFS 部署


webhdfs:使用 http 协议访问 HDFS

配置项

1、编辑 httpfs-env.sh,设置 webdfs 访问端口

vim /opt/hadoop-2.7.3/etc/hadoop/httpfs-env.sh

export HTTPFS_HTTP_PORT=14000

2、编辑 core-site.xml,设置代理主机

hadoop.proxyuser.root.hosts

*

hadoop.proxyuser.root.groups

*

3、编辑 hdfs-site.xml

dfs.webhdfs.enabled

true

4、重启 NameNode,执行

httpfs.sh start

(使用内嵌的 tomcat 启动)

5、命令参考资料:

如果将 HDFS 作为某个云计算系统的存储组件组成部分,外部访问是不可缺少的功能。为此, HDFS 提供了基于 HTTP 协议访问的方式—— WebHDFS 。

WebHDFS 概述


文件系统 URI 与 HTTP URL

维基百科对 URI 的定义如下:

统一资源标识符(Uniform Resource Identifier, URI)是为通过 URI 方案明确标识资源和可扩展性而设计的字符串。

WebHDFS 的文件系统语法格式是以 webhdfs:// 开头的,一个标准的 WebHDFS 文件系统 URI 写法如下:

webhdfs://:<HTTP_PORT>/

上面的 WebHDFS URI 等价于下面的 HDFS URI 。

hdfs://:<RPC_PORT>/

在 REST API 中,在路径之前多了一个前缀 /webhdfs/v1 ,在路径之后多了一些操作的参数 ?op=...,因此相关的 HTTP URL 写法应当是如下格式:

http://:<HTTP_PORT>/webhdfs/v1/ ?op=…

启用 WebHDFS

在启用 WebHDFS 之前,首先应该关闭 Hadoop 集群。任何对 Hadoop 的修改都应当先关闭集群以避免对数据产生影响。

使用 Vim 编辑器打开 hdfs-site.xml 文件:

vim /opt/hadoop-2.6.1/etc/hadoop/hdfs-site.xml

打开之后,在 configuration 标签中新增以下属性和配置值:

dfs.webhdfs.enabled

true

默认情况下,如果外部应用想要访问 Namenode ,则可以直接与 Namenode 的 IP 和 50070 端口进行通信。

同样地,如果外部应用想要使用 WebHDFS 诸如上传下载的文件管理功能,则需要通过 Datanode 的 IP 和 50075 端口来与其进行通信。

在实际应用中,如果不想过于细致地区分这些端口,则可以按照以上的方式来启用 Namenode 的 WebHDFS 功能。

修改完毕后,应当再次启动 Hadoop 的相关服务

创建目录


在集群启动完成之后,可以利用 curl 工具来模拟 HTTP 请求。

在终端中输入以下命令来尝试创建目录:

curl -i -X PUT “http://localhost:50070/webhdfs/v1/user/hadoop/webhdfs_dir?op=MKDIRS”

如果直接使用以上命令来创建目录,可能会遇到权限相关报错信息:

Untitled

这是由于 WebHDFS 启用的安全认证模式导致的。在目前的安全等级下,我们可以附加一个 user.name 参数来指明以哪个用户创建目录。更高的权限设置可以在官方文档 Authentication for Hadoop HTTP web-consoles 中查看如何设置。

在之前的 URL 中附加一个参数 &user.name=hadoop 来表示我们用 hadoop 用户创建目录。

再次尝试在终端中输入以下命令:

curl -i -X PUT “http://localhost:50070/webhdfs/v1/user/hadoop/webhdfs_dir?op=MKDIRS&user.name=hadoop”

上传文件


使用 WebHDFS 上传文件需要两个步骤,首先是在 NameNode 上创建文件的信息。首先提交一个 HTTP 的 PUT 请求,不需要自动跟踪重定向,此时也不需要发送文件的数据。

op 参数设置为 CREATE,表明当前操作是创建文件。附加的参数 overwrite=true文件名相同时的解决办法,即覆盖原来的文件

请在终端中输入以下命令来创建文件,此时请求的 URL 仍然是 NameNode 的 IP 和端口:

curl -i -X PUT “http://localhost:50070/webhdfs/v1/user/hadoop/new_uploaded_file.txt?op=CREATE&overwrite=true”

Untitled

可以看到 HTTP 响应信息里有一个 Location 字段,第二步便是利用申请到的 Location 来上传实际的文件数据。需要注意的是,此时的 URL 已经变成了 DataNode 的 IP 和端口。在本课程中由于是伪分布式部署,你可以用 localhost 替代其 IP 。

在终端中输入以下命令来发送数据,你可以直接复制之前返回的 Localtion 里的 URL 作为请求目标。

**请注意,涉及到文件修改的操作,都需要身份认证。**因此我们还需要在请求的 URL 尾部添加一个参数,即使用哪个用户来创建:user.name=hadoop

curl -i -X PUT -T /home/hadoop/sample_data/yarn-site.xml “http://localhost:50075/webhdfs/v1/user/hadoop/new_uploaded_file.txt?op=CREATE&namenoderpcaddress=localhost:9000&overwrite=true&user.name=hadoop”

可以看到响应信息里, Location 字段已经生成了上传成功的文件的 URI 。

Untitled

重命名文件和目录


有了之前的基础,重命名文件和目录的操作比较容易理解,直接使用 RENAME 作为操作参数的值。并指定 destination 参数即可,该参数是指重命名之后的文件路径。

curl -i -X PUT “http://localhost:50070/webhdfs/v1/user/hadoop/new_uploaded_file.txt?op=RENAME&destination=/user/hadoop/rename.txt&user.name=hadoop”

Untitled

下载文件


下载文件只需要发送一个 HTTP GET 请求,并自动跟随重定向。

curl -i -L “http://localhost:50070/webhdfs/v1/user/hadoop/rename.txt?op=OPEN” -o /home/hadoop/downloaded.txt

请求首先被重定向到可以读取到文件数据的 DataNode ,然后客户端(也就是我们发出请求的这方)将会被重定向到 DataNode 以读取文件的数据。你也可以使用 curl 的 -o 参数将其保存到文件中。

列出文件和状态统计


自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)

最后

分享一套阿里大牛整理的前端资料给大家,点击前端校招面试题精编解析大全即可下载

❤️ 谢谢支持,喜欢的话别忘了 关注、点赞哦。

己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-kXWegIWr-1711769001954)]

[外链图片转存中…(img-gBPuDrqh-1711769001955)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

[外链图片转存中…(img-jkLXdAH5-1711769001955)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)

最后

分享一套阿里大牛整理的前端资料给大家,点击前端校招面试题精编解析大全即可下载

❤️ 谢谢支持,喜欢的话别忘了 关注、点赞哦。

前端校招面试题精编解析大全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值