У меня есть смущающая параллельная задача, для которой я использую Spark для распределения вычислений. Эти вычисления находятся в Python, и я использую PySpark для чтения и предварительной обработки данных. Входные данные в мою задачу хранятся в HBase. К сожалению, мне еще не удалось найти удовлетворительный (т.е. Простой в использовании и масштабируемый) способ чтения/записи данных HBase из/в Spark с использованием Python.
То, что я изучил ранее:
-
Подключение из моих процессов Python с использованием
happybase
. Этот пакет позволяет подключаться к HBase с Python с помощью HBase Thrift API. Таким образом, я в основном пропускаю Spark для чтения/записи данных и не упускаю возможности оптимизации HBase-Spark. Скорости чтения выглядят достаточно быстро, но скорость записи медленная. В настоящее время это мое лучшее решение. -
Использование SparkContext
newAPIHadoopRDD
иsaveAsNewAPIHadoopDataset
которые используют интерфейс HBase MapReduce. Примеры этого были однажды включены в базу данных Spark (см. Здесь). Однако теперь они считаются устаревшими в пользу привязок HBase Spark (см. Здесь). Я также нашел, что этот метод является медленным и громоздким (для чтения, написания хорошо работает), например, поскольку строки, возвращенные изnewAPIHadoopRDD
должны были анализироваться и преобразовываться различными способами, чтобы в итоге получить объекты Python, которые я хотел. Он также поддерживал только один столбец за раз.
Альтернативы, о которых я знаю:
-
В настоящее время я использую Cloudera CDH, а версия 5.7.0 предлагает
hbase-spark
(заметки о выпуске CDH и подробное сообщение в блоге). Этот модуль (ранее известный какSparkOnHBase
) официально станет частью HBase 2.0. К сожалению, это замечательное решение, похоже, работает только с Scala/Java. -
Huawei Spark-SQL-on-HBase/Astro (я не вижу разницы между двумя...). Он не выглядит таким же надежным и хорошо поддержанным, как и моим решением.