Удалены строки в Spark при изменении базы данных в MySQL - PullRequest
0 голосов
/ 11 июля 2019

Я следил за 5 минутами, как настроить базу данных htap с tidb_tispark, и все работает, пока я не попадаю в раздел Запустите TiSpark .Моя первая проблема возникает при выполнении строки:

docker-compose exec tispark-master  /opt/spark-2.1.1-bin-hadoop2.7/bin/spark-shell

Но я справился с этим, изменив версию spark на версию, найденную внутри контейнера:

docker-compose exec tispark-master  /opt/spark-2.3.3-bin-hadoop2.7/bin/spark-shell

Моя вторая проблема возникаетпри выполнении трехстрочного блока:

import org.apache.spark.sql.TiContext
val ti = new TiContext(spark)
ti.tidbMapDatabase("TPCH_001")

Когда я выполняю последний оператор, я получаю следующий вывод

scala> ti.tidbMapDatabase("TPCH_001")
2019-07-11 16:14:32 WARN  General:96 - Plugin (Bundle) "org.datanucleus" is already registered. Ensure you dont have multiple JAR versions of the same plugin in the classpath. The URL "file:/opt/spark/jars/datanucleus-core-3.2.10.jar" is already registered, and you are trying to register an identical plugin located at URL "file:/opt/spark-2.3.3-bin-hadoop2.7/jars/datanucleus-core-3.2.10.jar."
2019-07-11 16:14:32 WARN  General:96 - Plugin (Bundle) "org.datanucleus.api.jdo" is already registered. Ensure you dont have multiple JAR versions of the same plugin in the classpath. The URL "file:/opt/spark/jars/datanucleus-api-jdo-3.2.6.jar" is already registered, and you are trying to register an identical plugin located at URL "file:/opt/spark-2.3.3-bin-hadoop2.7/jars/datanucleus-api-jdo-3.2.6.jar."
2019-07-11 16:14:32 WARN  General:96 - Plugin (Bundle) "org.datanucleus.store.rdbms" is already registered. Ensure you dont have multiple JAR versions of the same plugin in the classpath. The URL "file:/opt/spark/jars/datanucleus-rdbms-3.2.9.jar" is already registered, and you are trying to register an identical plugin located at URL "file:/opt/spark-2.3.3-bin-hadoop2.7/jars/datanucleus-rdbms-3.2.9.jar."
2019-07-11 16:14:36 WARN  ObjectStore:568 - Failed to get database global_temp, returning NoSuchObjectException

Это не мешает мне выполнить запрос:

spark.sql("select * from nation").show(30);

Но когда я следую дальнейшим шагам руководства, чтобы изменить базу данных из MySQL, изменения не отражаются немедленно в Spark.Кроме того, в какой-то момент в будущем (я думаю, что> через 5 минут) измененная строка перестает отображаться в SQL-запросах Spark.

Я довольно новичок в этом виде настройки и недействительно знаю, как решить эту проблему.Поиски предупреждений, которые я получил, не освещались.

Я не знаю, полезно ли это, но когда я подключаю MySQL, я получаю версию сервера:

Server version: 5.7.25-TiDB-v3.0.0-rc.1-309-g8c20289c7 MySQL Community Server (Apache License 2.0)

1 Ответ

1 голос
/ 11 июля 2019

Я один из главных разработчиков TiSpark.Извините за неудачный опыт работы с ним.

Из-за проблемы с докером я не могу воспроизвести вашу проблему напрямую, но, похоже, вы обнаружили одну из недавно исправленных ошибок.https://github.com/pingcap/tispark/pull/862/files

  1. Учебное пособие не совсем обновлено и указывает на более старую версию.Вот почему он не работал с искрой 2.1.1, как в учебнике.Мы обновим его как можно скорее.
  2. Более новая версия TiSpark больше не использует tidbMapDatabase, а напрямую подключается к каталогу.Метод tidbMapDatabase остается для обратной совместимости.К сожалению, в tidbMapDatabase была ошибка (когда мы перенесли ее из более старой версии), что она извлекает временную метку для запроса только после вызова функции.Это приводит к тому, что TiSpark всегда использует старую временную метку для чтения снимка, и новые данные никогда не будут видны ей.

В более новой версии TiSpark (TiSpark 2.0+ с Spark 2.3+) базы данных и таблицы напрямуюподключен к службе каталогов, и вы можете напрямую позвонить

spark.sql("use TPCH_001").show
spark.sql("select * from nation").show

Это должно дать вам свежие данные.Поэтому попробуйте перезапустить драйвер Spark, просто попробуйте две строки кода выше и посмотрите, работает ли он.

Дайте мне знать, если это решит вашу проблему.С другой стороны, мы проверим наш образ докера, чтобы убедиться, что он уже содержит исправление.

Если что-то все-таки пошло не так, не могли бы вы помочь запустить приведенный ниже код и сообщить нам версию TiSpark.

spark.sql("select ti_version()").show

Опять же, извините, что доставил вам неприятности, и спасибо за попытку.

РЕДАКТИРОВАТЬ

Чтобы ответить на ваш комментарий: Предупреждение из-за искры сама попытается найтисначала базу данных в ее собственном каталоге, и это приведет к тому, что Failed получит предупреждение.Но процесс отработки отказа делегирует поиск в tispark, а затем ведет себя правильно.Так что это предупреждение можно игнорировать.Рекомендуется добавить следующие строки в ваши log4j.properties в папке conf вашей свечи.

 log4j.logger.org.apache.hadoop.hive.metastore.ObjectStore=ERROR

Мы скоро отполируем образ руководства по докеру.Большое спасибо за попытку.

...