Открытие древних сокровищ с помощью Hadoop

HadoopHadoopBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Представьте себе ситуацию, когда вы - морской археолог, исследующий глубины "Золотой бухты - затонувшей". Эта мистическая бухта имеет репутацию скрывать секреты древних цивилизаций, их сокровища и артефакты, потерянные под волнами. Ваша задача - раскрыть эти сокровища и собрать историческую головоломку, скрытую под поверхностью океана.

По мере того, как вы отправляетесь в подводное путешествие, вам нужно анализировать различные артефакты и памятники, которые вы обнаруживаете, тщательно изучая их характеристики и паттерны. Именно здесь на сцену выходят возможности оконных функций Hadoop, позволяющие вам проводить сложный анализ данных и разгадывать тайны прошлого.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hadoop(("Hadoop")) -.-> hadoop/HadoopHDFSGroup(["Hadoop HDFS"]) hadoop(("Hadoop")) -.-> hadoop/HadoopHiveGroup(["Hadoop Hive"]) hadoop/HadoopHDFSGroup -.-> hadoop/fs_mkdir("FS Shell mkdir") hadoop/HadoopHiveGroup -.-> hadoop/manage_db("Managing Database") hadoop/HadoopHiveGroup -.-> hadoop/create_tables("Creating Tables") hadoop/HadoopHiveGroup -.-> hadoop/load_insert_data("Loading and Inserting Data") hadoop/HadoopHiveGroup -.-> hadoop/basic_hiveql("Basic HiveQL Queries") hadoop/HadoopHiveGroup -.-> hadoop/group_by("group by Usage") hadoop/HadoopHiveGroup -.-> hadoop/math("Mathematical Operating Function") hadoop/HadoopHiveGroup -.-> hadoop/window("Window Function") subgraph Lab Skills hadoop/fs_mkdir -.-> lab-289008{{"Открытие древних сокровищ с помощью Hadoop"}} hadoop/manage_db -.-> lab-289008{{"Открытие древних сокровищ с помощью Hadoop"}} hadoop/create_tables -.-> lab-289008{{"Открытие древних сокровищ с помощью Hadoop"}} hadoop/load_insert_data -.-> lab-289008{{"Открытие древних сокровищ с помощью Hadoop"}} hadoop/basic_hiveql -.-> lab-289008{{"Открытие древних сокровищ с помощью Hadoop"}} hadoop/group_by -.-> lab-289008{{"Открытие древних сокровищ с помощью Hadoop"}} hadoop/math -.-> lab-289008{{"Открытие древних сокровищ с помощью Hadoop"}} hadoop/window -.-> lab-289008{{"Открытие древних сокровищ с помощью Hadoop"}} end

Настройка данных

В этом шаге мы создадим набор данных, который имитирует артефакты и памятники, которые вы обнаружили во время подводного исследования. Этот набор данных будет служить основой для нашего анализа с использованием оконных функций Hadoop.

Во - первых, убедитесь, что вы вошли под пользователем hadoop, выполнив следующую команду в терминале:

su - hadoop

Затем создадим новую директорию под названием artifacts внутри директории /home/hadoop:

mkdir /home/hadoop/artifacts
cd artifacts/

Далее создадим новый файл с именем artifacts.txt внутри директории artifacts с следующим содержанием:

1,Gold,2500,15,A1
2,Silver,1800,20,B2
3,Bronze,3000,12,A1
4,Ceramic,1200,18,C3
5,Gold,2800,22,B2
6,Silver,2000,16,A1
7,Bronze,2500,25,C3
8,Ceramic,1500,14,A1
9,Gold,3200,21,B2
10,Silver,1700,19,C3

Данный файл представляет коллекцию артефактов с такими подробностями, как их материал, возраст, глубина, на которой они были обнаружены, и координаты местанахождения.

Исследование данных с использованием оконных функций

Теперь, когда у нас есть готовый набор данных, давайте исследуем его с использованием оконных функций Hadoop. Мы будем использовать Apache Hive, программное обеспечение для данных-склада, которое облегчает запросы и управление большими наборами данных, хранящимися в распределенном хранилище.

Во - первых, запустите Hive shell, выполнив следующую команду в терминале:

hive

Далее создайте новую таблицу под названием artifacts для хранения нашего набора данных:

CREATE TABLE artifacts (
  artifact_id INT,
  material STRING,
  age INT,
  depth INT,
  location STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

Загрузите данные из файла artifacts.txt в таблицу artifacts:

LOAD DATA LOCAL INPATH '/home/hadoop/artifacts/artifacts.txt' INTO TABLE artifacts;

Давайте начнем с исследования столбца age с использованием оконных функций RANK() и DENSE_RANK(). Эти функции помогут нам определить относительные ранги возраста артефактов:

SELECT
  artifact_id,
  material,
  age,
  RANK() OVER (ORDER BY age DESC) AS rank_age,
  DENSE_RANK() OVER (ORDER BY age DESC) AS dense_rank_age
FROM
  artifacts;

Этот запрос выведет детали артефактов вместе с их рангами возраста на основе функций RANK() и DENSE_RANK().

Далее давайте используем функции LAG() и LEAD() для сравнения возрастов последовательных артефактов:

SELECT
  artifact_id,
  material,
  age,
  LAG(age, 1) OVER (ORDER BY age DESC) AS prev_age,
  LEAD(age, 1) OVER (ORDER BY age DESC) AS next_age
FROM
  artifacts;

Этот запрос отобразит детали артефактов вместе с возрастами предыдущего и следующего артефактов в упорядоченной последовательности.

Анализ паттернов артефактов

В этом шаге мы будем использовать оконные функции для анализа паттернов и идентификации значимых артефактов по различным критериям.

Давайте начнем с поиска самых старых и самых новых артефактов для каждого типа материала:

CREATE TABLE result_1
AS
SELECT
  material,
  artifact_id,
  age,
  FIRST_VALUE(artifact_id) OVER (PARTITION BY material ORDER BY age DESC) AS oldest_artifact,
  LAST_VALUE(artifact_id) OVER (PARTITION BY material ORDER BY age ASC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS newest_artifact
FROM
  artifacts;

SELECT * FROM result_1;

Этот запрос использует функции FIRST_VALUE() и LAST_VALUE() для идентификации соответственно самых старых и самых новых артефактов для каждого типа материала.

Далее давайте найдем артефакты, которые значительно старше или младше по сравнению с средним возрастом для их типа материала:

CREATE TABLE result_2
AS
SELECT
  artifact_id,
  material,
  age,
  AVG(age) OVER (PARTITION BY material) AS avg_age_by_material,
  CASE
    WHEN age > AVG(age) OVER (PARTITION BY material) + 200 THEN 'Significantly Older'
    WHEN age < AVG(age) OVER (PARTITION BY material) - 200 THEN 'Significantly Younger'
    ELSE 'Average'
  END AS age_category
FROM
  artifacts;

SELECT * FROM result_2;

Этот запрос вычисляет средний возраст для каждого типа материала с использованием оконной функции AVG() и затем классифицирует каждый артефакт в зависимости от того, является ли он значительно старше, значительно младше или средним по сравнению с средним возрастом материала.

Резюме

В этом практическом занятии мы исследовали возможности оконных функций Hadoop в рамках подводного археологического экспедиции. Симулируя набор данных артефактов и памятников, мы узнали, как использовать различные оконные функции, такие как RANK(), DENSE_RANK(), LAG(), LEAD(), FIRST_VALUE(), LAST_VALUE() и AVG(), для анализа и выявления паттернов в данных.

С помощью практических упражнений мы приобрели представление о том, как определять ранги возраста, сравнивать возраст последовательных артефактов, искать старые и новые артефакты для каждого типа материала и классифицировать артефакты в зависимости от их возраста по сравнению с средним возрастом материала. Это практическое занятие дало возможность приобрести навыки в использовании оконных функций Hadoop для разгадки загадок "Золотой бухты - затонувшей".

Целью этого практического занятия было сочетание увлекательной постановки задачи с практическими упражнениями по программированию, позволяющее учащимся глубже понять оконные функции Hadoop, исследуя при этом вымышленное приключение. Иммерсируя учащихся в реалистичный контекст, практическое занятие способствовало более интересному и запоминающемуся процессу обучения.