皇家数据魔法模式

HadoopHadoopBeginner
立即练习

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

引言

在皇家魔法学院(Royal Academy of Wizardry)这个魔法艺术与知识追求交织的神奇领域中,一位名叫亚瑟(Arthor)的年轻皇家卫兵接到了一项至关重要的任务。学院收藏的大量古籍和卷轴,蕴含着无价的智慧和咒语,但经过几个世纪的积累,这些资料变得日益混乱。学院的首席巫师——智者梅林尼乌斯(Merlinious the Wise)意识到,迫切需要建立一个强大而高效的系统来管理这些庞大的信息资源。

亚瑟的目标是设计和实施一套全面的数据模式(schema),以确保这些古老记录中的知识能够被轻松访问并得到良好的组织。通过利用 Hadoop 及其组件(尤其是 Hive)的力量,他将创建一个可靠且可扩展的数据管理解决方案,帮助学院的学者和巫师们在追求知识和魔法精进的道路上更进一步。

设置 Hadoop 环境

在这一步中,我们将为模式设计(schema design)准备 Hadoop 环境。首先,切换到 hadoop 用户:

su - hadoop

登录为 hadoop 用户后,导航到 /home/hadoop 目录:

cd /home/hadoop

接下来,我们将创建一个名为 academy_data 的新目录,用于存储数据和模式文件:

mkdir academy_data

然后,我们需要确保 Hadoop 服务正在运行。你可以使用以下命令检查服务的状态:

hdfs dfsadmin -report

如果服务未运行,可以通过以下命令启动它们:

start-dfs.sh
start-yarn.sh

Hadoop 环境设置完成后,我们就可以继续进行模式设计了。

设计模式(Schema)

在这一步中,我们将为学院的数据设计模式(schema)。首先,分析我们拥有的数据。学院的收藏主要包括三大类:书籍(books)、卷轴(scrolls)和文物(artifacts)。

academy_data 目录下创建一个名为 academy_schema.hql 的新文件:

cd academy_data
touch academy_schema.hql

用你喜欢的文本编辑器打开该文件,并添加以下模式定义:

-- academy_schema.hql

-- 为学院数据创建数据库
CREATE DATABASE IF NOT EXISTS academy;

-- 切换到 academy 数据库
USE academy;

-- 书籍表
CREATE TABLE IF NOT EXISTS books (
    book_id INT,
    title STRING,
    author STRING,
    publication_year INT,
    category STRING
) COMMENT '用于存储书籍信息的表'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

-- 卷轴表
CREATE TABLE IF NOT EXISTS scrolls (
    scroll_id INT,
    title STRING,
    author STRING,
    creation_year INT,
    subject STRING
) COMMENT '用于存储卷轴信息的表'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

-- 文物表
CREATE TABLE IF NOT EXISTS artifacts (
    artifact_id INT,
    name STRING,
    description STRING,
    origin STRING,
    age INT
) COMMENT '用于存储文物信息的表'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

在这个模式中,我们定义了三个表:booksscrollsartifacts。每个表都有与其类别相关的列,例如书籍的 titleauthorpublication_year,以及卷轴的 subjectcreation_year

我们还指定了 ROW FORMATSTORED AS 子句,以确保数据以逗号分隔的文本文件形式存储。

保存文件并退出文本编辑器。

实现模式(Schema)

现在我们已经设计好了模式(schema),接下来需要在 Hive 中实现它。首先,启动 Hive 服务器:

hive

Hive 服务器启动后,我们可以执行模式定义脚本:

SOURCE /home/hadoop/academy_data/academy_schema.hql;

这条命令将根据我们之前定义的模式创建 academy 数据库以及 booksscrollsartifacts 表。

EXIT;

接下来,我们为这些表填充一些示例数据。在 academy_data 目录下创建一个名为 academy_data.txt 的新文件:

touch academy_data.txt

用文本编辑器打开该文件,并添加以下数据:

1,The Sorcerer's Stone,J.K. Rowling,1997,Fantasy
2,Scroll of Levitation,Merlinious the Wise,1023,Charms
3,Ancient Wand,A powerful wand crafted by the Elven Wandmakers,Elven Realm,2500
4,Fantastic Beasts and Where to Find Them,Newt Scamander,2001,Bestiary
5,Scroll of Healing,Gwendolyn the Healer,1157,Healing
6,Enchanted Mirror,A mirror that reveals one's true self,Avalon,5000

保存文件并退出文本编辑器。

现在,我们将数据加载到相应的表中:

hive
USE academy;
LOAD DATA LOCAL INPATH '/home/hadoop/academy_data/academy_data.txt' OVERWRITE INTO TABLE books;
LOAD DATA LOCAL INPATH '/home/hadoop/academy_data/academy_data.txt' OVERWRITE INTO TABLE scrolls;
LOAD DATA LOCAL INPATH '/home/hadoop/academy_data/academy_data.txt' OVERWRITE INTO TABLE artifacts;

这些命令会将 academy_data.txt 文件中的数据加载到对应的表中。

最后,我们验证数据是否已正确加载:

SELECT * FROM books;
SELECT * FROM scrolls;
SELECT * FROM artifacts;

你应该会看到每个表中显示相应的数据。

查询数据

数据加载到表中后,我们现在可以查询它以检索相关信息。让我们尝试一些简单的查询:

获取所有在 2001 年出版的书籍:

SELECT * FROM books WHERE publication_year = 2001;

获取所有与主题为 'Charms' 相关的卷轴:

SELECT * FROM scrolls WHERE subject = 'Charms';

获取所有年龄超过 1000 年的文物:

SELECT * FROM artifacts WHERE age > 1000;

这些查询展示了如何根据各种条件从表中过滤和检索特定数据。

你还可以根据需求执行更复杂的查询,例如连接(joins)和聚合(aggregations)。

总结

在本实验中,我们探索了使用 Hadoop 的 Hive 组件为皇家魔法学院(Royal Academy of Wizardry)的数据设计和实现模式(schema)的过程。我们首先设置了 Hadoop 环境并创建了必要的目录。接着,我们设计了一个模式,将学院的书籍、卷轴和文物收藏组织到不同的表中。

随后,我们通过创建表并将示例数据加载到表中来实现模式。最后,我们演示了如何使用各种过滤器和条件查询数据。

通过本实验,我们学习了在管理大型多样化数据集时,正确设计模式的重要性。通过将数据组织到具有适当列和数据类型的明确定义的表中,我们可以确保信息的高效存储、检索和分析。

此外,我们还获得了 Hive 的实践经验,这是 Hadoop 的一个强大的数据仓库组件,具有类似 SQL 的查询能力。这些经验将对我们继续处理大数据以及探索更高级的数据分析和处理技术非常有价值。