# Hadoop 筛选数据并删除(HDFS + Hive 两种方案)

Borter
新星创作者: Java技术领域
优质创作者: 学术研究与理论基础技术领域
2026-04-13 14:58:41
# Hadoop 筛选数据并删除(HDFS + Hive 两种方案)
在 Hadoop 中**筛选数据删除**分两种最常用场景:
1. **HDFS 原始文件**:直接删除符合条件的文件/行
2. **Hive 表数据**:通过 SQL 筛选后删除(企业最常用)

我给你整理了**直接可用、零门槛**的操作方案,你按需使用。

---

## 一、HDFS 原始文件:筛选行并删除(覆盖/重写)
HDFS 不支持**直接修改文件**,正确做法是:
**筛选出需要保留的数据 → 写入新文件 → 删除旧文件 → 重命名**

### 命令示例(筛选并删除含 `delete` 的行)
```bash
# 1. 筛选保留不含 delete 的行,输出到临时文件
hadoop fs -cat /user/data/input.txt | grep -v "delete" | hadoop fs -put - /user/data/temp.txt

# 2. 删除原文件
hadoop fs -rm /user/data/input.txt

# 3. 临时文件重命名为原文件
hadoop fs -mv /user/data/temp.txt /user/data/input.txt
```

### 按字段筛选(比如第 2 列 = 无效 则删除)
```bash
hadoop fs -cat /user/data/data.csv | awk -F ',' '$2 != "无效"' | hadoop fs -put - /user/data/new_data.csv
```

---

## 二、Hive 表:筛选数据删除(企业标准方案)
Hive 分**内部表/外部表**,删除语法不同。

### 1. 筛选删除指定行(DELETE,Hive 2.0+ 支持)
```sql
-- 筛选条件:id=100 或 status='delete' 的数据删除
DELETE FROM 表名
WHERE id = 100 OR status = 'delete';
```

### 2. 分区表:按分区删除(最高效,推荐)
```sql
-- 删除 2025-12-01 分区
ALTER TABLE 表名 DROP PARTITION (dt='2025-12-01');
```

### 3. 外部表:安全删除(只删数据,不删表)
```sql
-- 覆盖写入:只保留符合条件的数据
INSERT OVERWRITE TABLE 表名
SELECT * FROM 表名
WHERE 保留条件;
```

---

## 三、批量删除 HDFS 符合条件的文件
如果你要**删除文件名包含 2025-12 的文件**:
```bash
hadoop fs -rm /user/data/*2025-12*
```

删除 7 天前的旧文件:
```bash
hadoop fs -ls /user/data | awk '$1 ~ /^d/ {print $8}' | xargs -I {} hadoop fs -rm -r {}
```

---

## 四、安全提醒(必看)
1. **删除前先查询确认**
   ```sql
   SELECT * FROM 表名 WHERE 筛选条件;
   ```
2. **HDFS 删除不可恢复**,重要数据先备份
   ```bash
   hadoop fs -cp 原路径 备份路径
   ```
3. **分区表优先删分区**,比逐行删除快 100 倍

---

### 总结
1. **HDFS 文件**:筛选保留 → 写入新文件 → 替换原文件
2. **Hive 表**:`DELETE WHERE` 删行 / `DROP PARTITION` 删分区
3. **外部表**:用 `INSERT OVERWRITE` 安全覆盖删除

你可以告诉我:
- 是 **HDFS 文件** 还是 **Hive 表**
- 筛选条件是什么

我可以直接给你**可复制执行的精准命令**。

 

...全文
66 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

8

社区成员

发帖
与我相关
我的任务
社区描述
Begin here!
团队开发 技术论坛(原bbs) 广东省·东莞市
社区管理员
  • Bol5261
  • Caf5261
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

Java是一种广泛使用的编程语言,它是由Sun Microsystems(现在是Oracle Corporation的一部分)开发的。Java是一种静态类型的、类基础的、并发性的、面向对象的编程语言。以下是一些Java公告:

1. Java 11已经发布:Java 11是Java的一个主要版本,于2018年9月25日发布。它包含了许多新的功能和改进,例如本地变量类型推断、改进的并发API、新的日期和时间API等。

2. Java 8是迄今为止最流行的Java版本之一:Java 8是Java的一个主要版本,于2014年3月18日发布。它引入了Lambda表达式和Stream API,使得Java在处理集合和函数式编程方面更加简单和高效。

3. Java Enterprise Edition 8已经发布:Java Enterprise Edition 8是Java企业版的一个主要版本,于2013年9月4日发布。它引入了Java Transaction API(JTA)和Java Persistence API(JPA)的更新,以及其他一些新的特性和改进。

4. Java MicroProfile已经发布:Java MicroProfile是一种基于Java Enterprise Edition的规范集合,旨在为构建微服务提供一组轻量级的、可扩展的Java API。它包括了一些用于开发微服务的API,例如JAX-RS 2.0、CDI、JSON-P等。

5. JavaFX已经集成到Java 8中:JavaFX是一种用于构建富客户端应用程序的Java库。从Java 8开始,JavaFX已经被集成到Java平台中,使得开发人员可以更容易地使用Java来创建图形用户界面。

以上是一些Java公告,包括新版本的发布、新特性的引入以及Java平台的更新等。

试试用AI创作助手写篇文章吧