Детализация «ОШИБКА ВАЛИДАЦИИ: таблица или представление с заданным именем уже существует в схеме» для пустого каталога - PullRequest
0 голосов
/ 04 декабря 2018

После обновления детализации в нашем кластере до Drill-1.12.0-Mapr, тестирования наших ежедневных сценариев ETL (в которых все используются детализация для преобразования файлов паркета в TSV), ошибка проверки (таблица или представление с указанным именемуже существует") всегда выдается при попытке выполнить оператор CREATE TABLE в некоторых пустых каталогах в доступной для записи рабочей области.

[Error Id: 6ea46737-8b6a-4887-a671-4bddbea02476 on mapr002.ucera.local:31010]
at org.apache.drill.jdbc.impl.DrillCursor.nextRowInternally(DrillCursor.java:489)
at org.apache.drill.jdbc.impl.DrillCursor.loadInitialSchema(DrillCursor.java:561)
:
:
:
Caused by: org.apache.drill.common.exceptions.UserRemoteException: VALIDATION ERROR: A table or view with given name [/internal_etl/project/version-2/stages/storage/ACCOUNT/tsv] already exists in schema [dfs.etl_internal]

После некоторой краткой отладки я вижу, что рассматриваемый каталог FS находится в указанном рабочем пространстве dfs.etl_interal (т. Е. / Internal_etl / project / version-2 / stage / storage / ACCOUNT / tsv) на самом деле пусто , но все еще выдает эти ошибки.

Поиск идентификатора ошибки в файле drillbit.log в соответствующем узле в сообщении об ошибке выше, мы видим

2018-12-04 10:13:25,285 [23f92019-db56-862f-e7b9-cd51b3e174ae:foreman] INFO  o.a.drill.exec.work.foreman.Foreman - Query text for query id 23f92019-db56-862f-e7b9-cd51b3e174ae: create table dfs.etl_internal.`/internal_etl/project/version-2/stages/storage/ACCOUNT/tsv` as 
select <a bunch of fields>
from dfs.etl_internal.`/internal_etl/project/version-2/stages/storage/ACCOUNT/parquet`
2018-12-04 10:13:25,406 [23f92019-db56-862f-e7b9-cd51b3e174ae:foreman] INFO  o.a.d.exec.store.dfs.FileSelection - FileSelection.getStatuses() took 0 ms, numFiles: 1
2018-12-04 10:13:25,408 [23f92019-db56-862f-e7b9-cd51b3e174ae:foreman] INFO  o.a.d.exec.store.dfs.FileSelection - FileSelection.getStatuses() took 0 ms, numFiles: 1
2018-12-04 10:13:25,893 [23f92019-db56-862f-e7b9-cd51b3e174ae:foreman] INFO  o.a.d.exec.store.dfs.FileSelection - FileSelection.getStatuses() took 0 ms, numFiles: 1
2018-12-04 10:13:25,894 [23f92019-db56-862f-e7b9-cd51b3e174ae:foreman] INFO  o.a.d.exec.store.dfs.FileSelection - FileSelection.getStatuses() took 0 ms, numFiles: 1
2018-12-04 10:13:25,898 [23f92019-db56-862f-e7b9-cd51b3e174ae:foreman] INFO  o.a.d.exec.store.dfs.FileSelection - FileSelection.getStatuses() took 0 ms, numFiles: 1
2018-12-04 10:13:25,898 [23f92019-db56-862f-e7b9-cd51b3e174ae:foreman] INFO  o.a.d.exec.store.dfs.FileSelection - FileSelection.getStatuses() took 0 ms, numFiles: 1
2018-12-04 10:13:25,905 [23f92019-db56-862f-e7b9-cd51b3e174ae:foreman] INFO  o.a.d.e.p.s.h.CreateTableHandler - User Error Occurred: A table or view with given name [/internal_etl/project/version-2/stages/storage/ACCOUNT/tsv] already exists in schema [dfs.etl_internal]
org.apache.drill.common.exceptions.UserException: VALIDATION ERROR: A table or view with given name [/internal_etl/project/version-2/stages/storage/ACCOUNT/tsv] already exists in schema [dfs.etl_internal]


[Error Id: 45177abc-7e9f-4678-959f-f9e0e38bc564 ]
    at org.apache.drill.common.exceptions.UserException$Builder.build(UserException.java:586) ~[drill-common-1.12.0-mapr.jar:1.12.0-mapr]
    at org.apache.drill.exec.planner.sql.handlers.CreateTableHandler.checkTableCreationPossibility(CreateTableHandler.java:326) [drill-java-exec-1.12.0-mapr.jar:1.12.0-mapr]
    at org.apache.drill.exec.planner.sql.handlers.CreateTableHandler.getPlan(CreateTableHandler.java:90) [drill-java-exec-1.12.0-mapr.jar:1.12.0-mapr]
    at org.apache.drill.exec.planner.sql.DrillSqlWorker.getQueryPlan(DrillSqlWorker.java:131) [drill-java-exec-1.12.0-mapr.jar:1.12.0-mapr]
    at org.apache.drill.exec.planner.sql.DrillSqlWorker.getPlan(DrillSqlWorker.java:79) [drill-java-exec-1.12.0-mapr.jar:1.12.0-mapr]
    at org.apache.drill.exec.work.foreman.Foreman.runSQL(Foreman.java:567) [drill-java-exec-1.12.0-mapr.jar:1.12.0-mapr]
    at org.apache.drill.exec.work.foreman.Foreman.run(Foreman.java:264) [drill-java-exec-1.12.0-mapr.jar:1.12.0-mapr]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_151]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_151]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_151]
2018-12-04 10:13:25,924 [23f92019-db56-862f-e7b9-cd51b3e174ae:foreman] INFO  o.apache.drill.exec.work.WorkManager - Waiting for 0 queries to complete before shutting down
2018-12-04 10:13:25,924 [23f92019-db56-862f-e7b9-cd51b3e174ae:foreman] INFO  o.apache.drill.exec.work.WorkManager - Waiting for 0 running fragments to complete before shutting down

Эта ошибка возникает даже при использовании DROP TABLE [IF EXISTS] <workspace>.<table path name> перед оператором CREATE TABLE.Кроме того, конфигурации для самого рабочего пространства dfs, по-видимому, не изменились до обновления до Drill-1.12, см. Ниже:

:
:
"workspaces": {
"root": {
"location": "/",
"writable": false,
"defaultInputFormat": null,
"allowAccessOutsideWorkspace": false
},
"tmp": {
"location": "/tmp",
"writable": true,
"defaultInputFormat": null,
"allowAccessOutsideWorkspace": false
},
"etl_internal": {
"location": "/etl/internal",
"writable": true,
"defaultInputFormat": null,
"allowAccessOutsideWorkspace": false
}
},
:
:

Обратите внимание, что весь рассматриваемый процесс предназначен для mv каталогасодержимое каждый день и CREATE TABLE с новыми данными за текущий день (в случае, если это имеет значение), и этот процесс работал нормально, когда мы использовали Drill-1.11.

Больше информации отладки:

Простое удаление папки конечной точки ... / tsv и использование детализации для создания каталога во время оператора CREATE TABLE не работает.Выкидывает неудивительную ошибку

Error: VALIDATION ERROR: Table [/internal_etl/project/version-2/stages/storage/ACCOUNT/tsv] not found
[Error Id: 02e7c088-9162-4731-9fa8-85dfd39e1dec on mapr001.ucera.local:31010] (state=,code=0)

Т.е.Сверло, по-видимому, не создает таблицу автоматически.Отменив эти изменения и выполнив повторный запуск, чтобы получить исходную ошибку, мы можем проверить местоположение с помощью интерфейса интерпретатора sqlline.При этом мы видим

0: jdbc:drill:zk=mapr001:5181,mapr002:5181,ma> describe dfs.etl_internal.`/internal_etl/project/version-2/stages/storage/ACCOUNT/tsv`;
+--------------+------------+--------------+
| COLUMN_NAME  | DATA_TYPE  | IS_NULLABLE  |
+--------------+------------+--------------+
+--------------+------------+--------------+
No rows selected (1.791 seconds)

Так что он видит что-то там, но только когда Я делаю это сам , что похоже на catch-22, учитывая, что исходная ошибка жаловаться на то, что что-то уже есть .

Если кто-то с большим опытом использования дрели знает, что здесь может происходить, любые мнения или советы будут оценены.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Похоже, вы сделали какую-то ошибку в процессе обновления версии Drill на вашем кластере MapR.

Для получения дополнительной информации см. Этот документ: http://doc.mapr.com/display/MapR/Upgrading+to+the+Latest+Version+of+Drill
или последние документы, если вы используете последнюю версию MapR Core: https://mapr.com/docs/home/UpgradeGuide/PreupgradeStepsDrill.html?hl=drill%2Cupgrade
https://mapr.com/docs/home/UpgradeGuide/PostUpgradeStepsDrill.html?hl=drill%2Cupgrade

DROP TABLE для таблиц Drill без схемы работает нормально.Дополнительная информация о таблицах Drill без схемы (пустые каталоги):
https://drill.apache.org/docs/data-sources-and-file-formats-introduction/#schemaless-tables

0 голосов
/ 06 декабря 2018

TLDR : перезапустил биты сверления на узлах, и все, кажется, теперь работает.

Что было сделано, чтобы заставить тренировку выполнить инструкцию CTAS без ошибки:

  1. Перезапустите сервисы бурения с MapR MCS.Это было сделано исключительно на основе догадки из-за проблемы висячих-тренировок-1.11, возникшей ранее, когда после обновления от сеансов-1.11 до сеансов-1.12 возникла проблема, когда необходимо было вручную перейти к каждому узлу, jps, чтобы увидеть, чтоDrillbit 1.11 все еще работал, и kill -9 <pid of 1.11 drillbit>, и перезапустите Drbitbit для получения 1.12 работы.Не уверен, насколько это помогло, но задокументировал, так как это было единственное изменение, внесенное в процессе отладки, которое не было отменено до запуска изменений, которые в конечном итоге, по-видимому, теперь исправили ошибку.
  2. Изменены детализацияиспользование сценариев для удаления целевой папки (hadoop fs -rm -r /hdfs/path/to/folder) оператора CTAS после запуска на нем некоторых необходимых процессов и последующего разрешения для оператора CTAS воссоздать его самому (даже если это уже упоминалось в исходном сообщении, пробовал это раньше и получал "Таблица не найдена »ошибки в странной ситуации с уловкой-22 (таким образом, мое мнение о том, что перезапуск сервисов обучения мог внести свой вклад)).

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

...