Выбор формата данных и базы данных Spark/hadoop

Я работаю со структурированными данными (одно значение для каждого поля, одни и те же поля для каждой строки), которые я должен поместить в среду NoSql с помощью Spark (в качестве инструмента анализа) и Hadoop. Хотя, мне интересно, какой формат использовать. я думал о json или csv, но я не уверен. Что вы думаете и почему? У меня недостаточно опыта в этой области, чтобы принять правильное решение.

2-й вопрос: мне нужно проанализировать эти данные (хранящиеся в HDFS). Итак, насколько я знаю, у меня есть две возможности запросить их (до анализа):

  1. прямое чтение и фильтрация. я имею в виду, что это можно сделать с помощью Spark, например:

    data = sqlCtxt.read.json(path_data)
    
  2. Используйте Hbase/Hive, чтобы правильно сделать запрос и затем обработать данные.

Итак, я не знаю, как это сделать стандартным способом и, прежде всего, что будет самым быстрым. Заранее спасибо!


person Flibidi    schedule 17.11.2017    source источник
comment
Самый быстрый вариант - использовать Hbase (в зависимости от модели данных) или использовать какую-либо другую базу данных, а не Hadoop для чтения необработанных данных с диска (то есть не Hive)   -  person OneCricketeer    schedule 17.11.2017


Ответы (1)


Используйте паркет. Я не уверен насчет CSV, но определенно не использую JSON. Мой личный опыт использования JSON со spark был очень, очень медленным для чтения из хранилища, после перехода на Parquet мое время чтения было намного быстрее (например, для загрузки некоторых небольших файлов в сжатом JSON требовалось несколько минут, теперь они загружаются менее чем за секунду в прессованный паркет).

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

Заключительный момент: вы можете использовать SparkSQL для выполнения запросов к сохраненным файлам паркета без необходимости сначала считывать их в кадры данных. Очень удобно.

Надеюсь это поможет :)

person Dan Carter    schedule 17.11.2017
comment
Большое спасибо за ваши советы. Я обязательно попробую это! - person Flibidi; 17.11.2017