用 Hadoop 魔法探索废墟数据

HadoopHadoopBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在一片荒凉的沙漠废墟中,一个孤独的身影在废弃已久的城市遗迹中穿行。这里是废墟艺术家(Ruin Artist)的领域,他们从衰败中看到美,从被遗忘的事物中发现潜力。他们的目标是揭开废墟中隐藏的故事,通过艺术为摇摇欲坠的建筑注入新的生命。

废墟艺术家偶然发现了一批古老的数据,这些数据散落在一座曾经宏伟的图书馆的各个碎片中。为了理解这些丰富的信息并在这片混乱中建立秩序,他们必须利用 Hadoop 及其强大的数据处理能力,特别是 Hive 中的 group by 功能。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hadoop(("Hadoop")) -.-> hadoop/HadoopHiveGroup(["Hadoop Hive"]) hadoop(("Hadoop")) -.-> hadoop/HadoopHDFSGroup(["Hadoop HDFS"]) hadoop/HadoopHDFSGroup -.-> hadoop/hdfs_setup("HDFS Setup") hadoop/HadoopHDFSGroup -.-> hadoop/fs_mkdir("FS Shell mkdir") hadoop/HadoopHDFSGroup -.-> hadoop/fs_cp("FS Shell cp") hadoop/HadoopHiveGroup -.-> hadoop/hive_shell("Hive Shell") hadoop/HadoopHiveGroup -.-> hadoop/create_tables("Creating Tables") hadoop/HadoopHiveGroup -.-> hadoop/load_insert_data("Loading and Inserting Data") hadoop/HadoopHiveGroup -.-> hadoop/limit("limit Usage") hadoop/HadoopHiveGroup -.-> hadoop/group_by("group by Usage") hadoop/HadoopHiveGroup -.-> hadoop/aggregating("Aggregating Function") subgraph Lab Skills hadoop/hdfs_setup -.-> lab-288973{{"用 Hadoop 魔法探索废墟数据"}} hadoop/fs_mkdir -.-> lab-288973{{"用 Hadoop 魔法探索废墟数据"}} hadoop/fs_cp -.-> lab-288973{{"用 Hadoop 魔法探索废墟数据"}} hadoop/hive_shell -.-> lab-288973{{"用 Hadoop 魔法探索废墟数据"}} hadoop/create_tables -.-> lab-288973{{"用 Hadoop 魔法探索废墟数据"}} hadoop/load_insert_data -.-> lab-288973{{"用 Hadoop 魔法探索废墟数据"}} hadoop/limit -.-> lab-288973{{"用 Hadoop 魔法探索废墟数据"}} hadoop/group_by -.-> lab-288973{{"用 Hadoop 魔法探索废墟数据"}} hadoop/aggregating -.-> lab-288973{{"用 Hadoop 魔法探索废墟数据"}} end

环境设置

在这一步骤中,我们将设置环境并为分析准备数据。

  1. 打开终端,并通过运行以下命令切换到 hadoop 用户:
su - hadoop
  1. 导航到 /home/hadoop 目录:
cd /home/hadoop
  1. 创建一个名为 ruin-data 的新目录来存储我们的数据集:
mkdir ruin-data
  1. 将示例数据集移动到 ruin-data 目录中:
cp /tmp/ruin-dataset.txt ruin-data/

该数据集包含在废墟中发现的各种文物的信息,包括它们的类型、位置和状态。

探索数据集

在这一步骤中,我们将把数据集加载到 Hive 中并探索其结构。

  1. 通过运行以下命令启动 Hive shell:
hive
  1. 创建一个名为 ruin_analysis 的新数据库:
CREATE DATABASE ruin_analysis;
  1. 使用 ruin_analysis 数据库:
USE ruin_analysis;
  1. 创建一个名为 artifacts 的外部表,用于存储来自 ruin-dataset.txt 文件的数据:
CREATE EXTERNAL TABLE artifacts (
  artifact_id INT,
  artifact_type STRING,
  location STRING,
  condition STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';

此命令创建了一个包含四列的新表:artifact_idartifact_typelocationcondition。该表配置为从 /home/hadoop/ruin-data 目录中存储的逗号分隔文本文件 ruin-dataset.txt 读取数据。

  1. 将数据加载到 artifacts 表中:
LOAD DATA LOCAL INPATH '/home/hadoop/ruin-data/ruin-dataset.txt' INTO TABLE artifacts;
  1. 通过运行以下命令验证表结构:
DESCRIBE artifacts;

这将显示列名及其数据类型。

数据分组与聚合

在这一步骤中,我们将使用 GROUP BY 子句来分析文物数据并揭示隐藏的模式。

  1. 在 Hive shell 中,运行以下查询以统计每种文物类型的数量:
SELECT artifact_type, COUNT(*) AS artifact_count
FROM artifacts
GROUP BY artifact_type;

此查询按 artifact_type 对数据进行分组,并使用 COUNT(*) 函数计算每种类型的文物数量。

  1. 为了找到最常见的文物类型,可以通过添加 ORDER BY 子句修改之前的查询:
SELECT artifact_type, COUNT(*) AS artifact_count
FROM artifacts
GROUP BY artifact_type
ORDER BY artifact_count DESC
LIMIT 1;

此查询按 artifact_count 降序排序结果,并将输出限制为第一行,从而得到数量最多的文物类型。

  1. 让我们根据文物类型分析其状态。运行以下查询:
SELECT artifact_type, condition, COUNT(*) AS artifact_count
FROM artifacts
GROUP BY artifact_type, condition
ORDER BY artifact_type, condition;

此查询按 artifact_typecondition 对数据进行分组,计算每种组合的文物数量,并按 artifact_typecondition 对结果进行排序。

  1. 最后,我们可以通过运行以下查询来探索文物在不同位置的分布情况:
SELECT location, COUNT(*) AS artifact_count
FROM artifacts
GROUP BY location
ORDER BY artifact_count DESC;

此查询按 location 对数据进行分组,并统计每个位置发现的文物数量,按 artifact_count 降序排序。

总结

在本实验中,我们探索了 Hadoop 的 Hive 及其 GROUP BY 功能,用于分析在古老废墟中发现的文物数据集。通过设置环境、将数据加载到 Hive 中并执行各种 GROUP BY 查询,我们揭示了宝贵的洞察,例如最常见的文物类型、基于文物类型的文物状态以及文物在不同位置的分布情况。

通过这次实践,我们更深入地理解了如何利用 Hadoop 和 Hive 进行数据分析和模式发现,尤其是在处理大型复杂数据集时。数据分组和聚合的能力是大数据领域的一项基本技能,而本实验为这一核心概念提供了实用的入门指导。