介绍
在魔法皇家学院(Royal Academy of Magic)的神奇领域中,一支技艺精湛的宝石学家团队致力于揭开那些为魔法世界提供能量的神秘宝石的奥秘。其中有一位杰出的研究员,名叫 Aria,她坚定不移的好奇心和敏锐的智慧使她成为一股不可忽视的力量。
最近,学院获得了一批关于这些宝石特性和应用的庞大数据,这些知识财富有望开辟魔法创新的新途径。然而,海量的信息带来了一个艰巨的挑战,需要借助强大的分析工具来解决。
Aria 毫不畏惧,转向了备受推崇的 Hadoop 生态系统,认识到它驯服庞大数据集的潜力。她的目标有两个:深入研究宝石行为的复杂性,并揭示可能彻底改变魔法利用方式的隐藏模式。
探索宝石数据集
在这一步中,我们将熟悉宝石数据集及其结构,为后续的分析奠定基础。
首先,确保你以 hadoop 用户身份登录,可以在终端中运行以下命令:
su - hadoop
现在让我们从创建一个示例开始。将以下命令行复制到终端中以创建我们的示例文件。
mkdir -p hadoop/gemstone_data
cd hadoop/gemstone_data
echo "gem_id,gem_name,color,hardness,density,refractive_index" > gem_properties.csv
echo "1,Ruby ,Red ,9.0 ,4.0,1.77" >> gem_properties.csv
echo "2,Emerald ,Green ,8.0 ,3.1,1.58" >> gem_properties.csv
echo "3,Sapphire,Blue ,9.0 ,4.0,1.76" >> gem_properties.csv
echo "4,Diamond ,Colorless,10.0,3.5,2.42" >> gem_properties.csv
echo "5,Amethyst,Purple ,7.0 ,2.6,1.54" >> gem_properties.csv
echo "6,Topaz ,Yellow ,8.0 ,3.5,1.63" >> gem_properties.csv
echo "7,Pearl ,White ,2.5 ,2.7,1.53" >> gem_properties.csv
echo "8,Agate ,Multi ,7.0 ,2.6,1.53" >> gem_properties.csv
echo "9,Rose ,Pink ,7.0 ,2.7,1.54" >> gem_properties.csv
echo "10,CatsEye,Green ,6.5 ,3.2,1.54" >> gem_properties.csv
echo "gem_id,application" > gem_applications.csv
echo "1,Fire Magic " >> gem_applications.csv
echo "2,Earth Magic " >> gem_applications.csv
echo "3,Water Magic " >> gem_applications.csv
echo "4,Enhancement Magic" >> gem_applications.csv
echo "5,Psychic Magic " >> gem_applications.csv
echo "6,Lightning Magic " >> gem_applications.csv
echo "7,Illusion Magic " >> gem_applications.csv
echo "8,Strength Magic " >> gem_applications.csv
echo "9,Love Magic " >> gem_applications.csv
echo "10,Stealth Magic " >> gem_applications.csv
现在我们已经在 gemstone_data 目录中,让我们花点时间查看该目录的内容:
ls
当你浏览目录时,你会看到这两个文件,每个文件都专注于宝石数据的不同方面。gem_properties.csv 深入探讨了宝石的物理特性,而 gem_applications.csv 则提供了关于它们各种魔法用途的见解。
为了更深入地了解我们的数据集,让我们查看其中一个文件的前几行:
head -n 5 gem_properties.csv
结果应如下所示:
gem_id,gem_name,color,hardness,density,refractive_index
1,Ruby ,Red ,9.0 ,4.0,1.77
2,Emerald ,Green ,8.0 ,3.1,1.58
3,Sapphire,Blue ,9.0 ,4.0,1.76
4,Diamond ,Colorless,10.0,3.5,2.42
此命令显示了 gem_properties.csv 文件的前五行,让你对其结构和内容有了初步了解。
创建 Hive 表
现在我们已经熟悉了数据集,接下来让我们创建一个 Hive 表来存储和查询宝石属性数据。
首先,启动 Hive CLI:
hive
进入 Hive CLI 后,创建一个名为 gemstone_analysis 的新数据库来存储我们的宝石数据:
CREATE DATABASE gemstone_analysis;
接下来,切换到新创建的数据库:
USE gemstone_analysis;
设置好数据库后,让我们继续创建一个名为 gem_properties 的表,用于存储 gem_properties.csv 文件中的数据。该表将包含宝石 ID、名称、颜色、硬度、密度和折射率等信息:
CREATE TABLE gem_properties (
gem_id INT COMMENT '宝石的唯一 ID',
gem_name STRING COMMENT '宝石的名称',
color STRING COMMENT '宝石的颜色',
hardness FLOAT COMMENT '宝石的硬度',
density FLOAT COMMENT '宝石的密度',
refractive_index FLOAT COMMENT '宝石的折射率'
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
TBLPROPERTIES ('skip.header.line.count'='1');
此语句定义了 gem_properties 表的结构,指定了列名和数据类型。ROW FORMAT 子句表示数据以逗号分隔,STORED AS TEXTFILE 子句指定数据应存储为纯文本文件。
现在,让我们将 gem_properties.csv 文件中的数据加载到新创建的 gem_properties 表中:
LOAD DATA LOCAL INPATH '/home/hadoop/hadoop/gemstone_data/gem_properties.csv'
INTO TABLE gem_properties;
此命令将指定文件路径中的数据加载到 gem_properties 表中。
数据加载完成后,让我们通过运行一个简单的 SELECT 查询来验证数据是否正确加载,显示 gem_properties 表的前五行:
SELECT * FROM gem_properties LIMIT 5;
此查询将显示 gem_properties 表的前五行,使我们能够确认数据是否正确加载。结果应如下所示:
OK
1 Ruby Red 9.0 4.0 1.77
2 Emerald Green 8.0 3.1 1.58
3 Sapphire Blue 9.0 4.0 1.76
4 Diamond Colorless 10.0 3.5 2.42
5 Amethyst Purple 7.0 2.6 1.54
Time taken: 1.234 seconds, Fetched: 5 row(s)
分析宝石属性
在这一步中,我们将利用 Hive 中的 DISTRIBUTE BY 子句来高效地分析宝石属性数据。
首先,让我们创建一个名为 distributed_gem_properties 的新表,按 gem_name 列对数据进行分区:
(可能需要一些时间,请耐心等待)
CREATE TABLE distributed_gem_properties
AS
SELECT * FROM gem_properties
DISTRIBUTE BY gem_id;
此表镜像了原始 gem_properties 表的结构,但加入了额外的子句以有效地组织和分布数据:
AS SELECT * FROM gem_properties:这部分语句从现有的 gem_properties 表中选择所有列和行。我们基本上是将数据从原始表复制到新的分布式表中。
DISTRIBUTE BY gem_id:此子句指定根据 gem_id 列在 reducer 之间分布数据。通过这种方式分布数据,我们可以利用并行处理来更高效地分析宝石属性。
现在我们已经设置好了分布式表,可以继续以更高的效率对宝石属性数据执行各种分析。
让我们执行一个查询,查找硬度在 8.0 到 9.0 之间的宝石,将以下代码复制并粘贴到终端中运行。
SELECT * FROM distributed_gem_properties WHERE hardness BETWEEN 8.0 AND 9.0;
此查询将从分布式表中检索硬度在指定范围内的宝石数据。结果应如下所示:
OK
6 Topaz Yellow 8.0 3.5 1.63
3 Sapphire Blue 9.0 4.0 1.76
2 Emerald Green 8.0 3.1 1.58
1 Ruby Red 9.0 4.0 1.77
Time taken: 0.388 seconds, Fetched: 4 row(s)
接下来,让我们尝试以下代码片段,它使用了 GROUP BY。
SELECT color, COUNT(*) AS count FROM distributed_gem_properties GROUP BY color;
此代码是一个查询语句,用于统计分布式表 distributed_gem_properties 中每种颜色的宝石数量。结果应如下所示:
OK
Blue 1
Colorless 1
Green 2
Multi 1
Pink 1
Purple 1
Red 1
White 1
Yellow 1
Time taken: 18.566 seconds, Fetched: 9 row(s)
以下是另一个使用 PARTITION BY 的查询示例:
SELECT gem_name, color, COUNT(*) OVER(PARTITION BY color) AS color_count
FROM distributed_gem_properties;
此查询从 distributed_gem_properties 表中选择 gem_name 和 color,并统计每种颜色的宝石数量。PARTITION BY 子句指定按哪一列进行分区计数,这里使用的是 color 列。这将为每种颜色的宝石生成一个单独的计数。结果应如下所示:
OK
Sapphire Blue 1
Diamond Colorless 1
Emerald Green 2
CatsEye Green 2
Agate Multi 1
Rose Pink 1
Amethyst Purple 1
Ruby Red 1
Pearl White 1
Topaz Yellow 1
Time taken: 20.865 seconds, Fetched: 10 row(s)
以上只是两个简单的示例,帮助我们初步了解通过 DISTRIBUTE BY 分布的表在结合 PARTITION BY 和 GROUP BY 等命令时的分析和应用。本节课程到此结束,相信你已经有了初步的理解。
总结
在本实验中,我们在魔法世界才华横溢的宝石学家 Aria 的引导下,踏上了一段引人入胜的宝石分析之旅。通过利用 Hadoop 和 Hive 的强大功能,我们深入挖掘了大量数据,揭开了为这个神奇领域提供魔力的神秘宝石中隐藏的秘密。
通过一系列精心设计的步骤,我们探索了宝石数据集的复杂性,创建了一个强大的 Hive 表来存储和查询数据,并最终利用 DISTRIBUTE BY 子句优化了我们的分析。这一强大的技术使我们能够高效地分区和分布数据,为更快、更集中的查询铺平了道路,从而揭示了这些非凡宝石的特性和应用的宝贵见解。
在整个实验中,我们不仅获得了 Hadoop 和 Hive 的实践经验,还见证了大数据分析在揭开魔法世界奥秘中的变革潜力。通过掌握这些工具,我们具备了必要的知识和技能,可以踏上新的冒险之旅,在这些旅程中,数据是解锁无限可能和推动魔法创新边界的关键。



