0%

hadoop历史服务器详解:配置、启动与日志查询

在 YARN 集群中,默认情况下无法通过 ResourceManager Web UI 查看已完成作业的历史日志。历史服务器(JobHistoryServer)的作用是 收集、存储和展示 MapReduce 作业的历史运行日志,帮助用户追溯作业执行详情(如任务耗时、失败原因)。本文将详细解析历史服务器的配置方法、启动流程及日志查询方式。

历史服务器

历史服务器的核心作用

在未配置历史服务器时,YARN 的 ResourceManager Web UI 仅能显示当前运行中的作业,已完成作业的日志无法直接访问。历史服务器解决了以下问题:

  • 追溯历史作业:存储已完成作业的配置、统计信息和任务日志;
  • 问题排查:通过历史日志分析作业失败原因(如内存溢出、数据倾斜);
  • 性能优化:基于历史作业的运行指标(如 Map/Reduce 耗时)优化资源配置。

历史服务器配置步骤

核心配置参数

历史服务器的配置需在 mapred-site.xml 中完成,关键参数如下:

配置参数 含义 默认值 推荐配置
mapreduce.jobhistory.address 历史服务器 RPC 地址(用于接收作业历史数据) 0.0.0.0:10020 保持默认或指定节点(如 hadoop1:10020
mapreduce.jobhistory.webapp.address 历史服务器 Web UI 地址 0.0.0.0:19888 保持默认或指定节点(如 hadoop1:19888
mapreduce.jobhistory.intermediate-done-dir 作业运行时临时历史日志存储目录(HDFS) /mr-history/tmp 保持默认或自定义路径
mapreduce.jobhistory.done-dir 作业完成后历史日志归档目录(HDFS) /mr-history/done 保持默认或自定义路径

配置文件修改

编辑 $HADOOP_HOME/etc/hadoop/mapred-site.xml,添加以下配置:

阅读全文 »

hadoop三种运行模式详解:从单机调试到集群部署

Hadoop 提供三种运行模式,分别适配 开发调试、功能验证、生产环境 不同场景。本文将详细解析单机模式、伪分布式模式和完全分布式模式的配置方法、适用场景及核心差异,帮助读者快速搭建符合需求的 Hadoop 环境。

Hadoop 运行模式概述

Hadoop 的三种运行模式本质上是 集群规模和资源隔离程度 的差异,核心组件(HDFS、YARN、MapReduce)的启动方式和交互逻辑随模式变化:

模式 核心特点 适用场景 组件启动情况
单机模式 无分布式进程,所有组件运行在单个 JVM 中 开发调试、单元测试 无守护进程(NameNode、DataNode 等均不启动)
伪分布式模式 单个节点模拟集群,所有组件以守护进程形式运行 功能验证、小规模测试 NameNode、DataNode、ResourceManager 等均启动(单节点)
完全分布式模式 多节点组成集群,组件分布在不同物理机 生产环境、大规模数据处理 组件分布式部署(如 NameNode 在主节点,DataNode 在从节点)

通用前置配置

无论哪种模式,均需先配置 Java 环境 和 Hadoop 环境变量:

配置 JAVA_HOME

修改 hadoop-env.sh(位于 $HADOOP_HOME/etc/hadoop/),指定 Java 安装路径:

1
2
3
4
5
# 编辑配置文件  
vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh

# 添加 Java 路径(需替换为实际路径)
export JAVA_HOME=/usr/local/jdk1.8.0_261
阅读全文 »

Java 过滤器(Filter):Java Web 中的请求与响应拦截器

过滤器(Filter)是 Java Web 中用于拦截和处理请求 / 响应的组件,基于 Servlet 容器的函数回调机制工作。它可以在请求到达目标资源(如 Servlet、JSP)前预处理请求,或在响应返回客户端前处理响应,常用于身份验证、日志记录、数据转换等场景。本文将详细解析 Filter 的工作原理、使用方式及典型应用。

Filter 核心概念与作用

什么是 Filter?

Filter 是实现 javax.servlet.Filter 接口的 Java 类,由 Servlet 容器管理,主要作用包括:

  • 请求拦截:在请求到达目标资源前进行处理(如验证登录状态、过滤非法参数)。
  • 响应处理:在响应返回客户端前进行处理(如压缩数据、添加统一响应头)。
  • 链式处理:多个 Filter 可组成过滤器链,按顺序对请求 / 响应进行多级处理。

常见 Filter 类型

根据功能,Filter 可分为以下类型:

  • 身份验证过滤器:验证用户登录状态,未登录则重定向到登录页。
  • 日志过滤器:记录请求 URL、访问时间、客户端 IP 等信息。
  • 数据压缩过滤器:对响应数据进行 GZIP 压缩,减少传输量。
  • 编码过滤器:统一设置请求 / 响应的字符编码(如 UTF-8)。
  • XSS 过滤器:过滤请求中的恶意脚本,防止跨站脚本攻击。

Filter 接口与生命周期

Filter 接口核心方法

阅读全文 »

hadoop操作Parquet 文件详解

在 Hadoop 生态中,Parquet 作为一种列式存储格式,凭借其高效的压缩率和查询性能,被广泛应用于大数据处理场景。当数据存储格式从 Text 转为 Parquet 后,如何正确读取 Parquet 文件成为关键问题。本文将详细介绍 Hadoop 读取 Parquet 文件的方法及相关注意事项。

依赖配置

读取 Parquet 文件前,需在项目中添加必要的 Parquet 依赖。以下是 Maven 配置示例:

1
2
3
4
5
6
7
8
9
10
11
<!--添加Parquet依赖-->
<dependency>
<groupId>org.apache.parquet</groupId>
<artifactId>parquet-column</artifactId>
<version>1.8.1</version>
</dependency>
<dependency>
<groupId>org.apache.parquet</groupId>
<artifactId>parquet-hadoop</artifactId>
<version>1.8.1</version>
</dependency>

注意:需确保 Parquet 依赖版本与 Hadoop 版本兼容,避免出现版本冲突问题(如 Guava 库版本不一致等)。

核心读取代码实现

Parquet 文件的读取主要通过自定义 Mapper 来实现,核心在于正确配置输入格式和解析 Parquet 数据。

阅读全文 »

请求转发与重定向:Java Web 中的页面跳转机制

在 Java Web 开发中,页面跳转是常见需求,主要通过请求转发(Forward)请求重定向(Redirect) 两种方式实现。它们在原理、使用场景和特性上有显著区别,理解这些差异对构建高效的 Web 应用至关重要。本文将详细解析两种机制的实现、区别及适用场景。

请求转发(Forward)

请求转发是指服务器收到客户端请求后,将请求 “转发” 给内部另一个资源(如 Servlet、JSP)处理,最终由目标资源生成响应返回给客户端。整个过程在服务器内部完成,客户端感知不到中间转发步骤。

实现方式

通过 HttpServletRequestgetRequestDispatcher() 方法获取 RequestDispatcher 对象,再调用其 forward() 方法实现转发:

1
2
// 请求转发到 /targetServlet
request.getRequestDispatcher("/targetServlet").forward(request, response);

RequestDispatcher 接口

RequestDispatcher 由 Servlet 容器创建,用于封装目标资源并提供转发或包含功能,核心方法:

  • forward(request, response):将请求转发到目标资源,目标资源的响应会直接返回给客户端。
  • include(request, response):将目标资源的响应包含到当前响应中(如页面片段复用)。

接口中定义了多个常量(如 FORWARD_REQUEST_URIINCLUDE_CONTEXT_PATH),用于在转发 / 包含时传递原始请求的元信息(如 URI、路径等)。

转发的特性

  • 一次请求:客户端仅发起一次请求,服务器内部转发,requestresponse 对象在整个过程中复用。
  • 地址栏不变:客户端地址栏显示的仍是初始请求的 URL,不显示目标资源的路径。
  • 共享 request 数据:转发过程中,requestattribute 可在多个资源间共享(通过 setAttribute/getAttribute)。
  • 仅限内部资源:只能转发到当前 Web 应用内的资源(如 /target.jsp/servlet/demo),无法跨应用或跨域。
  • 路径规则:转发路径中的 / 代表当前 Web 应用的根目录(如 /target 等价于 http://localhost:8080/应用名/target)。
阅读全文 »