1、HDFS—核心参数
1.1 NameNode 内存生产配置
1、NameNode内存计算
每个文件块大概占用150byte,一台服务器128G内存为例,能储存多少文件块呢?
12810241024*1024/150Byte ≈ 9.1 亿
G M KB Byte
2、Hadoop2.x系列,配置 NameNode 内存
NameNode 内存默认 2000m,如果服务器内存 4G,NameNode 内存可以配置 3g。在hadoop-env.sh 文件中配置如下。
HADOOP_NAMENODE_OPTS=-Xmx3072m
3、Hadoop3.x 系列,配置 NameNode 内存
(1)hadoop-env.sh 中描述 Hadoop 的内存是动态分配的
# The maximum amount of heap to use (Java -Xmx). If no unit # is provided, it will be converted to MB. Daemons will # prefer any Xmx setting in their respective _OPT variable. # There is no default; the JVM will autoscale based upon machine # memory size. # export HADOOP_HEAPSIZE_MAX= # The minimum amount of heap to use (Java -Xms). If no unit # is provided, it will be converted to MB. Daemons will # prefer any Xms setting in their respective _OPT variable. # There is no default; the JVM will autoscale based upon machine # memory size. # export HADOOP_HEAPSIZE_MIN= HADOOP_NAMENODE_OPTS=-Xmx102400m
(2)查看NameNode占用内存
提示:要先启动(查看NameNode的进程号)jps
jmap -heap 2611
(3)查看DataNode占用内存
注意:查看发现 hadoop102 上的 NameNode 和 DataNode 占用内存都是自动分配的,且相等。不是很合理。
合理分配:
NameNode最小值是1G,每增加1000000个block,增加1G内存。
一个DataNode上额副本总数低于4000000,调为4G,超过4000000,每增加1000000,增加1G。
具体修改:hadoop-env.sh
export HDFS_NAMENODE_OPTS="-Dhadoop.security.logger=INFO,RFAS - Xmx1024m" export HDFS_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS -Xmx1024m"
1.2 NameNode 心跳并发装置
1、hdfs-site.xml
The number of Namenode RPC server threads that listen to requests from clients. If dfs.namenode.servicerpc-address is not configured then Namenode RPC server threads listen to requests from all nodes. NameNode 有一个工作线程池,用来处理不同 DataNode 的并发心跳以及客户端并发 的元数据操作。 对于大集群或者有大量客户端的集群来说,通常需要增大该参数。默认值是 10。 <property> <name>dfs.namenode.handler.count</name> <value>21</value> </property
企业经验:dfs.namenode.handler.count=20 × 𝑙𝑜𝑔𝑒
𝐶𝑙𝑢𝑠𝑡𝑒𝑟 𝑆𝑖𝑧𝑒,比如集群规模(DataNode 台
数)为 3 台时,此参数设置为 21。
1.3 开启回收站配置
开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。
1、回收站机制
2、开启回收站功能参数说明
(1)默认值 fs.trash.interval = 0,0 表示禁用回收站;其他值表示设置文件的存活时间。
(2)默认值 fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为 0,则该
值设置和 fs.trash.interval 的参数值相等。
(3)要求 fs.trash.checkpoint.interval <= fs.trash.interval。
3、启用回收站
修改 core-site.xml,配置垃圾回收时间为 1 分钟。
<property> <name>fs.trash.interval</name> <value>1</value> </property>
4、查看回收站
回收站目录在 HDFS 集群中的路径:/user/atguigu/.Trash/….
5、注意:通过网页直接删除的文件也不会走回收站
6、通过程序删除的文件不会经过回收站,需要调用moveToTrash()才进入回收站。
Trash trash = New Trash(conf); trash.moveToTrash(path);
7、只有在命令行利用 hadoop fs -rm 命令删除的文件才会走回收站。
8、恢复回收站数据(利用hadoop fs -mv)
2、HDFS—多目录
2.1 NameNode 多目录配置
1、NameNode的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性。
2、具体配置如下:
1、在 hdfs-site.xml 文件中添加如下内容
<name>dfs.namenode.name.dir</name> <value>file://${hadoop.tmp.dir}/dfs/name1,file://${hadoop.tmp. dir}/dfs/name2</value> </property>
注意:因为每台服务器节点的磁盘情况不一样,所以这个配置配完之后,可以选择不分发。
2、停止集群,删除三台节点的 data 和 logs 中所有数据。
3、格式化集群并启动。
2.2 DataNode多目录配置
1、DataNode 可以配置成多个目录,每个目录存储的数据不一样(数据不是副本)
2、具体配置如下:
在 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>
2.3 集群数据均衡之磁盘间数据均衡
生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x 新特性)
1、生产均衡计划(一个磁盘,不会生成计划)
hdfs diskbalancer -plan hadoop103
2、执行均衡计划
hdfs diskbalancer -execute hadoop103.plan.json
3、查看当前均衡任务的执行情况
hdfs diskbalancer -query hadoop103
4、取消均衡任务
hdfs diskbalancer -cancel hadoop103.plan.json
3、HDFS—集群扩容及缩容
3.1 添加白名单
白名单:表示在白名单的主机IP地址可以用来储存数据。
配置白名单步骤如下:
1、在 NameNode 节点的/opt/module/hadoop3.1.3/etc/hadoop 目录下分别创建whitelist 和blacklist 文件。
(1)创建白名单
vim whitelist
在 whitelist 中添加如下主机名称,假如集群正常工作的节点为 102 103。
(2)创建黑名单
touch blacklist
保持空就行
2、在 hdfs-site.xml 配置文件中增加 dfs.hosts 配置参数
<!-- 白名单 --> <property> <name>dfs.hosts</name> <value>/opt/module/hadoop-3.1.3/etc/hadoop/whitelist</value> </property> <!-- 黑名单 --> <property> <name>dfs.hosts.exclude</name> <value>/opt/module/hadoop-3.1.3/etc/hadoop/blacklist</value> </property>
3、分发配置文件whitelist,hdfs-site.xml
4、第一次添加白名单必须重启集群,不是第一次,只需要刷新NameNode节点即可。
5、在 web 浏览器上查看 DN,http://hadoop102:9870/dfshealth.html#tab-datanode