Hadoop历险记(四 HDFS shell命令和工作流程)

回顾一下上一节的准备工作:
已经理解了HDFS的基础,搭建好了Hadoop集群 三台机器正常启动:
在这里插入图片描述


shell命令

HDFS的常用shell命令 网上有完备的资料直接搜即可 这里记录一些常用的。 hadoop或者hdfs的这些命令和linux很相似 所以学习成本很低。

1:首先我们一次性启动三台机器的Hadoop(注意 这里是群起群停 而不是单独启动某一台机器(当然这样是允许的) 所以哪台机器上有主节点NN 就在哪台机器上输入,不要跑到从节点机器上去启动):

start-all.sh

(这里已经配置好了免密登录和workers文件 所以可以直接使用这个命令 不需要前缀)

2:
先看一下根目录下有哪些文件

hadoop fs -ls /

在这里插入图片描述
这里又要强调一下细节,这里和linux很像 所有文件都是从根目录开始的,但是这个树形结构是一个抽象目录,是hdfs方便我们看才这样搞的,实际文件是分布式分块存储的。

我们可以创建一个文件夹 csdn 在/根目录下

hadoop fs -mkdir /csdn

这里可能会遇到一个问题: hdfs处于安全模式 safe mode.
这时候hdfs为了保护文件数据 不允许新增 删除 更改。
(安全模式的原因很多 具体原因查询hadoop/logs 具体分析(新手一定要养成遇到问题多查日志的好习惯))
手动查看安全模式状态/打开/关闭

hdfs dfsadmin -safemode get/enter/leave

比如创建一个txt 文件 把它从linux本地上传到hdfs:
在这里插入图片描述这里的上传文件命令 也可以简写

hadoop fs -put /sc.txt /

同理 竟然有上传的put 就会有下载的get 跟上面同理 路径换一下就好了


还有一个常用的命令
追加数据到文件中
这里比较有趣的是 可以加多个文件

hadoop fs -appendToFile 1.txt 2.txt 3.txt /0.txt

这里随便举几个例子 都是经常写的 关于hadoop的其他命令 网上非常容易查 学习成本也很低因为和linux相似,新手不用刻意的死记,实际遇到的时候查询即可。


HDFS工作流程

一个文件系统最核心的无非两点 把数据装进去/把数据取出来 读数据很简单 这里主要说一下写数据

写数据流程

在这里插入图片描述


管道
什么是管道 pipline, 简要理解 管道就是HDFS上传文件写数据时采用的一种数据传输方式。

(之前说了dd里面的数据都是三个副本(连自己主副本也算上)。所以上传数据的时候hdfs会依次上传 比如客户端上传一个txt 给hdfs 到了hdfs的1机器 1机器再到2机器 2机器再传给3机器。 这种依次传 而不是客户端同时发三个情况 给三台机器。)

ack 应答响应
所谓的ack 就是acknowledge character 确认字符。在文件数据上传的时候 你怎么保证收件人收到了 且收全了? ack就是一种反方向的校验 告诉收件方我收到了

理解了这两个概念 我们就可以理解工作流程了:
看上面这张流程图:

——>首先客户端要把一个文件上传到hdfs上面,那么它先发起一个上传的请求(具体到代码里面就是一个create方法)——> HDFS 创建一个对象实例distributed fs (不理解什么是对象实例的可以去java基础里面先学一下) 这个对象里面封装了hdfs文件系统的很多方法,它调用create()方法 通过RPC请求NN创建文件 ——> NN作为元数据的管理方 这时候当然就要各种检查了 检查目录存不存在 父文件夹存不存在 是不是有权限 。。。等等———> 检查通过之后 NN会记下一条记录 返回一个 FSoutputsteam输出流对象 给客户端 用于写数据 ——> 写数据的时候怎么写呢 HDFS将数据 划分成一个一个packet(默认64k) 这样一个一个像水流一样 写到hdfs里面。 写完之后 ack会机制校验确保数据没没问题。

这里注意一个问题 我们刚才说了 默认三副本 那么上传的时候万一客户端上传到机器1 成功 但是机器1上传到机器2 失败 这算不算成功?怎么给客户端回应?

这里涉及到hdfs配置里面的参数 dfs.namenode.replication.min 默认是1 就是说 第一个副本上传成功了就算成功了 当然你可以改。 就跟默认三副本 你嫌少 你可以默认4567副本


这里放一篇网友写的 hive的常用shell 例子:https://blog.csdn.net/weixin_39647186/article/details/110338351

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值