0%

Hadoop性能调优Hadoop

在大数据处理场景中,Hadoop 集群的性能直接影响数据处理效率和资源利用率。性能调优需从操作系统底层到 Hadoop 组件参数进行全面优化,以下是详细的调优方向和实践建议。

操作系统参数调优

操作系统作为 Hadoop 运行的基础环境,其参数配置对集群稳定性和性能至关重要。

1. 增大文件打开限制上限

Hadoop 集群在运行过程中(尤其是 HDFS 和 MapReduce)会打开大量文件句柄,默认的系统文件打开限制可能无法满足需求,容易出现 “too many open files” 错误。

  • 调整方法:使用ulimit命令临时设置,或通过配置文件永久生效。

    • 临时设置:ulimit -n 65535(将单个进程最大文件句柄数设为 65535)。

    • 永久生效:修改/etc/security/limits.conf文件,添加以下配置:

      1
      2
      * soft nofile 65535
      * hard nofile 65535
    • 生效方式:重启服务器或重新登录用户。

2. 增大网络连接上限

阅读全文 »

Redis 持久化机制详解:RDB、AOF 与混合模式

Redis 作为内存数据库,数据默认存储在内存中,若发生宕机可能导致数据丢失。持久化机制通过将内存数据写入磁盘,确保数据可恢复。Redis 提供两种核心持久化方式:RDB(快照)AOF(Append Only File),4.0 版本后新增 混合模式,结合两者优势。本文基于 Redis 6.0.10 版本,详细解析这三种机制的原理、配置与优缺点。

RDB 持久化(Redis DataBase)

RDB 是 Redis 默认的持久化方式,通过定时生成内存数据的快照(二进制文件)实现持久化,恢复时通过加载快照文件还原数据。

核心原理

  • 快照生成:在指定时间间隔内,当写入操作满足触发条件时,Redis 会 fork 一个子进程,将内存数据完整写入临时文件,完成后替换旧快照文件(dump.rdb)。

  • Copy On Write(COW)fork 后父子进程共享内存数据,父进程处理新请求时,若修改数据会复制对应内存页(不影响子进程的快照生成),避免数据不一致。

    子进程在做数据持久化的过程中,只会进行遍历读取,但是父进程必须服务客户端请求,可能会对数据进行修改,此时使用COW(copy on write)机制,当父进程写数据时,将该内存页复制一份父进程来操作修改,其余的还是在共享内存内。随着父进程持续的修改数据,越来越多的共享页面被分离出来,内存会持续增长,但是最多也不会超过原有数据内存的2倍

    每一页是4K

配置参数(redis.conf)

RDB 配置位于 SNAPSHOTTING 模块,核心参数如下:

参数 作用 默认值
save <seconds> <changes> 触发快照的条件(多少秒内发生多少次修改),多条件为 “或” 关系。 save 900 1(15 分钟 1 次)、save 300 10(5 分钟 10 次)、save 60 10000(1 分钟 10000 次)
stop-writes-on-bgsave-error 若快照生成失败,是否停止写入操作(避免数据不一致)。 yes
rdbcompression 是否使用 LZF 算法压缩快照文件(节省空间,略增 CPU 开销)。 yes
rdbchecksum 是否对快照文件进行 CRC64 校验(确保完整性,略增性能损耗)。 yes
dbfilename 快照文件名称。 dump.rdb
dir 快照文件存储目录。 /usr/local/var/db/redis/

save 900 1 #15分钟内修改了1次
save 300 10 #5分钟内修改了10次
save 60 10000 #1分钟内修改了10000次

当达到条件时会触发bgsave命令

这个我测试了一下 save 300 3表示的是自上次生成rdb快照后,300s内如果有3次更改,在300s的时间节点时会触发一次bgsave命令,而不是写入3次后就立马触发

手动触发快照

  • save 命令:由主线程执行,会阻塞所有客户端请求(直到快照完成),生产环境慎用
  • bgsave 命令:后台执行(background save),fork 子进程处理快照,主线程继续响应请求,不阻塞服务。
阅读全文 »

Redis 核心优势及典型应用场景

Redis 作为高性能的键值对数据库,凭借其独特的设计和特性,在缓存、计数、实时排行榜等场景中被广泛应用。本文深入解析 Redis 为何能实现高速读写,并详细介绍其核心应用场景。

Redis 高性能的三大核心原因

Redis 之所以能支持每秒数万甚至数十万的读写操作,核心源于以下三点设计:

1. 基于内存的操作

  • 数据存储在内存中:Redis 将所有数据存储在内存(RAM)中,而内存的读写速度(微秒级)远高于磁盘(毫秒级)。
  • 避免磁盘 I/O 瓶颈:传统数据库(如 MySQL)需要频繁读写磁盘,而 Redis 的数据操作几乎不涉及磁盘 I/O(持久化操作除外,且可异步执行),因此延迟极低。

2. 单线程模型,避免上下文切换

  • 单线程处理命令:Redis 采用单线程模型处理所有客户端的命令请求(持久化、集群同步等操作由额外线程执行)。
  • 无上下文切换开销:多线程模型中,线程切换需要保存和恢复上下文(如寄存器状态、程序计数器),会消耗 CPU 资源;而单线程避免了这一开销,确保命令执行的连续性。
  • 注意:单线程不意味着 “并发能力差”,Redis 通过非阻塞 I/O 机制支持高并发(见下文)。

3. 非阻塞 I/O 多路复用机制

  • I/O 多路复用:Redis 使用 selectepoll(Linux)、kqueue(macOS)等 I/O 多路复用函数,允许单线程同时监听多个客户端连接的 I/O 事件(如 “可读”“可写”)。
  • 高效处理并发请求:当多个客户端同时发送请求时,Redis 无需为每个连接创建线程,而是通过事件循环(Event Loop)高效处理所有请求,避免了多线程的资源竞争。

Redis 的典型应用场景

Redis 的高性能和丰富的数据结构(字符串、哈希、列表、集合、有序集合等)使其适用于多种场景:

1. 缓存系统(最核心场景)

阅读全文 »

Redis 基本命令大全(基于 6.0.10 版本)

Redis 提供了丰富的命令用于数据操作、服务器管理和性能监控。本文基于 Redis 6.0.10 版本,整理了常用的核心命令,包括键操作、数据库管理、服务器监控等,帮助快速上手 Redis 操作。

连接与测试

测试连接

1
ping  # 成功返回 "PONG",验证客户端与服务器连接正常

键(Key)的基本操作

设置与获取值

1
2
3
4
5
# 设置键值对(字符串类型)
set key value # 示例:set name "redis"

# 获取键的值
get key # 示例:get name → 返回 "redis"

键的存在性与删除

1
2
3
4
5
# 判断键是否存在(返回 1 存在,0 不存在)
exists key # 示例:exists name

# 删除指定键(返回删除的键数量)
del key1 key2 # 示例:del name age

键的过期管理

阅读全文 »

Linux 网络命令大全:从配置到监控的完整指南

在 Linux 系统中,网络命令是管理网络、排查故障、监控连接的核心工具。无论是配置 IP 地址、测试网络连通性,还是分析网络瓶颈,掌握这些命令都能让你高效处理网络相关任务。本文将系统梳理常用网络命令,涵盖配置、查看、测试、分析等多个维度。

IP 配置:搭建网络基础

两种配置方式

(1)图形化工具 setup
1
setup  # 启动图形化配置工具,通过界面配置IP、子网掩码等

适合新手,无需手动编辑文件,直观易用。

(2)手动编辑配置文件

Linux 网卡配置文件位于 /etc/sysconfig/network-scripts,命名规则:

  • ifcfg-ethX:有线网卡(eth0 为第一块,eth1 为第二块);
  • ifcfg-wlanX:无线网卡;
  • ifcfg-ethX:X:虚拟网卡(如 eth0:1eth0 的子接口)。

配置文件关键参数

1
2
3
4
5
6
7
8
DEVICE="eth0"          # 网卡名称
BOOTPROTO=static # IP获取方式(static/dhcp/none)
TYPE=Ethernet # 网卡类型(以太网)
ONBOOT=yes # 开机启动
IPADDR=192.168.1.100 # IP地址
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.1.1 # 网关
DNS1=114.114.114.114 # DNS服务器(部分系统需单独配置)

生效配置

1
2
3
4
# 重启网络服务
service network restart
# 或重启网卡
ifdown eth0 && ifup eth0

临时配置:ifconfig 命令

阅读全文 »