HDFS基础
https://yellow520.blog.youkuaiyun.com/article/details/115484893
HDFS读写流程
写数据流程
客户端只写一次,DataNode写副本
当一个Block传完后,客户端再次请求NameNode上传下一个Block(重复2.3、2.4、4)
读数据流程
读写基准测试
写基准测试
hadoop jar \
$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar \
TestDFSIO -write -nrFiles 10 -fileSize 128MB
读基准测试
hadoop jar \
$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar \
TestDFSIO -read -nrFiles 10 -fileSize 128MB
| 参数 | 说明 |
|---|---|
-nrFiles | 文件数 |
-fileSize | 文件大小 |
测试结果截图
删除基准测试产生的文件
hadoop fs -rm -r /benchmarks
| en | 🔉 | cn |
|---|---|---|
| benchmark | ˈbentʃmɑːrk | n. 基准 |
| deviation | ˌdiːviˈeɪʃn | n. 偏差;误差;背离 |
| CST | Central Standard Time | (美)中央时区 |
安全模式相关命令
# 查看安全模式
hdfs dfsadmin -safemode get
# 进入安全模式
hdfs dfsadmin -safemode enter
# 离开安全模式
hdfs dfsadmin -safemode leave
# 等待安全模式
hdfs dfsadmin -safemode wait
HDFS小文件
-
描述:
HDFS上每个文件都要在NameNode建立一个索引,索引的大小约为150byte
当小文件比较多的时候,就会产生很多的索引文件 -
不良影响:
· 增加NameNode内存占用
· 索引文件过大使得索引速度变慢
· MR计算时,每个小文件都会起到一个MapTask,占用大量计算资源 -
解决方案:
· 在数据采集的时候,就将小文件或小批数据合成大文件再上传HDFS
· 用har归档,将小文件归档
· MR用CombineTextInputFormat来提前合并
· 有小文件场景开启JVM重用
HDFS优化(全部待验)
NAMENODE和DATANODE内存
hadoop-env.sh
export HDFS_NAMENODE_OPTS="-Dhadoop.security.logger=INFO,RFAS -Xmx1024m"
export HDFS_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS -Xmx1024m"
DataNode负责把数据存储到DataNode节点的硬盘上,以数据块的形式
数据块会占用NameNode内存,数据越多NameNode内存占用就会越大
2版本的Hadoop要配置足够大的NameNode内存,3版本的Hadoop的NameNode内存是动态分配的
NameNode有一个工作线程池,默认值是10
hdfs-site.xml
<!-- NameNode有一个工作线程池,默认值是10 -->
<property>
<name>dfs.namenode.handler.count</name>
<value>21</value>
</property>
配置垃圾回收时间为60分钟
core-site.xml
<!-- 配置垃圾回收时间为60分钟 -->
<property>
<name>fs.trash.interval</name>
<value>60</value>
</property>
NameNode多目录配置:每个目录存放内容相同,增加了可靠性
hdfs-site.xml
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name1,file://${hadoop.tmp.dir}/dfs/name2</value>
</property>
停止集群,删除三台节点的data和logs中所有数据
cluster.py rm -rf data/ logs/
格式化namenode
hdfs namenode -format
DataNode多目录配置
hdfs-site.xml
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data1,file://${hadoop.tmp.dir}/dfs/data2</value>
</property>
集群数据均衡之磁盘间数据均衡
增加硬盘后,刚加载的硬盘没有数据,可进行硬盘数据均衡
- 生成均衡计划
hdfs diskbalancer -plan hadoop102
- 执行均衡计划
hdfs diskbalancer -execute hadoop102.plan.json
- 查看当前均衡任务的执行情况
hdfs diskbalancer -query hadoop102
- 取消均衡任务
hdfs diskbalancer -cancel hadoop102.plan.json
服务器间数据均衡
如图各个节点的数据不均衡
start-balancer.sh -threshold 10
10表示集群中各个节点的磁盘空间利用率相差不超过10%
停止服务器间数据均衡
stop-balancer.sh
纠删码
HDFS多副本能提高数据可靠性,但带来了冗余开销
纠删码可以节省约50%的存储空间
查看文件大小
hadoop fs -du -s -h
hadoop fs -du+路径
-s全称可能是summarize,计算总数-h全称可能是human-readable,自动显示单位- 第一列是不含副本的文件大小
- 第二列是是含副本的,副本数是3,
672.5M是224.2M的3倍
查看可用空间
hadoop fs -df -h
Size是总空间,Used是已经使用的空间,Available是可用空间,Use%是使用率
df结果不等于du( 678.3 M > 672.5 M 678.3M>672.5M 678.3M>672.5M)Used+Available≠SizeSize略小于三个节点的硬盘大小( 106.0 G < 40 G + 40 G + 40 G 106.0G<40G+40G+40G 106.0G<40G+40G+40G)Available略小于三个节点的硬盘可用空间( 74.0 G < 15 G + 30 G + 30 G 74.0G<15G+30G+30G 74.0G<15G+30G+30G)









885



被折叠的 条评论
为什么被折叠?



