2015-03-05 3 views
0

Я собираюсь использовать Apache Spark для обработки больших текстовых файлов, где в цикле обработки участвует часть сравнения текстовых частей с данными из большой таблицы SQL.Apache Spark сравнивает файлы с данными SQL

Задача:

1) Process files and break text into pieces 
2) Compare pieces with database ones 

Определенно, узкое место будет SQL. Я совершенно не знаком с Apache Spark, и хотя я уверен, что Subtask #1 «его парень», я не совсем уверен, что Subtask #2 может обрабатываться Spark (я имею в виду, эффективным способом).

Вопрос в том, как Spark имеет дело с итерируемыми выборами из большого SQL (возможно, кеша, сколько может?) В параллельной и распределенной среде?

+1

Было бы возможно/целесообразно использовать данные sqoop из таблиц в HDFS? Тогда ваша обработка может полностью работать с данными HDFS. – DPM

+0

@DPM Да, может быть, хорошая заметка. Что такое Spark SQL и его метод 'cacheTable()'? – ovnia

+1

Spark SQL предназначен для запроса RDD с использованием синтаксиса SQL. Похоже, вам нужно [JdbcRDD] (https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.rdd.JdbcRDD), если вы хотите читать данные SQL в Spark, как описано в [этом ответе] (http://stackoverflow.com/questions/26239001/reading-data-from-sql-server-using-spark-sql) – DPM

ответ

1

Проводка в ответ на просьбу:

Если вам необходимо повторно обработать данные из источника данных SQL, я обычно это стоит использовать Sqoop для извлечения данных в HDFS, чтобы моя обработка может работать более легко. Это особенно полезно, когда я разрабатываю свой поток данных, поскольку я часто запускаю одно и то же задание по образцу данных несколько раз за короткий промежуток времени, и если он был sqooped, мне не нужно ударять по базе данных сервер каждый раз.

Если ваша работа является периодическим/пакетным (ежедневная очистка данных или отчет или что-то еще), это может быть достаточной реализацией, а сбор исторических данных в HDFS в конечном итоге полезен для других целей много раз.

Если вам нужны данные в реальном времени, то вы должны использовать JdbcRDD, как описано в this other answer, что позволяет рассматривать источник данных SQL как RDD в потоке данных Spark.

Удачи.

Смежные вопросы