0
点赞
收藏
分享

微信扫一扫

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 条评论