13 ,hdfs 操作 : 命令行 ( 目录,文件,权限,限制,安全模式 )

1 ,hdfs 是什么 : 分布式存储系统 ( 把它当做大磁盘 )

  1. 用于存储:就相当于一个很大的硬盘,可以存储很多数据,可以认为,存多少都够用。
  2. 存储容量很大 :hdfs 的容量,相当于他的所有机器提供的容量的总和。
  3. 看图,为什么三台机器每台 24T ,他的存储容量总和是 20 x 3 = 60;为什么不是 24 x 3 = 72 。因为每台机器自己的操作系统也是要消耗一部分内存的,不会全部贡献出来。
    13 ,hdfs 操作 : 命令行 ( 目录,文件,权限,限制,安全模式 )_第1张图片

2 ,集群的启动和关闭 :

  1. 启动 :
    start-dfs.sh
    start-yarn.sh
    mr-jobhistory-daemon.sh start historyserver
  2. 关闭 :
    stop-dfs.sh
    stop-yarn.sh
    mr-jobhistory-daemon.sh stop historyserver

3 ,目录操作 : ( 重点记忆 )

  1. 创建目录 :
    hdfs dfs -mkdir /sfl
  2. 创建多级目录 :
    hdfs dfs -mkdir -p /sfl/a/b/c/d
  3. 删除目录 :
    hdfs dfs -rm -r /sfl/a/b
  4. 查看目录内容 :
    hdfs dfs -ls /
  5. 递归显示目录 :
    hdfs dfs -ls -R /sfl

4 ,文件操作 : ( 重点记忆 )

  1. 上传文件 :
    hdfs dfs -put aa.txt /sfl
  2. 删除文件 :
    hdfs dfs -rm /sfl/aa.txt
  3. 文件移动 :
    hdfs dfs -mv /sfl/aa.txt /sfl/a
  4. 查看文件内容 :
    hdfs dfs -cat /sfl/a/aa.txt
  5. 下载文件,到 linux :
    hdfs dfs -get /sfl/aa.txt
  6. 下载文件,到 linux ,并且改名字 :
    hdfs dfs -get /sfl/aa.txt bb.txt
  7. 下载文件,到 windows :
    13 ,hdfs 操作 : 命令行 ( 目录,文件,权限,限制,安全模式 )_第2张图片
    13 ,hdfs 操作 : 命令行 ( 目录,文件,权限,限制,安全模式 )_第3张图片

5 ,回收站 :

  1. 配置文件 :
    cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
    vim core-site.xml
  2. 内容 :


	fs.trash.interval
	10080

  1. 关闭回收站 :
    把值改为 0 即可,如果关闭垃圾桶,删除掉的东西就回不来了。
  2. 设置垃圾桶 :
    在指定的时间内,可以回收被删除掉的文件。
  3. 如果更改配置 :
    需要重启集群。
  4. 垃圾箱的位置 :
    /user/root/.Trash
  5. 垃圾恢复 : 就是把文件从垃圾箱移动出来
    hdfs dfs -mv /user/root/.Trash/Current/sfl/aa.txt /sfl
  6. 清空回收站 : 释放存储空间 ( 将回收站的内容移动到一个文件夹 )
    hdfs dfs -expunge
  7. 真正的清理 : 删除回收站中的文件或者目录
    hadoop fs -rmr /user/root/.Trash

6 ,用户 / 权限 : 原理

  1. hadoop 没有自己的权限系统。
  2. hadoop 借用 linux 的权限系统。
  3. hadoop 权限的目的 : 防止好人做错事,不能阻止坏人做坏事。
    孙:防止我们的组操作,但是没有安全和保护的功能。
  4. 他是怎么借用 linux 权限的 :
    如果我们使用的 linux 的 root 用户创建的文件或者目录,那么,hdfs 中的目录或者文件的创建者就是 root.
  5. 切换用户 :在 linux 中切换用户就好。

7 ,用户 / 权限 : 配置

  1. 停止集群
    stop-dfs.sh
    stop-yarn.sh
    mr-jobhistory-daemon.sh stop historyserver
  2. 三台机器都修改权限
cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
vim hdfs-site.xml


        dfs.permissions
        true

  1. 然后重启集群
    start-dfs.sh
    start-yarn.sh
    mr-jobhistory-daemon.sh start historyserver

8 ,用户 / 权限 : 修改文件权限

  1. 开启权限前,在 win 的浏览器,可以看到 root 目录。
  2. 只有名字叫 root 的用户才可以访问这个文件夹。
  3. 那么问题来了,如果我们 win 的用户名改名字,叫做 root ,能不能访问这个文件夹呢?
    13 ,hdfs 操作 : 命令行 ( 目录,文件,权限,限制,安全模式 )_第4张图片
  4. 在开启权限后,在 win 的浏览器就进不去 root 目录了,点击后报错。
    原因 :我的 win 的用户名不是 root
    13 ,hdfs 操作 : 命令行 ( 目录,文件,权限,限制,安全模式 )_第5张图片
  5. 修改权限 : 修改目录的权限
    hdfs dfs -chmod 755 /user
  6. 修改权限 : 并且修改目录下面所有文件的权限 ( 我们用这个 )
    hdfs dfs -chmod -R 755 /user
  7. 在 win 的浏览器上访问,可以了
    13 ,hdfs 操作 : 命令行 ( 目录,文件,权限,限制,安全模式 )_第6张图片

9 ,用户 / 权限 : 修改文件所有者所属组

  1. 目的 : 修改目录 /sfl 的所有者和所属组 ( aa 是用户名,bb 是用户组名 )
  2. 操作 :
    1 ,修改目录的权限 :hdfs dfs -chown aa:bb /sfl
    2 ,修改目录以及目录中的文件的权限 : hdfs dfs -chown -R aa:bb /sfl
    13 ,hdfs 操作 : 命令行 ( 目录,文件,权限,限制,安全模式 )_第7张图片
  3. 在把它改回来 ( root 是用户名,supergroup 是用户组名 )
    hdfs dfs -chown -R root:supergroup /sfl
    13 ,hdfs 操作 : 命令行 ( 目录,文件,权限,限制,安全模式 )_第8张图片

10 ,家目录 :

  1. 如果我们这样创建目录 : hdfs dfs -mkdir sfl
  2. 结果,这个目录创建到哪里去了 :/user/root
  3. 结论 : 每个用户的家目录是 /user/用户名
  4. 问题 : 这个命令 hdfs dfs -ls sfl 是在查看谁的内容,他是在查看这个目录 : /user/root/sfl

11 ,hdfs 的文件限制 : 数量限制

  1. 只能给 /sfl 目录上传 3 个文件 :
hdfs dfsadmin -setQuota 3 /sfl
  1. 试试看,往里边上传文件 :
hdfs dfs -put aa.txt /sfl
hdfs dfs -put bb.txt /sfl
hdfs dfs -put cc.txt /sfl
  1. 结果 : 只能上传 2 个文件。
  2. 原因 : hdfs 设计的时候,认为 /sfl 这个目录也算一个文件,所以要把自己也算上。
  3. 解除限制 :
hdfs dfsadmin -clrQuota /sfl
  1. 再上传 : 就可以了

12 ,hdfs 的文件限制 : 大小限制

  1. 只能往 /sfl 中存放 4k 的数据 :
hdfs dfsadmin -setSpaceQuota 4k /sfl
  1. 我们放一个 28k 的文件进去试试 :
hdfs dfs -put 28k.jpeg /sfl
  1. 结果
    报错
  2. 解除限制 :
hdfs dfsadmin -clrSpaceQuota /sfl
  1. 再上传 :就可以了

13 ,安全模式 :

  1. hdfs 集群刚启动的时候,默认 30s 钟的时间是处于安全期的。
  2. 状态 :在这个安全期的期间,只能查看,不能增删。
  3. 恢复正常 :只有过了 30s 之后,集群脱离了安全期,然后才可以对集群进行操作。
  4. 这期间做了什么 : DataNode 在启动的时候会向 namenode 汇报可用的block等状态,当整个系统达到安全标准时,HDFS 自动离开安全模式。
  5. 孙 : 安全期就相当于,我们在体育运动前,先活动活动筋骨,先不干活。
  6. 相关命令 : 最好不要人为操作它
    hadoop dfsadmin -safemode leave 退出安全模式
    hadoop dfsadmin -safemode enter 进入安全模式
    hadoop dfsadmin -safemode get 查看安全模式状态
  7. 实验 :
    1 ,进入安全模式 :hadoop dfsadmin -safemode enter
    2 ,删除文件 :hdfs dfs -rm /sfl/aa.txt ( 报错 )
    3 ,离开安全模式 :hadoop dfsadmin -safemode leave
    4 ,删除文件 : hdfs dfs -rm /sfl/aa.txt ( 正常 )

14 ,hadoop 基准测试 : 测试写入速度

  1. 目的 : 看看这个集群的文件读写速度够不够快。 ( 成压能力 )
    测试一下我们这个集群是否足够健康。
  2. 测试写入速度 :
    往 hdfs 存储 10 个文件,每个文件 10M ,看看它还身体怎么样,能不能轻松搞定 : 实际工作中,慢慢的往上增加值 :
cd /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce/
hadoop jar hadoop-mapreduce-client-jobclient-2.6.0-cdh5.14.0.jar TestDFSIO  -write -nrFiles 10 -fileSize 10MB
  1. 查看结果 :
    结果将保存在当前目录下 :
    13 ,hdfs 操作 : 命令行 ( 目录,文件,权限,限制,安全模式 )_第9张图片
  2. 结果查看 : cat TestDFSIO_results.log
    13 ,hdfs 操作 : 命令行 ( 目录,文件,权限,限制,安全模式 )_第10张图片
  3. 结果分析 : 翻译过来
    写入测试
    测试时间
    文件数量 : 10 个
    总大小 : 100M
    写入任务的平均吞吐量 : 0.8mb/s
    平均速度 :7.2 mb/s
    标准差 : 数学概念,表示稳定性。
    总体耗时 :125 秒
  4. 标准差 : 离散数学概念 ( 了解 )
    这个数值越小,表示,我们的系统越稳定。
    数值越大,离散程度越高,系统越不稳定。

15 ,hadoop 基准测试 : 测试读取速度

  1. 把刚才生成的文件删除掉 : rm -rf TestDFSIO_results.log
  2. 测试读取速度 : 读 10 个文件,每个 10M
hadoop jar hadoop-mapreduce-client-jobclient-2.6.0-cdh5.14.0.jar TestDFSIO -read -nrFiles 10 -fileSize 10MB
  1. 结果文件 :
    13 ,hdfs 操作 : 命令行 ( 目录,文件,权限,限制,安全模式 )_第11张图片
  2. 查看结果 : cat cat TestDFSIO_results.log
    13 ,hdfs 操作 : 命令行 ( 目录,文件,权限,限制,安全模式 )_第12张图片
  3. 结果分析 :
    读取测试
    测试时间
    文件数量 :10
    总大小 : 100m
    平均任务吞吐量 :32mb/s
    平均速度 : 48mb/s
    标准差 : 越小越稳定
    总体耗时 :25 秒

16 ,hadoop 基准测试 :清除测试数据

  1. 测试数据在这里 : /benchmarks/TestDFSIO
  2. 清除测试数据 :
hadoop jar hadoop-mapreduce-client-jobclient-2.6.0-cdh5.14.0.jar TestDFSIO -clean
  1. 结果 :
    /benchmarks 目录下没有文件和目录了。

你可能感兴趣的:(13 ,hdfs 操作 : 命令行 ( 目录,文件,权限,限制,安全模式 ))