栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hadoop(HDFS常考面试题以及一些开发命令)

Hadoop(HDFS常考面试题以及一些开发命令)

1. HDFS文件块大小
HDFS文件在物理上是分块存储的,块的大小可以通过配置参数来进行修改(dfs.blocksize),
在hadoop1.x中默认为64M,而在hadoop2.x/3.x中默认为128M。

问题:为什么一个块大小要设置成128呢?
这个时候有一个定理叫基于最佳传输损耗理论。
基于最佳传输损耗理论:在一次传输中,寻址时间为总传输时间的1%时,本次传输损耗最小,为最佳性价比传输。
而不论是对磁盘进行读操作还是写操作,都要先进行寻址,基于目前的硬件条件,普通磁盘写的速率大概为100M/s
寻址时间一般为10ms,因此总传输时间大概为1s,所以1s * 100M/s = 100M,而块的大小必须为2的n次方,而最接
近100M的是128M。

问题:为什么块的大小不能设置太大,也不能设置太小呢?
1. 块设置太大,从磁盘传输数据的时间会明显大于定位这个块开始位置的时间,导致程序在处理这块数据时,会非常慢
2. 块设置太小,会增加寻址时,程序一直在找块的开始位置。


总结:HDFS块大小的设置主要取决于磁盘传输速率(磁盘的读写速度)
2.HDFS的读写流程

1. 写数据流程

1. 客户端(HDFS client)创建Distributed FileSystem模块,该模块向NameNode请求上传文件,
   然后NameNode检查目标文件是否有权限,再检查目标文件是否存在,父目录是否存在。
2. NameNode返回客户端是否可以上传文件。
3. 客户端请求第一个块(Block(0-128M))上传到那几个DataNode服务器上。
4. NameNode向客户端返回三个节点,分别为DataNode1,DataNode2,DataNode3。
5. 客户端通过FSDataOutputStream模块向DataNode1请求上传数据,DataNode1收到请求后会继续调用DataNode2,
   DataNode2继续调用DataNode3,将通信管道建立起来。
6. DataNode1,DataNode2,DataNode3	逐级应答客户端。
7. 客户端通过FSDataOutputStream模块向DataNode1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存)
	以Packet为单位,DataNode1收到一个Packet就会传给DataNode2,DataNode2传给DataNode3,DataNode1
	每传一个Packet会放入一个应答队列等待应答。
8. 当一个Block传输完成时,客户端再次请求NameNode上传第二个Block的服务器(重复3-7步)。

2. 读数据流程

1)客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。   

2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。   

3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以packet为单位来做校验)。   

4)客户端以packet为单位接收,先在本地缓存,然后写入目标文件。
3.HDFS的Shell操作

1. 准备工作(在hadoop文件目录下)

    启动Hadoop集群

    sbin/start-dfs.sh
    sbin/start-yarn.sh
    

    -help: 输出这个命令参数

    hadoop fs -help rm
    

    创建 /sanguo文件夹

    hadoop fs -mkdir /sanguo
    

2. 上传

    -moveFromLocal:从本地剪切粘贴到HDFS

    hadoop fs -moveFromLocal  shuguo.txt /sanguo 
    

    -copyFromLocal:从本地文件系统中拷贝文件到HDFS路径上

    hadoop fs -copyFromLocal weiguo.txt /sanguo
    

    -put:等同于copyFromLocal,生产环境中更习惯用put

    hadoop fs -put wuguo.txt /sanguo
    

    -appendToFile:追加一个文件到已经存在的文件末尾

    hadoop fs -appendToFile liubei.txt /sanguo/shuguo.txt
    

3.下载

    -copyToLocal:从HDFS拷贝到本地

    hadoop fs -copyToLocal /sanguo/shuguo.txt ./
    

    -get:等同于copyToLocal,生产环境更习惯用get

    hadoop fs -get /sanguo/shuguo.txt ./shuguo2.txt
    

4. HDFS直接操作

    -ls:显示目录信息

    hadoop fs -ls /sanguo
    

    -cat:显示文件内容

    hadoop fs -cat /sanguo/shuguo.txt
    

    -chgrp,-chmod,-chown:Linux系统中的用法一样,修改文件所属权限

    hadoop fs -chmod 666 /sanguo/shuguo.txt
    hadoop fs -chown root:root /sanguo/shuguo.txt
    

    -mkdir:创建路径

    hadoop fs -mkdir /jinguo
    

    -cp:从HDFS一个路径拷贝到HDFS另一个路径

    hadoop fs -cp /sanguo/shuguo.txt /jinguo
    

    -mv:在HDFS目录中移动文件

    hadoop fs -mv /sanguo/wuguo.txt /jinguo
    

    -tail:显示一个文件末尾1kb的内容

    hadoop fs -tail /jinguo/shuguo.txt
    

    -rm:删除文件或文件夹

    hadoop fs -rm /sanguo/shuguo.txt
    

    -rm -r:递归删除目录及目录里面内容

    hadoop fs -rm -f /sanguo 
    

    -du:统计文件夹的大小信息

    hadoop fs -du -s -h /jinguo
    27 81 /jinguo                  (27表示文件大小,81表示27*3个副本)
      
    hadoop fs -du -h /jinguo
    14 42 /jinguo/shuguo.txt
    7 21 /jinguo/weiguo.txt
    6 18 /jinguo/wuguo.txt
    

    -setrep:设置HDFS文件的副本数量

    hadoop fs -setrep 10 /jinguo/shuguo.txt
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/762219.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号