Spark, HIVE;Вопрос о системной раздаче 2 ТБ в день - PullRequest
0 голосов
/ 27 октября 2018

Моя команда должна создать базу данных HIVE для обработки и доступа к очень большому количеству данных.Данные имеют формат json, поэтому мы хотели бы сжать данные в табличный формат (например, таблицу csv), чтобы удалить избыточность, и хотим выполнить некоторую постобработку, чтобы в дальнейшем данные были легко доступны / обрабатывались.У нас ограниченный опыт создания таких больших систем, поэтому мне хотелось бы знать ряд различных вариантов, которые необходимо рассмотреть, прежде чем мы начнем строить систему.

Допущения :

  • Конфигурация системы: кластер из 25 узлов, каждый узел имеет 20 ЦП и хранилище по 20 ТБ.
  • HDFS, Spark, HIVE установлено.
  • Подача данных: каждый день 2000 файлов,каждый файл (json.gz) составляет 1 ГБ (1 МБ записей), поэтому ежедневный объем данных составляет 2 ТБ.
  • Формат данных: формат JSON.{userID: val1, timestamp: val2;key1; val3, key2: val4 ...} количество пользователей (всего) составляет 10 МБ, а количество ключей - 1000.
  • Требуемые проанализированные выходные данные csv в табличном формате (Я предполагаю, что это наиболее удобный способ для постобработки и HIVE): данные смешаны с 10 различными типами, поэтому желательно разбить данные на 10 независимых таблиц (csv) с различным количеством столбцов:
    1. Таблица A: столбец 10
    2. Таблица B: столбец 20
    3. Таблица C: столбец 6
    4. Таблица D: столбцы 30…
    5. Таблица J: столбцы 14
  • Данные csv нуждаются в некоторой постобработке: каждая таблица будет содержать записи по 10 миллионов пользователей, и у каждого пользователя будет 100 записей с отметками времени: нам нужноотсортировать таблицу по UserID и timestamp;затем вычислите некоторые значения для каждого userID.(например, примените функцию сравнения к столбцу A1 и удалите отрицательные значения).
  • Объем постобработки в день составляет 500 МБ несжатого csv, поскольку он устраняет значительные накладные расходы из ключей json и избыточных данных.Затем будет * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * её;} {НЕ о Е о * * * * * *: НЕ ТИП;Сохранение данных: распакуйте gz.json файлы и сохраните json файлы в hdfs папке "/day1".
  • json при разборе: используйте pyspark для разбора каждого json файла в csv отформатируйте и сохраните их в hdfs папке "/proc_0/day1/".

    Обработайте каждый файл и запишите, разбейте их на 10 разных файлов в соответствии с типом данных (разные таблицы).

    общее количество выходных файлов / день: 2000 * 10 = 20000 файлов.

    (ref: https://www.supergloo.com/fieldnotes/spark-sql-json-examples-python-using-world-cup-player-data/)

    df =sqlContext.read.json('test.json')

  • Постобработка: используйте pyspark и для каждой таблицы примените сортировку к таблице иприменить обработку каждого столбца, а затем сохранить выходные файлы csv в hdfs "/ proc / day1".

  • Hive: для доступа к данным используйте файлы csv в "/proc/".

  • (необязательный процесс): сохраните файлы csv в таблице ORC и удалите исходные файлы json и временные csv. Это еще больше сократит выходные данныеобъем.

...