HDFS详解-02
1.机架 rack
机柜,每个机柜分别有各自的IP段
问题:
1.企业里为什么要机架?
1.rack1挂了 rack2还能提供服务
2.管理的机器有机架我没有,当成一个笼统的虚拟的机架
刀片服务器:192.169.138.xxx
五台刀片服务器
130M文件 实际存储 130M * 3 block:6个
2.副本放置策略
开发为主 + 大数据运营 ---> 架构
3.文件读流程 --> FSDataInputStream (面试题)
hadoop]$ bin/hdfs/dfs -cat /test.log
3.1 client通过FileSystem.open(filePath)方法,去与NN进行RPC通信,返回该文件的部分或者全部的block块(也包含该列表各block的分布在DataNode地址的列表),也就是返回FSDataInputStream对象
3.2 Client调用FSDataInputStream对象的read()方法。
a.去与第一个块的最近的datanode进行read,读取完后会check,假如successful会关闭与当前DataNode通信;(假如check fail会记录失败的块+DataNode信息,下次就不会读取,那么会去该块的第二个DataNode地址读取)
b.然后第二个块的遜的DataNode上的进行读取,check后会关闭与DataNode的通信。
c.假如block列表读取完了,文件还未结束,那么FileSystem会从NameNode获取下一批的block的列表。(当然读操作对于client端是透明的,感觉就是连续的数据流)
3.3 Client调用FSDataInputStream.close()方法,关闭输入流。
要求:
1.流程要清楚
2.文件读流程 --> FSDataInputStream
4.文件写流程 --> FSDataOutputStream (面试题)
4.1 Client调用FileSystem.create(filePath)方法,去NameNode进行rpc通信,check该路径的文件是否存在以及有没有权限创建该文件。假如ok,就创建一个新文件,但是并不关联任何block,返回一个FSDataOutputStream对象;(假如not ok,就返回错误信息,所以写代码要try-catch)
4.2 Client调用FSDataOutputStream对象的write()方法,会将第一个块写入第一个DataNode,第一个DataNode写完传给第二个节点,第二个写完传给第三节点,当第三个节点写完返回一个ack packet给第二个节点,第二个返回一个ack packet给第一个节点,第一个节点返回ack packet给FSDataOutputStream对象,意思标识第一个块写完,副本数为3;然后剩余的块依次这样写。(当然写操作对于Client端也是透明的)
4.3 当向文件写入数据完成后,Client调用FSDataOutputStream.close()方法,关闭输出流,flush缓存区的数据包;
4.4 再调用FileSystem.complete()方法,告诉NameNode节点写入成功。
hadoop]$ bin/hdfs -dfs -put rzdata.log /xxx001/
put: `/xxx01/': No such file or directory: `hdfs://192.168.137.201:9000/xxx01'
找不到此文件
要求:
1、流程要清楚
2、文件写流程 --> FSDataOutputStream
3、校验文件是否存在和权限问题
4、最后一步DFS.complete()方法,告诉NN节点写入成功
https://wenku.baidu.com/view/fabe57b004a1b0717fd5dda5.html
5.命令
查看进程:
]$ jps
查看全部信息:
]$ jps -l
查看jps是哪个软件里面的:
]$ which jps
/usr/java/jdk1.8.0_45/bin/jps
查看:
]# cd /tmp/hsperfdata_hadoop/
hsperfdata_hadoop]# ll
5.1正常流程:
]# jps
找到该进程的使用用户名称:
]# ps -ef | greo pid
]# su - 用户
]$ jps
5.2异常流程
假如进程被停止:
rundeck]# jps
rundeck]# kill -9 pid
发现进程还有残留:
rundeck]# ps -ef|grep pid
pid信息残留,去/tmp/hsperfdata_hadoop文件夹删除该pid文件
hsperfdata_hadoop]# rm -rf pid文件
切到hadoop用户,查看进程是否存在:
]# su - root
]$ jps
登录一台机器,jps命令+ps命令,残留信息删除
参考: http://blog.itpub.net/30089851/viewspace-1994344/
6.hadoop和hdfs 文件系统命令
hadoop]bin/hadoop fs 等价于 hdfs dfs
对文件的操作命令:
查看文件夹:
hadoop]$ bin/hdfs dfs -ls /
创建文件夹:
hadoop]$ bin/hdfs dfs -mkdir -p /rzdatadir001/001
查看文件内容:
hadoop]$ bin/hdfs dfs -cat /test.log
上传和下载:
上传本地文件到HDFS:
hadoop]$ bin/hdfs dfs -put rzdata.log1 /rzdatadir001/001
下载HDFS文件到本地:
hadoop]$ bin/hdfs dfs -get /rzdatadir001/001/rzdata.log1 /tmp/
下载并重命名:
hadoop]$ bin/hdfs dfs -get /rzdatadir001/001/rzdata.log1 /tmp/rzdata.log123 重命名
移动:
从本地移动到HDFS:
[-moveFromLocal <localsrc> ... <dst>]
从HDFS移动到本地:
[-moveToLocal <src> <localdst>]
删除:
1.配置回收站
core-site.xml
fs.trash.interval : 10080
2.命令:
[-rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ...]
skipTrash:回收站
hadoop]$ bin/hdfs dfs -rm -r -f /xxx --> 进入回收站,是可以恢复的
hadoop]$ bin/hdfs dfs -rm -r -f -skipTrash /xxx --> 进入回收站,是不可以恢复的
修改权限:
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
问题点:
hadoop]$ bin/hdfs -dfs -put rzdata.log /xxx
将rzdata.log重命名
作业:
1.副本放置策略、文件读写流程整理
2.文件系统命令测试
3.配置QQ邮件,rundeck能够调度发送邮件
4.jps命令测试
【来自@若泽大数据】
网友评论