带你快速进阶:HDFS架构与操作,2024最新大厂前端面试集合

59 阅读9分钟

远程过程调用(RPC)抽象包装了上述两种协议。从设计的角度来说,NameNode 不会主动发出任何 RPC 请求,而只响应由 DataNode 或客户端发出的 RPC 请求。

以下是可供扩展阅读的资料:

HDFS 基本操作

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

初始化 HDFS


这仅限于从未格式化,如果有数据请谨慎操作

hdfs namenode -format

导入文件


任何对 HDFS 文件系统的操作都是以 hdfs dfs 开头,再辅以相应的操作参数。最常用的参数是 put ,其用法如下,可在终端中输入该命令。

hdfs dfs -put /home/hadoop-policy.xml /policy.xml

命令最后的 /policy.xml 代表存放于 HDFS 的文件名是 policy.xml ,路径是 / (根目录)。如果你想继续沿用之前的文件名,则可以直接填写路径 /

如果需要上传多个文件,则可以连续地填写本地目录的文件路径,并以 HDFS 目标存放路径作为结尾:

hdfs dfs -put /home/hadoop/sample_data/*.sh /user/hadoop

在填写路径相关的参数时,其规则与 Linux 系统下的文件目录规则相同,你可以使用通配符(例如 *.sh)等技巧来简化操作。

文件和文件夹操作


文件操作

(1)列出文件

同样地,可以使用 -ls 参数来列出指定目录中的文件:

hdfs dfs -ls /user/hadoop

如果需要查看某个文件的内容,则可以使用 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 和端口:

总结一下

面试前要精心做好准备,简历上写的知识点和原理都需要准备好,项目上多想想难点和亮点,这是面试时能和别人不一样的地方。

还有就是表现出自己的谦虚好学,以及对于未来持续进阶的规划,企业招人更偏爱稳定的人。

万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。

为了帮助大家更好更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。

前端面试题汇总

JavaScript

性能

linux

前端资料汇总

前端工程师岗位缺口一直很大,符合岗位要求的人越来越少,所以学习前端的小伙伴要注意了,一定要把技能学到扎实,做有含金量的项目,这样在找工作的时候无论遇到什么情况,问题都不会大。

开源分享:docs.qq.com/doc/DSmRnRG…