Оптимизация данных космических гонок

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

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

Введение

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hadoop(("Hadoop")) -.-> hadoop/HadoopHiveGroup(["Hadoop Hive"]) hadoop/HadoopHiveGroup -.-> hadoop/create_tables("Creating Tables") hadoop/HadoopHiveGroup -.-> hadoop/basic_hiveql("Basic HiveQL Queries") hadoop/HadoopHiveGroup -.-> hadoop/group_by("group by Usage") hadoop/HadoopHiveGroup -.-> hadoop/collection("Collection Operating Function") hadoop/HadoopHiveGroup -.-> hadoop/table_generating("Table Generating Function") hadoop/HadoopHiveGroup -.-> hadoop/udf("User Defined Function") hadoop/HadoopHiveGroup -.-> hadoop/schema_design("Schema Design") subgraph Lab Skills hadoop/create_tables -.-> lab-288959{{"Оптимизация данных космических гонок"}} hadoop/basic_hiveql -.-> lab-288959{{"Оптимизация данных космических гонок"}} hadoop/group_by -.-> lab-288959{{"Оптимизация данных космических гонок"}} hadoop/collection -.-> lab-288959{{"Оптимизация данных космических гонок"}} hadoop/table_generating -.-> lab-288959{{"Оптимизация данных космических гонок"}} hadoop/udf -.-> lab-288959{{"Оптимизация данных космических гонок"}} hadoop/schema_design -.-> lab-288959{{"Оптимизация данных космических гонок"}} end

Изучите функции работы с коллекциями в Hive

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

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

su - hadoop

Затем создадим примерный набор данных для работы. Откройте текстовый редактор и создайте новый файл с именем racetrack_data.txt с таким содержанием:

1,Sector1,Benny,32.5,12.7,45.2
2,Sector2,Zara,28.9,14.1,43.0
3,Sector1,Alex,30.2,11.5,41.7
4,Sector3,Benny,35.7,10.2,45.9
5,Sector2,Zara,31.1,12.8,43.9
6,Sector3,Alex,29.8,15.7,45.5

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

Теперь запустим Hive CLI:

hive

Далее создадим новую таблицу Hive для хранения этих данных:

CREATE TABLE racetrack_data (
    id INT,
    sector STRING,
    racer STRING,
    speed DOUBLE,
    altitude DOUBLE,
    total_score DOUBLE
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

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

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

Теперь изучим некоторые функции работы с коллекциями в Hive:

  1. Получить список уникальных имен гонщиков.
SELECT DISTINCT racer FROM racetrack_data;
  1. Получить список имен секторов и количество записей для каждого сектора.
SELECT sector, COUNT(*) AS record_count FROM racetrack_data GROUP BY sector;
  1. Получить максимальную скорость для каждого гонщика.
SELECT racer, MAX(speed) AS max_speed FROM racetrack_data GROUP BY racer;
  1. Получить список гонщиков и их средние баллы.
SELECT racer, AVG(total_score) AS avg_score FROM racetrack_data GROUP BY racer;

Эти примеры демонстрируют, как использовать функции DISTINCT, COUNT, MAX и AVG для анализа телеметрических данных и извлечения ценных инсайтов.

Анализ данных с использованием коллекций именованных структур

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

Во - первых, создадим новую таблицу Hive со вложенной структурой для хранения дополнительной информации о гонщиках:

CREATE TABLE racer_info (
    id INT,
    racer STRUCT<name:STRING, team:STRING, age:INT>,
    performance STRUCT<speed:DOUBLE, altitude:DOUBLE, total_score:DOUBLE>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '#'
STORED AS TEXTFILE;

Теперь вставим несколько примерных данных в таблицу racer_info:

INSERT INTO TABLE racer_info
VALUES
    (1, named_struct('name', 'Benny', 'team', 'Cosmic Racers', 'age', 28), named_struct('speed', CAST(32.5 AS DOUBLE), 'altitude', CAST(12.7 AS DOUBLE), 'total_score', CAST(45.2 AS DOUBLE))),
    (2, named_struct('name', 'Zara', 'team', 'Stellar Speeders', 'age', 32), named_struct('speed', CAST(28.9 AS DOUBLE), 'altitude', CAST(14.1 AS DOUBLE), 'total_score', CAST(43.0 AS DOUBLE))),
    (3, named_struct('name', 'Alex', 'team', 'Galactic Gliders', 'age', 25), named_struct('speed', CAST(30.2 AS DOUBLE), 'altitude', CAST(11.5 AS DOUBLE), 'total_score', CAST(41.7 AS DOUBLE))),
    (4, named_struct('name', 'Benny', 'team', 'Cosmic Racers', 'age', 28), named_struct('speed', CAST(35.7 AS DOUBLE), 'altitude', CAST(10.2 AS DOUBLE), 'total_score', CAST(45.9 AS DOUBLE))),
    (5, named_struct('name', 'Zara', 'team', 'Stellar Speeders', 'age', 32), named_struct('speed', CAST(31.1 AS DOUBLE), 'altitude', CAST(12.8 AS DOUBLE), 'total_score', CAST(43.9 AS DOUBLE))),
    (6, named_struct('name', 'Alex', 'team', 'Galactic Gliders', 'age', 25), named_struct('speed', CAST(29.8 AS DOUBLE), 'altitude', CAST(15.7 AS DOUBLE), 'total_score', CAST(45.5 AS DOUBLE)));

Теперь проанализируем данные с использованием функции named_struct:

  1. Получить имена гонщиков и их команды.
SELECT racer.name, racer.team FROM racer_info;
  1. Получить имена гонщиков и их максимальные скорости.
SELECT racer.name, performance.speed AS max_speed FROM racer_info;
  1. Получить имена гонщиков, их команды и их средние баллы.
SELECT racer.name, racer.team, AVG(performance.total_score) AS average_score
FROM racer_info
GROUP BY racer.name, racer.team;

Эти примеры демонстрируют, как использовать функцию named_struct для создания сложных структур данных и анализа данных.

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

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

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

CREATE TABLE racer_rankings (
    race_id INT,
    sector STRING,
    racer_names ARRAY<STRING>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '#'
STORED AS TEXTFILE;

Теперь вставим несколько примерных данных в таблицу racer_rankings:

INSERT INTO TABLE racer_rankings
VALUES
    (1, 'Sector1', ARRAY('Benny', 'Alex')),
    (2, 'Sector2', ARRAY('Zara', 'Alex')),
    (3, 'Sector3', ARRAY('Benny', 'Zara', 'Alex')),
    (4, 'Sector1', ARRAY('Benny', 'Zara')),
    (5, 'Sector2', ARRAY('Zara', 'Alex')),
    (6, 'Sector3', ARRAY('Benny', 'Alex'));

Теперь проанализируем данные с использованием функции collect_set:

  1. Получить список уникальных гонщиков по всем секторам.
SELECT DISTINCT racer_name
FROM racer_rankings
LATERAL VIEW EXPLODE(racer_names) rn AS racer_name;
  1. Получить список гонщиков, которые участвовали во всех секторах.
SELECT racer_name
FROM (
  SELECT collect_set(racer_names) AS all_racers
  FROM racer_rankings
) t
LATERAL VIEW EXPLODE(all_racers) rn AS racer_name;
  1. Получить список гонщиков, которые участвовали в по крайней мере двух секторах.
SELECT racer_name
FROM (
  SELECT racer_name, COUNT(DISTINCT sector) AS num_sectors
  FROM racer_rankings LATERAL VIEW explode(racer_names) exploded_table AS racer_name
  GROUP BY racer_name
) t
WHERE num_sectors >= 2;

Эти примеры демонстрируют, как использовать функцию collect_set для выполнения операций с наборами, таких как DISTINCT, ПЕРЕСЕЧЕНИЕ и ОБЪЕДИНЕНИЕ, над телеметрическими данными.

Резюме

В этом лабе мы изучили различные функции работы с коллекциями в Hive, такие как DISTINCT, COUNT, MAX, AVG, named_struct, LATERAL VIEW, EXPLODE и collection_set. Работая с примерами наборов данных, представляющими телеметрические данные из космического турнира по гонкам, мы узнали, как анализировать и извлекать ценные инсайты из сложных структур данных.

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

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