大数据之hadoop3入门到精通(三)

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 大数据之hadoop3入门到精通(三)

大数据之hadoop3入门到精通(二);https://developer.aliyun.com/article/1535226

HDFS—核心参数

NameNode 内存生产配置

1)NameNode 内存计算

每个文件块大概占用 150byte,一台服务器 128G 内存为例,能存储多少文件块呢?

128 * 1024 * 1024 * 1024 / 150Byte ≈ 9.1 亿

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 占用内存

[atguigu@hadoop102 ~]$ jps
3088 NodeManager
2611 NameNode
3271 JobHistoryServer
2744 DataNode
3579 Jps
[atguigu@hadoop102 ~]$ jmap -heap 2611
Heap Configuration:
 MaxHeapSize = 1031798784 (984.0MB)

(3)查看 DataNode 占用内存

[atguigu@hadoop102 ~]$ jmap -heap 2744
Heap Configuration:
 MaxHeapSize = 1031798784 (984.0MB)

查看发现 hadoop102 上的 NameNode 和 DataNode 占用内存都是自动分配的,且相等。不是很合理。


(1)namenode最小值1G,每增加1000000个block,增加1G内存

(2)datanode最小值4G,block数,或者副本数升高,都应该调大datanode的值。一个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"

如果出现hadoop102: ERROR: Cannot set priority of namenode process 16849错误

在hadoop-env.sh中添加

HADOOP_SHELL_EXECNAME=root 
NameNode 心跳并发配置

1)hdfs-site.xml

<!-- NameNode 有一个工作线程池,用来处理不同 DataNode 的并发心跳以及客户端并发的元数据操作。对于大集群或者有大量客户端的集群来说,通常需要增大该参数。默认值是 10。-->
<property>
 <name>dfs.namenode.handler.count</name>
 <value>21</value>
</property>

企业经验:dfs.namenode.handler.count=20 × 𝑙𝑜𝑔𝑒(𝐶𝑙𝑢𝑠𝑡𝑒𝑟 𝑆𝑖𝑧𝑒),比如集群规模(DataNode 台数)为 3 台时,此参数设置为 21。可通过简单的 python 代码计算该值,代码如下。

[atguigu@hadoop102 ~]$ sudo yum install -y python
[atguigu@hadoop102 ~]$ python
Python 2.7.5 (default, Apr 11 2018, 07:36:10) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more 
information.
>>> import math
>>> print int(20*math.log(3))
21
>>> quit()

开启回收站配置

1)开启回收站功能参数说明


(1)默认值 fs.trash.interval = 0,0 表示禁用回收站;其他值表示设置文件的存活时间。


(2)默认值 fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为 0,则该值设置和 fs.trash.interval 的参数值相等。


(3)要求 fs.trash.checkpoint.interval <= fs.trash.interval。


2)启用回收站

修改 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 命令删除的文件才会走回收站。

hadoop fs -rm -r /user/atguigu/input 
2021-07-14 16:13:42,643 INFO fs.TrashPolicyDefault: Moved:'hdfs://hadoop102:9820/user/atguigu/input' to trash at:hdfs://hadoop102:9820/user/atguigu/.Trash/Current/user/atguigu /input

8)恢复回收站数据

hadoop fs -mv /user/atguigu/.Trash/Current/user/atguigu/input 
/user/atguigu/input

HDFS—集群压测

测试 HDFS 写性能
hadoop jar /opt/module/hadoop3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 128MB
测试 HDFS 读性能
hadoop jar /opt/module/hadoop-
3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 128MB

NameNode 多目录配置

1)NameNode 的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性

(1)在 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>

注意:因为每台服务器节点的磁盘情况不同,所以这个配置配完之后,可以选择不分发

(2)停止集群,删除三台节点的 data 和 logs 中所有数据。

(3)格式化集群并启动。

DataNode 多目录配置

1)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>

添加白名单

白名单:表示在白名单的主机 IP 地址可以,用来存储数据。

企业中:配置白名单,可以尽量防止黑客恶意访问攻击。

1)在 NameNode 节点的/opt/module/hadoop-3.1.3/etc/hadoop 目录下分别创建 whitelist 和blacklist 文件

vim whitelist
hadoop102
hadoop103

(2)创建黑名单

touch blacklist #保持空的就可以 后面要用

2)在 hdfs-site.xml 配置文件中增加 dfs.hosts 配置参数

<!-- 白名单 -->
<property>
 <name>dfs.hosts</name>
 <value>/opt/module/hadoop3.1.3/etc/hadoop/whitelist</value>
</property>
<!-- 黑名单 -->
<property>
 <name>dfs.hosts.exclude</name>
 <value>/opt/module/hadoop3.1.3/etc/hadoop/blacklist</value>
</property>

3)分发配置文件 whitelist,hdfs-site.xml


4)第一次添加白名单必须重启集群,不是第一次,只需要刷新 NameNode 节点即可


5)在 web 浏览器上查看 DN,http://hadoop102:9870/dfshealth.html#tab-datanode

6)在 hadoop104 上执行上传数据数据失败

hadoop fs -put NOTICE.txt /
• 1

7)二次修改白名单,增加 hadoop104

vim whitelist
#修改为如下内容
hadoop102
hadoop103
hadoop104

8)刷新 NameNode

hdfs dfsadmin -refreshNodes

9)在 web 浏览器上查看 DN,http://hadoop102:9870/dfshealth.html#tab-datanode

服役新服务器

环境准备

(1)在 hadoop100 主机上再克隆一台 hadoop105 主机

(2)修改 IP 地址和主机名称

(3)拷贝 hadoop102 的/opt/module 目录和/etc/profile.d/my_env.sh 到 hadoop105

(4)删除 hadoop105 上 Hadoop 的历史数据,data 和 log 数据

(5)配置 hadoop102 和 hadoop103 到 hadoop105 的 ssh 无密登录

服役新节点具体步骤

(1)直接启动 DataNode,即可关联到集群

hdfs --daemon start datanode
yarn --daemon start nodemanager

4)在白名单中增加新服役的服务器

(1)在白名单 whitelist 中增加 hadoop105,并重启集群

(2)分发

(3)刷新 NameNode

服务器间数据均衡

1)企业经验:


在企业开发中,如果经常在 hadoop102 和 hadoop104 上提交任务,且副本数为 2,由于数据本地性原则,就会导致 hadoop102 和 hadoop104 数据过多,hadoop103 存储的数据量小。


另一种情况,就是新服役的服务器数据量比较少,需要执行集群均衡命令。

2)开启数据均衡命令:

sbin/start-balancer.sh -threshold 10

对于参数 10,代表的是集群中各个节点的磁盘空间利用率相差不超过 10%,可根据实际情况进行调整。

3)停止数据均衡命令:

sbin/stop-balancer.sh

注意:由于 HDFS 需要启动单独的 Rebalance Server 来执行 Rebalance 操作,所以尽量不要在 NameNode 上执行 start-balancer.sh,而是找一台比较空闲的机器。


黑名单退役服务器

黑名单:表示在黑名单的主机 IP 地址不可以,用来存储数据。

企业中:配置黑名单,用来退役服务器。

1)编辑/opt/module/hadoop-3.1.3/etc/hadoop 目录下的 blacklist 文件

vim blacklist
hadoop105#添加退役节点

注意:如果白名单中没有配置,需要在 hdfs-site.xml 配置文件中增加 dfs.hosts 配置参数

<!-- 黑名单 -->
<property>
 <name>dfs.hosts.exclude</name>
 <value>/opt/module/hadoop3.1.3/etc/hadoop/blacklist</value>
</property>

2)分发配置文件 blacklist,hdfs-site.xml


3)第一次添加黑名单必须重启集群,不是第一次,只需要刷新 NameNode 节点即可


4)检查 Web 浏览器,退役节点的状态为 decommission in progress(退役中),说明数据节点正在复制块到其他节点


5)等待退役节点状态为 decommissioned(所有块已经复制完成),停止该节点及节点资源管理器。注意:如果副本数是 3,服役的节点小于等于 3,是不能退役成功的,需要修改副本数后才能退役


6)如果数据不均衡,可以用命令实现集群的再平衡

HDFS—故障排除

NameNode 故障处理

1)需求:


NameNode 进程挂了并且存储的数据也丢失了,如何恢复 NameNode


2)故障模拟


(1)kill -9 NameNode 进程


(2)删除 NameNode 存储的数据(/opt/module/hadoop-3.1.3/data/tmp/dfs/name)


3)问题解决

(1)拷贝 SecondaryNameNode 中数据到原 NameNode 存储数据目录

scp -r yu@hadoop104:/opt/module/hadoop3.1.3/data/dfs/namesecondary/* ./

(2)重新启动 NameNode

hdfs --daemon start namenode

(3)向集群上传一个文件


集群安全模式&磁盘修复

1)安全模式:文件系统只接受读数据请求,而不接受删除、修改等变更请求


2)进入安全模式场景


NameNode 在加载镜像文件和编辑日志期间处于安全模式;


NameNode 再接收 DataNode 注册时,处于安全模式


3)退出安全模式条件


dfs.namenode.safemode.min.datanodes:最小可用 datanode 数量,默认 0


dfs.namenode.safemode.threshold-pct:副本数达到最小要求的 block 占系统总 block 数的百分比,默认 0.999f。(只允许丢一个块)


dfs.namenode.safemode.extension:稳定时间,默认值 30000 毫秒,即 30 秒

4)基本语法

bin/hdfs dfsadmin -safemode get
bin/hdfs dfsadmin -safemode enter
bin/hdfs dfsadmin -safemode leave
bin/hdfs dfsadmin -safemode wait

5)案例 1:启动集群进入安全模式


(1)重新启动集群


(2)集群启动后,立即来到集群上删除数据,提示集群处于安全模式


6)案例 2:磁盘修复


需求:数据块损坏,进入安全模式,如何处理


( 1 ) 分 别 进 入 hadoop102 、 hadoop103 、 hadoop104 的 /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1015489500-192.168.10.102-1611909480872/current/finalized/subdir0/subdir0 目录,统一删除某 2 个块信息

xcall rm -rf blk_1073741826_1002.meta blk_1073741827_1003.meta

(2)重新启动集群

(3)观察 http://hadoop102:9870/dfshealth.html#tab-overview

(4)离开安全模式

bin/hdfs dfsadmin -safemode leave

(5)观察 http://hadoop102:9870/dfshealth.html#tab-overview

(6)将元数据删除

(7)观察 http://hadoop102:9870/dfshealth.html#tab-overview,集群已经正常

7)案例 3:

需求:模拟等待安全模式

(1)查看当前模式

hdfs dfsadmin -safemode get

(2)先进入安全模式

  • 1

(3)创建并执行下面的脚本

vim safemode.sh
##脚本
#!/bin/bash
hdfs dfsadmin -safemode wait
hdfs dfs -put /opt/module/hadoop-3.1.3/README.txt /
##
chmod 777 safemode.sh
./safemode.sh

(4)再打开一个窗口,执行

bin/hdfs dfsadmin -safemode leave

(5)再观察上一个窗口

HDFS—集群迁移

Apache 和 Apache 集群间数据拷贝

采用 distcp 命令实现两个 Hadoop 集群之间的递归数据复制

bin/hadoop distcp hdfs://hadoop102:8020/user/atguigu/hello.txt
hdfs://hadoop105:8020/user/atguigu/hello.txt

MapReduce 生产经验

测试 MapReduce 计算性能

(1)使用 RandomWriter 来产生随机数,每个节点运行 10 个 Map 任务,每个 Map 产生大约 1G 大小的二进制随机数

hadoop jar /opt/module/hadoop-
3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-
3.1.3.jar randomwriter random-data

(2)执行 Sort 程序

hadoop jar /opt/module/hadoop-
3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-
3.1.3.jar sort random-data sorted-data

(3)验证数据是否真正排好序了

hadoop jar /opt/module/hadoop-
3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar testmapredsort -sortInput random-data -sortOutput sorted-data


相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
6天前
|
SQL 存储 分布式计算
ODPS开发大全:入门篇(1)
ODPS开发大全:入门篇
43 14
|
6天前
|
SQL 存储 分布式计算
ODPS开发大全:入门篇(3)
ODPS开发大全:入门篇
32 13
|
6天前
|
SQL 分布式计算 MaxCompute
ODPS开发大全:入门篇(2)
ODPS开发大全:入门篇
32 14
|
21天前
|
分布式计算 Hadoop Java
优化大数据处理:Java与Hadoop生态系统集成
优化大数据处理:Java与Hadoop生态系统集成
|
27天前
|
存储 分布式计算 大数据
Hadoop 生态圈中的组件如何协同工作来实现大数据处理的全流程
Hadoop 生态圈中的组件如何协同工作来实现大数据处理的全流程
|
1月前
|
分布式计算 资源调度 Hadoop
大数据Hadoop集群部署与调优讨论
大数据Hadoop集群部署与调优讨论
|
11天前
|
分布式计算 大数据 Java
大数据开发语言Scala入门
大数据开发语言Scala入门
|
13天前
|
IDE 大数据 Java
「AIGC」大数据开发语言Scala入门
Scala,融合OOP和FP的多范式语言,在JVM上运行,常用于大数据处理,尤其与Apache Spark配合。要开始学习,安装Scala,选择IDE如IntelliJ。基础包括变量、数据类型、控制结构、函数。Scala支持类、对象、不可变数据结构、模式匹配和强大的并发工具。利用官方文档、教程、社区资源进行学习,并通过实践提升技能。
23 0
|
19天前
|
分布式计算 Hadoop 大数据
优化大数据处理:Java与Hadoop生态系统集成
优化大数据处理:Java与Hadoop生态系统集成
|
3天前
|
SQL 机器学习/深度学习 分布式计算
MaxCompute产品使用合集之数据删除之后,是否支持回滚
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。