2016-10-13 4 views
0

HDP-2.5.0.0 с использованием Ambari 2.4.0.1- --schema не работает с Sqoop создания улья стола

Я могу создать таблицу в HCatalog из исходного SQL Server дб, например:

sqoop import --null-string '\\N' --null-non-string '\\N' --hive-delims-replacement '\0D' --hcatalog-home /usr/hdp/current/hive-webhcat --hcatalog-database MS_Management_Coaching --hcatalog-table TripAggregate --create-hcatalog-table --hcatalog-storage-stanza 'stored as orc tblproperties ("orc.compress"="ZLIB")' --validate --connect 'jdbc:sqlserver://<DB server>;database=Management' --username uname--password pwd--table TripAggregate -- --schema Coaching 

, но когда я пытаюсь использовать в --create-hive-table, опция - --schema не работает, независимо от того, где я устанавливаю его:

-bash-4.2$ sqoop create-hive-table --hive-database test --connect 'jdbc:sqlserver://<DB Server>;database=Management' --username uname--password pwd--table TripAggregate -- --schema Coaching 
Warning: /usr/hdp/2.5.0.0-1245/accumulo does not exist! Accumulo imports will fail. 
Please set $ACCUMULO_HOME to the root of your Accumulo installation. 
16/10/12 21:28:13 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6.2.5.0.0-1245 
16/10/12 21:28:13 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead. 
16/10/12 21:28:13 ERROR tool.BaseSqoopTool: Error parsing arguments for create-hive-table: 
16/10/12 21:28:13 ERROR tool.BaseSqoopTool: Unrecognized argument: -- 
16/10/12 21:28:13 ERROR tool.BaseSqoopTool: Unrecognized argument: --schema 
16/10/12 21:28:13 ERROR tool.BaseSqoopTool: Unrecognized argument: DriverCoaching 
Try --help for usage instructions. 

ответ

1

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

Изучив код sqoop, я обнаружил, что в --create-hive-table поток не переходит к базовому инструменту. Вот почему вы не можете использовать -- --schema в своей команде.

Полезная часть source code для ImportTool:

public void validateOptions(SqoopOptions options) 
     throws InvalidOptionsException { 

    // If extraArguments is full, check for '--' followed by args for 
    // mysqldump or other commands we rely on. 
    options.setExtraArgs(getSubcommandArgs(extraArguments)); 
    int dashPos = getDashPosition(extraArguments); 

    if (hasUnrecognizedArgs(extraArguments, 0, dashPos)) { 
     throw new InvalidOptionsException(HELP_STR); 
    } 

    validateImportOptions(options); 
    validateIncrementalOptions(options); 
    validateCommonOptions(options); 
    validateCodeGenOptions(options); 
    validateOutputFormatOptions(options); 
    validateHBaseOptions(options); 
    validateHiveOptions(options); 
    validateHCatalogOptions(options); 
    validateAccumuloOptions(options); 
    } 

Полезной часть source code для CreateHiveTable:

public void validateOptions(SqoopOptions options) 
     throws InvalidOptionsException { 

    if (hasUnrecognizedArgs(extraArguments)) { 
     throw new InvalidOptionsException(HELP_STR); 
    } 

    validateCommonOptions(options); 
    validateOutputFormatOptions(options); 
    validateHiveOptions(options); 

    if (options.getTableName() == null) { 
     throw new InvalidOptionsException(
      "--table is required for table definition importing." + HELP_STR); 
    } 
    } 

вы видите никакой проверки для -- аргументов не будет сделана в дальнейшем.


Edit:

--hive-import по умолчанию создает улей таблицу, и вы можете использовать -- --schema с помощью импорта. Если вы хотите, чтобы sqoop создавал таблицу hive для вас и импортировал данные в эту таблицу. Это должно сработать для вас.

+0

Значит ли это, что -create-hive-table не может читать из исходной схемы? Какие-либо обходные решения, которые могут быть реализованы? –

+0

Я предполагаю, что без '--schema Coaching' вы не сможете прочитать эту таблицу. Таким образом, вы можете поместить свою таблицу в схему по умолчанию ('dbo', я думаю) и продолжить. Или вы можете изменить исходный код sqoop и построить локально и продолжить. –

+0

@KaliyugAntagonist проверить обновленный ответ –