hadoop hdfs

hadoop hdfs

  • hdfs特性

    首先,它是一个文件系统 用于存储文件的  提供统一命名空间的目录树结构 便于用户操作文件系统
    其次,它是一个分布式文件系统  分布式意味着多台机器  当中有不同的角色 各司其职 共同配合。
    
    
    • master slave 主从架构

      • 主角色:namenode 管理文件系统元数据(目录树结构 文件和块的对应信息)
      • 从角色:datanode 负责具体数据块存储 定时向nn进行块的汇报
    • 分块存储

      hadoop 2.x  block size = 128M
      hadoop 1.x  block size = 64M
      
    • 副本机制

      • hadoop默认的副本数是3(1 + 2 = 3)
    • 一次写入,多次读出

      hdfs没有数据修改操作 只要是支持大数据查询分析需求

  • hdfs shell命令行操作

    • 格式

      hadoop  fs <args>  文件系统的协议://主机名:host/文件路径
      
    • 具体操作

      hadoop fs -ls file:///   访问是本地系统
      
      hadoop fs -ls hdfs://node-1:8020/   访问是hdfs文件系统
      
      hadoop fs -ls gfs://node-1:9999/  访问是谷歌文件系统
      
      hadoop fs -ls /  如果不指定文件系统的协议 就会访问默认文件系统  fs.defaultFS
      
    • 基本操作

      • put 上传操作 从本地文件系统复制到目标文件系统

        何谓本地文件系统?  
        执行命令所在的客户端的文件系统
        
        何谓目标文件系统?
        hdfs
        
        hadoop fs -put file:///root/example-mr-1.2.jar hdfs://node-1:8020/a/b/c
        hadoop fs -put example-mr-1.2.jar /a/b/
        
      • get 下载操作 将文件下载到本地文件系统

        何谓本地文件系统?  
        执行命令所在的客户端的文件系统
        
        hadoop fs -get hdfs://node-1:8020/a/b/c/example-mr-1.2.jar file:///root/
        
        hadoop fs -get /a/b/c/example-mr-1.2.jar ./
        
      • appendToFile 把多个文件追加到已经存在文件的末尾

        • 最大用处:hdfs上小文件的合并

          hadoop fs -appendToFile 2.txt 3.txt /a/1.txt
          
      • getmerge 下载合并 合并下载多个文件

        hadoop fs -getmerge /small/* ./small.txt
        
      • setrep

        [root@node-3 test]# hadoop fs -setrep -w 3 /zookeeper.out
        Replication 3 set: /zookeeper.out
        Waiting for /zookeeper.out .... done
        
        • 注意事项: 可以通过该命令修改hdfs中文件副本个数 在企业中避免使用该操作
        • 进行副本设置修改的操作 需要hdfs集群配合文件进行数据复制 降低对外提供正常服务能力
        • 通常一批文件设置为几个副本 在上传前就需要决定好
    • 文件限额操作

      • 可以设置某个文件夹可以用于多少个子文件 或者文件的大小限制

      • 强制限制 超过即禁止

        hdfs dfsadmin -setQuota 2 /user/root/lisi  开启限制 限制文件个数为2
        
        [root@node-3 test]# hadoop fs -put 1.txt /user/root/lisi
        [root@node-3 test]# hadoop fs -put 2.txt /user/root/lisi 
        put: The NameSpace quota (directories and files) of directory /user/root/lisi is exceeded: quota=2 file count=3   报错 显示已经超过现在 
        
        [root@node-3 test]# hdfs dfsadmin -clrQuota /user/root/lisi
        [root@node-3 test]# hadoop fs -put 2.txt /user/root/lisi   
        [root@node-3 test]# hadoop fs -put 3.txt /user/root/lisi   清楚文件超额限制
        
        hdfs dfs -count -q -h /user/root/lisi  查看某个路径是否开启文件超额限制
        

    • NN和DN之间的汇报机制

      • 启动集群的时候 首先启动namenode 然后启动datanode

      • datanode启动的时候需要进行两件事

        • 去namenode进行注册汇报 报告自己启动成功 —>我活了
        • 去namenode汇报自己本机持有哪些数据块
      • 集群启动之后 正常工作期间 还需要间隔指定的时间进行汇报

        • datanode每隔3秒进行心跳 目的:报活

          dfs.heartbeat.interval
          
        • datanode每间隔6小时 汇报自己持有块信息

          dfs.blockreport.intervalMsec
          
      • 在启动的过程中 hdfs会进入所谓安全模式 数据只可以读不可以写 内部进行数据完整性校验


hdfs java api 操作

  • 开发的版本的选择

    • 因为服务器环境搭建使用的cdh 版本 ,本地开发jar版本理应也是cdh
    • cdh和apache 相同版本中 api 代码 逻辑是没有区别的
    • 如果使用cdh 需要手动添加cloudera maven仓库 因为它是商业公司
  • 问题1:客户端身份的权限问题

    Permission denied: user=AllenWoon, access=WRITE, inode="/":root:supergroup:drwxr-xr-x
    
    • 解决: 在客户端设置访问文件系统身份
  • 问题2: hadoop本地环境的问题

    • 报错现象

       ERROR - Failed to locate the winutils binary in the hadoop binary path
       java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
       WARN - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
      
    • 原因:hadoop往windows平台进行数据写操作的时候 需要winutils.exe 配合才能交互。winutils.exe来自hadoop源码中C++本地库的支持。

    • 解决:把hadoop源码在windows进行编译 得到winutils.exe 达到和本地操作交互的能力

    • 安装: 把windows编译的hadoop解压到一个路径(没有中文 没有空格)

      • 配置hadoop环境变量

        HADOOP_HOME=C:\Work\soft\hadoop-2.6.0-cdh5.14.0
        PATH=;%HADOOP_HOME%\bin
        
      • 首先cmd 验证hadoop环境变量是否正确

      • 确保之前安装的jdk路径也是没有中文 没有空格的

      • 重启idea开发工具


  • 跨hdfs集群数据复制

    • 命令 distcp

      hadoop distcp hdfs://node-1:8020/1.txt  hdfs://itcast:8020/test/
      
    • 使用场合

      业务中涉及生成环境和开发环境之间某些数据进行交流的时候使用

  • hadoop archive的使用

    • 产生背景:hdfs架构设计不利于小文件存储 文件不管多小 都需要元数据描述记录 如果集群小文件过多

      可能磁盘使用情况很低 但是内存使用确很高 俗称 小文件吃内存

    • 档案的功能:通过mr程序 把多个小文件 合并成一个档案文件

    • archive的使用

      • 档案的创建

        hadoop archive -archiveName test.har -p /input /outputdir
        
        档案建立成功 为了优化小文件吃内存的情况 可以把小文件删除 
        hadoop fs -rm -r /input
        
      • 档案的查看

        查看建立档案之后的样子
        hadoop fs -ls hdfs://node-1:8020/outputdir/test.har
        
        查看建立档案之前的样子
        hadoop fs -ls har://hdfs-node-1:8020/outputdir/test.har
        可以查询出该档案是由哪些小文件合并而来
        
      • 档案的提取

        串行提取
        hadoop fs -cp har:///outputdir/test.har hdfs://node-1:8020/input
        
        hadoop distcp har:///outputdir/test.har hdfs://node-1:8020/input
        
      • 档案的注意事项

  • hdfs 快照功能

    • 创建快照相当于给hdfs系统设置备份

    • 创建快照的前提是文件夹已经存在

    • 创建快照需要两步

      • 首先允许其设置快照

        hdfs dfsadmin -allowSnapshot /small
        
      • 然后再是设置创建快照

        hdfs dfs -createSnapshot /small
        
      • 浏览快照

        http://node-1:50070/explorer.html#/small/.snapshot
        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值