大数据之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;
相关文章
|
2月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
186 6
|
2月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
78 2
|
2天前
|
存储 分布式计算 大数据
Flume+Hadoop:打造你的大数据处理流水线
本文介绍了如何使用Apache Flume采集日志数据并上传至Hadoop分布式文件系统(HDFS)。Flume是一个高可用、可靠的分布式系统,适用于大规模日志数据的采集和传输。文章详细描述了Flume的安装、配置及启动过程,并通过具体示例展示了如何将本地日志数据实时传输到HDFS中。同时,还提供了验证步骤,确保数据成功上传。最后,补充说明了使用文件模式作为channel以避免数据丢失的方法。
24 4
|
1月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
110 2
|
1月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
75 1
|
2月前
|
分布式计算 Hadoop 大数据
大数据体系知识学习(一):PySpark和Hadoop环境的搭建与测试
这篇文章是关于大数据体系知识学习的,主要介绍了Apache Spark的基本概念、特点、组件,以及如何安装配置Java、PySpark和Hadoop环境。文章还提供了详细的安装步骤和测试代码,帮助读者搭建和测试大数据环境。
74 1
|
2月前
|
SQL 分布式计算 大数据
大数据平台的毕业设计01:Hadoop与离线分析
大数据平台的毕业设计01:Hadoop与离线分析
159 0
|
2月前
|
存储 机器学习/深度学习 分布式计算
大数据技术——解锁数据的力量,引领未来趋势
【10月更文挑战第5天】大数据技术——解锁数据的力量,引领未来趋势
|
1月前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
290 7
|
1月前
|
存储 分布式计算 大数据
大数据 优化数据读取
【11月更文挑战第4天】
45 2
下一篇
DataWorks