HDFS基本概念和命令行操作

HDFS--Hadoop分布式文件系统

Client
HDFS集群有两类节点,以master/slave模式运行的
    namenode-- 查看Metadata信息    -----SecondaryNamenode
    datanode-- block以文件形式存放在本地磁盘上
副本机制--replication
心跳检测----HDFS HeartBeat
RCP(远程过程调用)对ClientProtocol和DataNode Protocol做了封装,HBase-RPC(Protobuf)实现机制,HBase0.95内部引入了Google-Protobuf作为中间数据组织方式,并在Protobuf提供的Rpc接口之上,实现了基于服务的Rpc实现,
  Protostuff是基于的Google protobuff技术的Java版本
### 提高spark批量读取HBase数据的性能
Hadoop代码中已经默认了Protocol buffer(以下简称PB,http://code.google.com/p/protobuf/)作为RPC的默认实现
org.apache.hadoop.hbase.protobuf.ProtobufUtil
org.apache.hadoop.hbase.protobuf.generated.ClientProtos
 /**
 * HBASE scan查询
    */
def convertScanToString(scan: Scan): String = {
val proto: ClientProtos.Scan = ProtobufUtil.toScan(scan)
Base64.encodeBytes(proto.toByteArray)
 }
属性
 fs.default.name --客户端通过该属性得知namenode在哪里运行进而连接到namenode
 HDFS默认会将文件分割成block,64M为1个block。然后将block按键值对存储在HDFS上,并将键值对的映射存到内存中HDFS在Linux上的物理地址:

HDFS在Linux上的文件位置

    /hadoop/hdfs/data/
    /hadoop/hdfs/namenode 
    统计HDFS文件占用磁盘空间: du -ha /hadoop/hdfs

hadoop

一种是命令行方式,即Hadoop提供了一套与Linux文件命令类似的命令行工具;
    添加到了环境变量中,查看环境变量
另一种是JavaAPI,即利用Hadoop的Java库,采用编程的方式操作HDFS的文件

基础内容

命令行交互工具。File System (FS) shell
通过日志文件
通过Web UI 查看
    HDFS Web界面上只能查看文件系统数据。网址:http://172.19.100.191:50070/ 其中172.19.100.191是本例中集群的主机IP
                http://172.19.100.191:50070/logs/
                http://172.19.100.191:50070/explorer.html#/

HDFS上的命令行操作:

    分为管理员命令和一般用户命令
    所有的HDFS命令都位于脚本 bin/hdfs    
HDFS查看文件,注意是HDFS上的目录,不是本地目录
  hadoop fs -help ##所有命令的详细帮助文档
    查看HDFS文件下的文件
    hadoop fs -ls /             hdfs dfs -ls /
    hadoop fs -ls -R /
    查看hdfs文件夹的大小
    hadoop fs -du -s /spark-history
    hadoop fs -du -s /hdp
    查看目录下的文件
    hadoop fs -ls /hdp
    查看内容
    hadoop fs -tail /tmp/entity-file-history
现在的命令是
    hdfs getconf -namenodes
    hdfs getconf -secondaryNameNodes

上传文件到HDFS中去
    su hdfs
    hdfs dfs -mkdir /test
    hdfs dfs -put /opt/testjarDir/word.txt  /test/word.txt
    (/opt/testjarDir/word.txt是本地输入文件, /test是HDFS上的目标文件)


Hadoop  fs:使用面最广,可以操作任何文件系统。
        FS relates to a generic file system which can point to any file systems like local, HDFS etc. 
        So this can be used when you are dealing with different file systems such as Local FS, HFTP FS, S3 FS, and others
hdfs    dfs:只能操作HDFS文件系统相关(包括与Local FS间的操作)

hadoop  dfs:<已经Deprecated>
        不推荐(deprecated)
        不支持(Discontinued)

查看日志文件

Hadoop技术家族的日志:
cd /hadoop
cd /hadoop/zookeeper/version-2 
    ls
    cat log.100000001

0.帮助命令

hdfs dfs -help

1.创建目录

多级目录-需要一级一级的创建
首先到hdfs的用户-然后创建
su hdfs
    hdfs dfs -mkdir /Test
    hdfs dfs -mkdir /Test/first
    hdfs dfs -mkdir /Test/first/data
    hdfs dfs -mkdir /Test/first/data/ok

2.列出HDFS上的文件

    hdfs dfs -ls  /Test/tmp/first_data_ok_20131031*
    hdfs dfs -ls  /Test/tmp/first_data_ok_20131101*
    hdfs dfs -ls  /Test/tmp/first_data_ok_20131130*
    hdfs dfs -ls  /Test/tmp/first_data_ok_20131201*

3.删除目录

删除目录首先查看当前用户,再查看准备删除的目录的文件之后--删除,以确保没有误操作
    rf参数表示递归强制删除-尽量不用强制删除
        rm命令删除指定的文件,只删除 非空目录 和 文件
        删除空目录 - r 指示rm将参数中列出的全部目录和子目录均递归地删除
0.hdfs  dfsadmin -report
1.hdfs dfs -ls  /test/
  hdfs dfs -ls  /test/happy
2.hdfs dfs -rm  -r -f /test/happy

4.查看

1.报告HDFS的基本统计信息     
    hdfs  dfsadmin -report 
2.统计多个文件行数 
    hdfs dfs -cat  /test/first_data_ok_20129* | wc -l 
3.统计文件大小 
    hdfs dfs -count /test/first_data_ok_20129*
4.查看文件的前几行--具体到文件
    hdfs dfs -tail /test/first_data_ok_2012.json
5.统计目录下个文件大小
    hdfs dfs -du /Test
    32171    /Test/gc
    9599769  /Test/first
    hdfs dfs -du -s /Test
6.查看部分文件
    hdfs dfs -ls  /Test/tmp/first_data_ok_20151203*

5.查看目录结构

逐个查看路径的目录结构
    hdfs dfs -ls  /
             /app-logs
             /apps
             /ats
             /Test
             /hdp
             /mapred
             /mr-history
             /first
             /spark-history
             /test
             /tmp
             /user          
    hdfs dfs -ls  /Test/first/
        /Test/first/data        
    hdfs dfs -ls  /Test/first/data/
         /Test/first/data/ok

递归查看指定路径的目录结构
    hdfs dfs -ls -R  /Test

blogroll

social