1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/geekyouth-SZT-bigdata

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 31 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 12:40 3d3e087

Nginx — это сервер, который представляет собой российское достижение. Следом идёт ClickHouse, лёгкий как ласточка, но с производительностью, которая значительно превосходит все аналогичные базы данных на рынке. В настоящее время объём хранилища может достигать уровня PB. На данный момент информации не так много, она находится в процессе изучения.

MongoDB-4.0 — документная база данных, дружественная к JSON-данным, в основном используется для баз данных с пауками.

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

Hive-2.1 — обязательный элемент экосистемы Hadoop, используемый для анализа больших данных. Это структурированная база данных OLAP, предназначенная для выполнения запросов HQL, синтаксис запросов похож на MySQL, за исключением того, что оконные функции более сложны.

Impala-3.2 — быстрый и эффективный, как антилопа, с такими же сложными запросами Hive SQL, Impala возвращает результаты за миллисекунды, тогда как Hive требуется около 80 секунд или даже больше.

HBase-2.1 + Phoenix — неструктурированная база данных в экосистеме Hadoop. Дизайн HBase основан на rowkey и многоверсионном контроле, а Phoenix позволяет реализовать более сложные бизнес-процессы.

Kylin-2.5 — система предварительного анализа многомерных данных, которая полагается на быстрые вычисления в памяти, но имеет некоторые ограничения. Она подходит для стабильных бизнес-процессов с фиксированным количеством измерений. Не рекомендуется для слабых машин.

HUE-4.3 — поставляется вместе с CDH, подчёркивает удобство использования. Он удобен для управления операциями с хранилищами данных, контроля доступа, выполнения запросов Hive и Impala, управления файлами HDFS и написания сценариев задач Oozie.

Alibaba DataX — инструмент для синхронизации гетерогенных источников данных, поддерживает большинство основных баз данных и позволяет разрабатывать собственные плагины. Если вы считаете, что это не удовлетворяет вашим особым бизнес-требованиям, рекомендуется использовать FlinkX, основанный на распределённом инструменте синхронизации данных Flink. Теоретически вы также можете разработать свои собственные плагины.

Oozie-5.1 — пользовательский интерфейс выглядит странно, но его можно принять после использования с HUE. Его основная функция — написание и запуск сценариев для планирования задач.

Sqoop-1.4 — используется для экспорта бизнес-данных из MySQL в хранилище HDFS и наоборот.

MySQL-5.7 — база данных, которую должен использовать каждый программист. Если говорить о языке, которым пользуются все программисты мира, то это, безусловно, SQL. Уровень принятия MySQL 8.0 недостаточно высок, MariaDB пока не рекомендуется, так как сложные функции несовместимы с MySQL.

Hadoop3.0 (HDFS+Yarn) — HDFS является наиболее распространённой системой хранения данных в области больших данных, Yarn относится к экосистеме hadoop и в основном отвечает за распределение ресурсов кластера и выполнение механизма MR.

Alibaba DataV — визуализация данных.

Подготовка работы:

Ниже приведены мои настройки среды разработки, которые служат только для справки:

  • Win10 IDEA 2019.3 — флагманское издание, обязательное для разработчиков Java и Scala, объединяющее множество функций;
  • Win10 DBeaver 6.3 Enterprise Edition — мгновенно убивает всех конкурентов среди клиентских программ баз данных, почти все распространённые базы данных могут быть подключены, выбор драйвера является ключевым;
  • Win10 Sublime Text3 — самый мощный и лёгкий редактор кода, мгновенный запуск, бесконечное количество плагинов, в основном используемый для редактирования разрозненных файлов, мгновенного предварительного просмотра Markdown и написания фронтенда (хотя я не очень хорош в этом).

Другие полезные инструменты см. в моём блоге: https://java666.cn/#/AboutMe.

CentOS7 CDH-6.2 Cluster — включает следующие компоненты, соответствующие роли хоста и конфигурации, как показано на рисунке. Кластеру требуется минимум 40 ГБ общей памяти для нормального использования, и чем больше памяти, тем лучше, если у вас достаточно денег. Конечно, скорость будет выше. Мы стремимся к максимальной скорости.

Если вы решите создать кластер больших данных с использованием оригинальных компонентов Apache, вы столкнётесь с множеством проблем. Мои волосы не выдержали, поэтому я выбрал CDH.

В 2021 году CDH полностью перешёл на платную основу, и его больше не рекомендуется использовать для обучения. Рекомендуется попробовать USDP. Однако использование памяти на хосте слишком велико, и настоятельно рекомендуется подготовить достаточное количество оборудования перед принудительной установкой. Рекомендуемая конфигурация кластера составляет 32G RAM * 3.

Примечание: С развитием экосистемы Hadoop проблемы совместимости становятся всё более серьёзными. Чтобы решить проблему совместимости, рекомендуется самостоятельно развернуть кластер Apache Hadoop и скомпилировать и настроить каждый компонент и каждую строку кода с нуля.

Физическая конфигурация машины:

Вышеупомянутое программное обеспечение развёрнуто отдельно на трёх моих компьютерах: ноутбуке VMware с Windows 10, настольном компьютере VMware с Windows 10 и ноутбуке CentOS7 с древним процессором. Все физические машины оснащены SSD и гигабитным Ethernet-адаптером, для HDFS требуется самый быстрый сетевой адаптер.

Конечно, шасси ещё лучше. Ха-ха-ха.

Если у вас есть компьютер с более чем 16 ГБ оперативной памяти, который простаивает, вы можете попробовать использовать более быстрый способ инициализации кластера hadoop для этого проекта, используя vagrant для пакетного развёртывания кластера, чтобы быстро испытать:

# Выполните следующую команду на Linux-машине (RAM > 16G), в настоящее время поддерживается только centos7
# Настоятельно рекомендуется использовать научную сеть!
# Настоятельно рекомендуется использовать научную сеть!
# Настоятельно рекомендуется использовать научную сеть!
# Научная сетевая среда развертывания: https://github.com/juewuy/ShellClash

curl -sSL https://raw.githubusercontent.com/geekyouth/Vagrant/main/start.sh | sh -x

Если вы хотите избежать путаницы с сетевыми кабелями, вы можете рассмотреть возможность реализации распределённой домашней сети с помощью Powerline.

Источник данных:

Платформа открытых данных правительства Шэньчжэня, данные карт Шэньчжэня 133,7 тыс. записей (офлайн-данные), похоже, уже прекратили обслуживание.

Запасной источник данных (ранее загруженные данные jsons были немного ошибочными, поэтому они были повторно организованы, сжаты и размещены в этой библиотеке. Скорость медленных студентов может попробовать код Cloud): .file/2018record3.zip

Теоретически это можно рассматривать как данные в реальном времени, но этот интерфейс слишком медленный. Если использовать очередь Kafka, можно имитировать эффект данных в реальном времени.

Этот проект использует офлайн + реальные идеи для решения различных проблем.

Прогресс разработки:

Подготовьте среду разработки Java, Scala и больших данных, такую как IDEA, VMware, CDH и т. д., затем выключите свой мобильный телефон, нарисуйте дракона левой рукой и проведите радугу правой рукой, давайте начнём представление! 地铁五号线

{
    "car_no": "IGT-104",
    "station": "布吉",
    "conn_mark": 0,
    "deal_money": 0,
    "equ_no": 263032104
}

2.6 — cn.java666.etlflink.app.Redis2Kafka#main согласно требованиям отправляет удовлетворяющие бизнес-требованиям исходные данные в kafka, topic-flink-szt-all сохраняет все исходные данные (1 337 000 строк), topic-flink-szt содержит только очищенные исходные данные (1 266 039 строк).


2.7 — kafka-eagle мониторит topic, на основе оригинальной версии убрана фоновая картинка, стало красивее:

ksql команда для запроса: select * from "topic-flink-szt" where "partition" in (0) limit 1000


2.8 — cn.java666.etlflink.app.Redis2Csv#main реализует sink csv формат файла flink и поддерживает сохранение по дням в виде блоков.


2.9 — cn.java666.etlflink.app.Redis2ES#main реализует ES хранение исходных данных. Реализует поиск в реальном времени и отслеживание данных о транзакциях по картам в режиме реального времени.

Этот модуль включает в себя множество технических деталей, и если у вас нет опыта использования ES, рекомендуется сначала изучить его. В противном случае вы можете столкнуться с трудностями.

Ранее я сталкивался со множеством проблем при работе с ES и провёл много бессонных ночей, теряя много волос. Поэтому важно иметь хорошую практику!

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

Давайте вернёмся к 1 сентября 2018 года и настроим панель kibana на временной диапазон от 0:00:00.000 до 23:59:59.999, чтобы увидеть, является ли статистика записей карт за этот день научной и косвенно подтверждает целостность источника данных.

После корректировки часового пояса общее количество очищенных данных составило 1 266 039 записей, а за весь день 1 сентября — 1 229 180 записей.

На графике видно, что записи транзакций по картам сосредоточены между 6:00 и 12:00 утра, данные за субботу не особенно очевидны. Мы продолжаем масштабировать временную шкалу kibana, чтобы посмотреть более подробную кривую:

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

Рассмотрим процесс ETL проекта: из 1 337 000 исходных записей 1 266 039 прошли очистку и были добавлены в индекс ES szt-data. Из этих 1 266 039 очищенных записей 1 227 234 относятся к утреннему периоду 1 сентября.

Можно предположить, что официальные данные не являются полными данными о транзакциях за весь день. Если мы предположим, что утренний объём транзакций соответствует общему объёму за день, то общее количество транзакций за весь день должно быть около 2 440 000, учитывая, что это была суббота. Однако такой подход не является научным методом анализа данных, и мы продолжим использовать научные методы анализа больших данных для изучения этих данных.

Обратите внимание, что ES имеет некоторые подводные камни:

  • Как отобразить данные с полем времени в реальном времени на панели графиков kibana при сохранении в индексе? Необходимо настроить сопоставление полей перед сохранением данных. Не копируйте формат напрямую!
{
  "properties": {
    "deal_date": {
      "format": "yyyy-MM-dd HH:mm:ss",
      "type": "date"
    }
  }
}  

Здесь не указано поле часового пояса, но ES по умолчанию использует часовой пояс 0. Это программное обеспечение имеет много подводных камней и не позволяет установить глобальный часовой пояс по умолчанию. Однако многие программные продукты генерируют данные, используя часовой пояс машины по умолчанию, который в Китае равен +8. Поскольку наши исходные данные также не содержат информации о часовом поясе, здесь мы не хотим изменять исходные данные и притворяемся, что находимся в часовом поясе 0 в ES. Также необходимо изменить часовой пояс kibana по умолчанию на UTC, чтобы гарантировать правильное выравнивание графика kibana. Но это не научный способ решения проблемы.

  • Если это корпоративный проект, обязательно используйте программное обеспечение для контроля качества данных! Иначе вам придётся иметь дело с большим количеством людей, которые будут нести ответственность за ошибки. Данные могут отсутствовать, но их нельзя путать.
  • При сохранении данных в ES необходимо использовать формат json, и данные, не соответствующие синтаксису json, не могут быть сохранены.
  • Когда ES сериализует сложный объект bean, если fastjson выдаёт ошибку, рекомендуется использовать Gson, который очень мощный!

TIPS😙😙😙:

  • Gson более мощный, чем fastjson, при сериализации, но fastjson быстрее при десериализации.

2.10 — просмотр базы данных ES для сравнения с собственной картой метро, постепенно обнаруживая некоторые правила анонимизации.

В журнале анонимизированные поля номера карты расшифрованы, и предполагается, что существует определённая закономерность в расшифровке реальных номеров карт:

Похоже на код Морзе... Я всё ещё не уверен, верен ли этот метод расшифровки 🤔🤔🤔


2.11 — cn.java666.sztcommon.util.ParseCardNo#parse реализован автоматический анализ номеров карт и шифрование, а также функция однократного преобразования. cn.java666.etlspringboot.controller.CardController#get реализован REST API для преобразования номеров карт в шифрование и обратно.

column COMMENT varchar(256) character set utf8; alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8; alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

  • 2020-04-24:

    • Завершены две новые задачи по расчёту показателей: рейтинг процента пассажиров, пересаживающихся с разных линий метро на каждой из линий метро в Шэньчжэне;
    • Завершены две новые задачи по расчёту показателей: процент пассажиров, пользующихся прямым проездом с каждой линии метро в Шэньчжэне.
  • 2020-04-23:

    • Завершена новая задача по расчёту показателя: среднее время, затрачиваемое пассажирами на поездку в один конец на каждой линии метро в Шэньчжэне;
    • Завершена задача по расчёту нового показателя: среднее значение времени поездок всех пассажиров метро в Шэньчэжэне;
    • Завершена задача по расчёту нового показателя: рейтинг среднего времени поездок всех пассажиров метро в Шэньчжэне в обратном порядке;
    • Завершено выполнение новой задачи по расчёту показателя: рейтинг количества турникетов на станциях и линиях метро в Шэньчжэне;
    • Выполнена задача по расчёту нового показателя: рейтинг доходов станций и линий метро в Шэньчжэне.
  • 2020-04-22:

    • Обновлены документы;
    • Завершена задача по расчёту нового показателя: ежедневный рейтинг пассажиропотока на самых загруженных участках.
  • 2020-04-21:

    • Добавлен модуль SZT-spark-hive для локальной разработки программ Spark и работы с удалённой базой данных Hive;
    • Отладка: локальная разработка Spark on Hive и удалённая отправка через YARN, основная цель — снизить нагрузку на хост разработки.
  • 2020-04-20:

    • Обновление проекта документации;
    • Создание логотипа проекта;
    • Продолжение написания SQL для расчёта новых показателей, планируется переход на использование TEZ-движка в Hive 3.1, но текущий движок MR уже работает очень быстро, по крайней мере в 10 раз быстрее, поэтому пока используется он.
  • 2020-04-19:

    • При расширении виртуальной машины VMware случайно удалены системные файлы с помощью команды rm -rf /usr/, к счастью, большинство важных данных и журналов компонентов не были потеряны благодаря механизмам репликации HDFS, Kafka и ES, а также тому, что большая часть бизнес-данных была смонтирована на внешнем диске. В кластере CHD добавлен новый узел;
    • Восстановление рабочей среды, переход от Hive on MR к Hive on Spark.
  • 2020-04-18:

    • Планирование хранилища данных, создание инфраструктуры хранилища данных;
  • 2020-04-17:

    • Исправление опечаток;
    • Выпуск версии v0.12;
  • 2020-04-16:

    • Рефакторинг проекта;
    • Дополнение документации;
    • Выпуск версии v0.1.
  • 2020-04-15:

    • Увеличение модуля common, разделение на модули;
    • Поддержка автоматического распознавания номеров карт и их зашифрованных версий, обмен между ними с использованием REST API;
    • Устранение ошибок в статистике, вызванных часовым поясом ES;
    • Реализация преобразования Redis2Csv по дням и сохранение в формате csv.
  • 2020-04-14:

    • Рефакторинг;
    • Извлечение файлов формата csv;
    • Добавление открытого исходного кода под лицензией GPL-3, поощрение распространения с открытым исходным кодом;
    • Добавление логотипа;
    • Запись данных в базу данных ES, добавление отображения времени, просмотр статистики данных о считывании карт в реальном времени с помощью Kibana.
  • 2020-04-13:

    • Инициализация проекта;
    • Очистка данных источника, удаление дубликатов и сохранение в redis;
    • Разработка REST API для запросов к redis;
    • Разработка пользовательского источника redis для flink и более детальная очистка исходных данных;
    • Отправка исходных данных в kafka.

Контакты:

Добро пожаловать для обсуждения технических вопросов, контактное имя github.

Проблемы, которые можно найти с помощью Baidu и Google, больше не нужно задавать! Очень устал😕😕😕

Дополнительно:

  • Не создаю закрытые группы;
  • Не продаю уроки или учебные курсы;
  • Не ищу одобрения, не ищу поклонников;
  • Не рекламирую, не беспокою;
  • Не беру плату за еду;
  • Иногда публикую видеоуроки.

Придерживаюсь принципов и границ.

Посылаю сердечки🤞🤞🤞

Выражение недовольства:

Три проблемы, с которыми обязательно столкнётся программист в своей жизни:

  • Проблема с кодировкой🌚;
  • Несоответствие часовых поясов🌗;
  • Проблемы совместимости программного обеспечения❄.

Урок:

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


Статистика:

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/geekyouth-SZT-bigdata.git
git@api.gitlife.ru:oschina-mirror/geekyouth-SZT-bigdata.git
oschina-mirror
geekyouth-SZT-bigdata
geekyouth-SZT-bigdata
master