Sqoop incremental SemanticException Нет файлов, соответствующих ошибке hdfs://host/user/xyz/_sqoop/?

Я пытаюсь создать сохраненное задание sqoop (инкрементное) и использовать хранилище метаданных sqoop в качестве репозитория. (из соображений безопасности «xyz» — это пользователь unix, выполняющий задание, а sample_table используется для справки)

sqoop job -Dhadoop.security.credential.provider.path=jceks://path/to/pwd \
--meta-connect "jdbc:hsqldb:file:/tmp/sqoop-meta.db;shutdown=true" \
--create sample_job --import -Dmapred.job.queue.name=realtime \
--connect jdbc:mysql://hostname/db?zeroDateTimeBehavior=convertToNull \
--driver com.mysql.jdbc.Driver \
--table SAMPLE_TABLE -m 1 \
--username tony \
--password-alias pwd \
--incremental lastmodified \
--check-column ts \
--last-value 2018-04-24 \
--target-dir /some/tmp/location/ \
--map-column-hive XYZ=tinyint \
--null-string '' \
--null-non-string ''

Использование локального хранилища метаданных sqoop, которое также используется при выполнении сохраненного задания.

sqoop job --meta-connect "jdbc:hsqldb:file:/tmp/sqoop-meta.db;shutdown=true" -exec sample_job

Sqoop работает нормально, и я вижу, что данные загружаются в местоположение hdfs. Однако в конце получаю эту ошибку. Кажется, нигде не найти исправления для этого. Пробовал дать полное разрешение каталогу _sqoop, но проблема все та же.

    Logging initialized using configuration in jar:file:/usr/hdp/2.6.4.0-91/hive/lib/hive-common-1.2.1000.2.6.4.0-91.jar!/hive-log4j.properties
    OK
    Time taken: 3.028 seconds
    FAILED: SemanticException Line 2:17 Invalid path ''hdfs://hostname/user/xyz/_sqoop/ad240610c282442cb65b61b14f582935_sample_table'': No files matching path hdfs://vBAPUAT01nn/user/xyz/_sqoop/ad240610c282442cb65b61b14f582935_sample_table

Но указанный выше файл отсутствует в папке _sqoop. Вместо этого каждый раз, когда я запускаю операцию sqoop, я вижу новый созданный файл с другим именем. /скауп/

$ hadoop fs -ls /user/pcjaapp/_sqoop/
drwxrwxrwx   - xyz hdfs          0 2018-04-26 16:31 /user/xyz/_sqoop/1ab0f2de2ace4984b7b978af5f8f8336_sample_table
drwxr-xr-x   - xyz hdfs          0 2018-04-27 10:50 /user/xyz/_sqoop/3aedb9fc0857433f8388ae2c70019d93_sample_table
drwxrwxrwx   - xyz hdfs          0 2018-04-26 16:54 /user/xyz/_sqoop/6dfb90bcf7854f5e82efebbcd317cabe_sample_table
drwxrwxrwx   - xyz hdfs          0 2018-04-26 15:29 /user/xyz/_sqoop/a59b80e855734c35b785bdc35dcbd5a6_sample_table
drwxrwxrwx   - xyz hdfs          0 2018-04-26 14:30 /user/xyz/_sqoop/b77d4b88140e469daa5aa0962b56b562_sample_table

Может кто-нибудь пролить свет на то, что именно здесь происходит. Довольно новое в этой области, так как это первая попытка запустить добавочные задания sqoop с использованием метахранилища.


person StrangerThinks    schedule 27.04.2018    source источник
comment
При дальнейшем осмотре я вижу, что созданная папка на самом деле содержит данные sqooped. например при последнем запуске я вручную редактировал строку в исходном коде и нашел эту строку в каталоге /_sqoop/‹id›_table_name hdfs. Каким-то образом sqoop извлекает эти данные и объединяет их с целевым каталогом. Но почему выдает ошибку?   -  person StrangerThinks    schedule 27.04.2018
comment
_sqoop — временный каталог, создаваемый для хранения временных данных. похоже, вы не предоставили достаточных прав доступа к домашнему каталогу hdfs. Можете ли вы попробовать предоставить требуемые разрешения для файлов create, read, wirte, delete в вашем домашнем каталоге hdfs?   -  person Sandeep Singh    schedule 28.04.2018
comment
Вы можете попробовать chmod -R 755 /user/xyz   -  person Sandeep Singh    schedule 28.04.2018
comment
@SandeepSingh Привет. Извините, не смог проверить раньше, потому что я был вдали от своей рабочей станции. Я проверил. /user/xyz уже имеет набор разрешений 755. Любое другое понимание?   -  person StrangerThinks    schedule 30.04.2018
comment
ОБНОВЛЕНИЕ: Попытался запустить операцию sqoop без использования хранилища метаданных. просто команда импорта sqoop с инкрементным последним обновленным предложением, ключом слияния. Проблема все еще существует. В итоге такая же ошибка.   -  person StrangerThinks    schedule 30.04.2018
comment
Ведение журнала инициализировано с использованием конфигурации в jar:file:/usr/hdp/2.6.4.0-91/hive/lib/hive-common-1.2.1000.2.6.4.0-91.jar!/hive-log4j.properties OK Затраченное время: 2,92 секунды FAILED: SemanticException Line 2:17 Недопустимый путь ''hdfs://hostname/user/xyz/_sqoop/55cc1038f2924cc398e5e014061eb0f2_sample_table'': нет файлов, соответствующих пути hdfs://hostname/user/xyz/_sqoop/55cc1038f2924cc340e6e01f   -  person StrangerThinks    schedule 30.04.2018


Ответы (1)


Я выкопал официальные ресурсы docs и hortonworks и, наконец, смог решить проблему, удалив приведенный ниже параметр из команды sqoop:

--hive-import \
--map-column-hive XYZ=tinyint \

Я понял, что в этом случае преобразование tinyint можно игнорировать, передав его как строку. При использовании вышеуказанной команды sqoop также нуждается в предложении «--hive-import», и именно здесь он терпит неудачу, потому что он ожидает базовую таблицу каждый раз, когда выполняется sqoop. Когда указанное выше предложение было удалено + параметр map-column-hive, sqoop успешно завершил работу и смог обновить хранилище метаданных с последним значением.

person StrangerThinks    schedule 04.05.2018