HDFS详解-02

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  ... ]
    从HDFS移动到本地:
        [-moveToLocal  ]
删除:
    1.配置回收站
        core-site.xml
            fs.trash.interval : 10080

    2.命令:
        [-rm [-f] [-r|-R] [-skipTrash] [-safely]  ...]
            skipTrash:回收站
        
    hadoop]$ bin/hdfs dfs -rm -r -f /xxx --> 进入回收站,是可以恢复的
    hadoop]$ bin/hdfs dfs -rm -r -f -skipTrash /xxx --> 进入回收站,是不可以恢复的
    
修改权限:
    [-chmod [-R]  PATH...]
    [-chown [-R] [OWNER][:[GROUP]] PATH...]
问题点:
hadoop]$ bin/hdfs -dfs -put rzdata.log /xxx
将rzdata.log重命名
作业:
1.副本放置策略、文件读写流程整理
2.文件系统命令测试
3.配置QQ邮件,rundeck能够调度发送邮件
4.jps命令测试

【来自@若泽大数据】

你可能感兴趣的:(HDFS详解-02)