2016-09-04 2 views
1

Один запрос, у меня есть две большие таблицы A (40 ГБ) и B (70 ГБ) в Mysql, мне часто требуется соединение из обеих таблиц. Я не использую join в запросе, так как он никогда не возвращает результат. Пожалуйста, подумайте, что все таблицы хорошо проиндексированы.Apache Spark: полезно использовать структурированные данные

Я беру данные из таблицы A и используя эти данные, я нахожу соответствующие записи в таблице B кусками. Я обрабатываю эти объединенные данные. Весь процесс требует времени, в зависимости от того, сколько обработки я делаю.

Я знаю, что Spark также может использоваться для распределенных вычислений.

Вопрос 1: Если я поместил эти данные в HDFS, а затем обработал его через искры apache, имеющую 5 узлов в кластере, может дать мне более быстрый результат? Я думаю, что да.

Вопрос 2: Измените структурированные данные (из MySql) на HDFS можно считать хорошим подходом?

+1

Что значит лучший результат? Быстрее? Также, что вы подразумеваете под Unstructured Data? – gsamaras

+1

Spark может подключаться к MySQL через JDBC-драйверы, так зачем вам нужно экспортировать в HDFS? –

+2

И экспорт в HDFS по-прежнему приводит к структурированным данным, независимо от того, помещены ли в Hive или только файлы CSV. –

ответ

0

Я собираюсь получить более быстрый результат?

От зависит!

Вы видите имеет смысл только при работе с . Если данные невелики, то расходы на связь и планирование работы будет доминировать над временем выполнения, что приведет к более медленному времени выполнения, чем при серийном исполнении!

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

Таким образом, если ваша машина не может самостоятельно решить проблему, настроив кластер с вашей машиной в качестве мастера, а виртуальная машина в качестве подчиненного, например, не даст никакого ускорения вообще, факт, скорее всего, будет медленнее!

Должен ли я помещать данные MySQL в HDFS?

Не совсем!

Вы можете использовать mySqlContext через формат JBDC, как описано в: How to work with MySQL and Apache Spark?

2

150 концертов не так много для MySQL. Spark не поможет вам, если ваш компьютер не сможет обработать соединение. Вы можете загрузить эти данные в Google Bigtable или в хранилище данных для амазонок и попробовать его. в противном случае вы можете просто создать таблицу №3 путем объединения двух таблиц. Убедитесь, что колонка, на которой вы соединяетесь, индексируется.

1

Это зависит от того, что вы хотите сделать.

Да, Spark очень хорош в работе со структурированными данными, пожалуйста, прочитайте о DataFrames. Вы можете записывать SQL-запросы в свои данные, и эти запросы будут оптимизированы и переведены на вызовы RDD.

Но это очень зависит от того, что вы делаете.

  1. Запросы в реальном времени с веб-сайта, т.е.обновить заказ, обновить клиента -> извините, по-моему, Spark будет накладными расходами. Оптимизировать MySQL с индексами ДОЛЖНЫ быть достаточно. Для кеша в реальном времени посмотрите на сетки, такие как Oracle Coherence, GridGain/Apache Ignite, Hazelcast.

  2. Отчеты и анализ, как пакетный, потоковый анализ на некоторое временное окно, так и анализ adhoc -> Spark будет отличным и может ускорить вашу работу.

  3. ETL для анализа услуг -> снова, Spark станет отличным инструментом для ускорения работы. Одна компания (извините, что я не могу назвать ваше имя публично) написала процесс ETL для своего клиента, вместо 6 часов, используя старые инструменты, теперь время продолжительности ETL составляет 15 минут. Просто массовое чтение из базы данных, подготовка, преобразование, группировка и запись в базу данных хранилища. Однако клиент должен заплатить за кластер и поддерживать инструмент. В этом случае эта стоимость очень низкая, по сравнению с потенциальными деньгами, которые они могут заработать.

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