Sqoop «import-all-tables» не удается импортировать все таблицы

#java #sql-server #hive #sqoop

#java #sql-сервер #улей #sqoop

Вопрос:

это команда sqoop, которую я использую для импорта данных с SQL Server в Hive
sqoop-import-all-tables --connect "jdbc:sqlserver://ip.ip.ip.ipMIGERATIONSERVER;port=1433;username=sa;password=blablaq;database=sqlserverdb" --create-hive-table --hive-import --hive-database hivemtdb
Проблема в том, что sqlserverdb в нем около 100 таблиц, но когда я выполняю эту команду, она просто импортирует 6 или 7 случайных таблиц в куст. Такое поведение действительно странно для меня. Я не могу найти, где я делаю ошибку.
РЕДАКТИРОВАТЬ : 1

 Warning: /usr/hdp/2.4.3.0-227/accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
16/10/13 13:17:38 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6.2.4.3.0-227
16/10/13 13:17:38 INFO tool.BaseSqoopTool: Using Hive-specific delimiters for output. You can override
16/10/13 13:17:38 INFO tool.BaseSqoopTool: delimiters with --fields-terminated-by, etc.
16/10/13 13:17:38 INFO manager.SqlManager: Using default fetchSize of 1000
16/10/13 13:17:38 INFO tool.CodeGenTool: Beginning code generation
16/10/13 13:17:38 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM [UserMessage] AS t WHERE 1=0
16/10/13 13:17:38 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /usr/hdp/2.4.3.0-227/hadoop-mapreduce
Note: /tmp/sqoop-sherry/compile/c809ee201c0aec1edf2ed5a1ef4aed4c/UserMessage.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
16/10/13 13:17:39 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-sherry/compile/c809ee201c0aec1edf2ed5a1ef4aed4c/UserMessage.jar
16/10/13 13:17:39 INFO mapreduce.ImportJobBase: Beginning import of UserMessage
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/hdp/2.4.3.0-227/hadoop/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/hdp/2.4.3.0-227/zookeeper/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
16/10/13 13:17:40 INFO impl.TimelineClientImpl: Timeline service address: http://machine-02-xx:8188/ws/v1/timeline/
16/10/13 13:17:40 INFO client.RMProxy: Connecting to ResourceManager at machine-02-xx/xxx.xx.xx.xx:8050
16/10/13 13:17:42 INFO db.DBInputFormat: Using read commited transaction isolation
16/10/13 13:17:42 INFO mapreduce.JobSubmitter: number of splits:1
16/10/13 13:17:42 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1475746531098_0317
16/10/13 13:17:43 INFO impl.YarnClientImpl: Submitted application application_1475746531098_0317
16/10/13 13:17:43 INFO mapreduce.Job: The url to track the job: http://machine-02-xx:8088/proxy/application_1475746531098_0317/
16/10/13 13:17:43 INFO mapreduce.Job: Running job: job_1475746531098_0317
16/10/13 13:17:48 INFO mapreduce.Job: Job job_1475746531098_0317 running in uber mode : false
16/10/13 13:17:48 INFO mapreduce.Job:  map 0% reduce 0%
16/10/13 13:17:52 INFO mapreduce.Job:  map 100% reduce 0%
16/10/13 13:17:52 INFO mapreduce.Job: Job job_1475746531098_0317 completed successfully
16/10/13 13:17:52 INFO mapreduce.Job: Counters: 30
        File System Counters
                FILE: Number of bytes read=0
                FILE: Number of bytes written=156179
                FILE: Number of read operations=0
                FILE: Number of large read operations=0
                FILE: Number of write operations=0
                HDFS: Number of bytes read=87
                HDFS: Number of bytes written=0
                HDFS: Number of read operations=4
                HDFS: Number of large read operations=0
                HDFS: Number of write operations=2
        Job Counters
                Launched map tasks=1
                Other local map tasks=1
                Total time spent by all maps in occupied slots (ms)=3486
                Total time spent by all reduces in occupied slots (ms)=0
                Total time spent by all map tasks (ms)=1743
                Total vcore-seconds taken by all map tasks=1743
                Total megabyte-seconds taken by all map tasks=2677248
        Map-Reduce Framework
                Map input records=0
                Map output records=0
                Input split bytes=87
                Spilled Records=0
                Failed Shuffles=0
                Merged Map outputs=0
                GC time elapsed (ms)=30
                CPU time spent (ms)=980
                Physical memory (bytes) snapshot=233308160
                Virtual memory (bytes) snapshot=3031945216
                Total committed heap usage (bytes)=180879360
        File Input Format Counters
                Bytes Read=0
        File Output Format Counters
                Bytes Written=0
16/10/13 13:17:52 INFO mapreduce.ImportJobBase: Transferred 0 bytes in 12.6069 seconds (0 bytes/sec)
16/10/13 13:17:52 INFO mapreduce.ImportJobBase: Retrieved 0 records.
16/10/13 13:17:52 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM [UserMessage] AS t WHERE 1=0
16/10/13 13:17:52 WARN hive.TableDefWriter: Column SendDate had to be cast to a less precise type in Hive
16/10/13 13:17:52 INFO hive.HiveImport: Loading uploaded data into Hive

Logging initialized using configuration in jar:file:/usr/hdp/2.4.3.0-227/hive/lib/hive-common-1.2.1000.2.4.3.0-227.jar!/hive-log4j.properties
OK
Time taken: 1.286 seconds
Loading data to table sqlcmc.usermessage
Table sqlcmc.usermessage stats: [numFiles=1, totalSize=0]
OK
Time taken: 0.881 seconds
Note: /tmp/sqoop-sherry/compile/c809ee201c0aec1edf2ed5a1ef4aed4c/DadChMasConDig.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

Logging initialized using configuration in jar:file:/usr/hdp/2.4.3.0-227/hive/lib/hive-common-1.2.1000.2.4.3.0-227.jar!/hive-log4j.properties
OK
  

Комментарии:

1. Поместите --verbose ( для проверки расширенных журналов ) в свою команду и проверьте, есть ли какие-либо ошибки / исключения

2. да, я тоже пробовал использовать —verbose, но он не показывает никаких исключений или ошибок.

3. Попробуйте sqoop list-tables --connect "jdbc:sqlserver://ip.ip.ip.ipMIGERATIONSERVER;port=1433;username=sa;password=blablaq;database=sqlserverdb" . Он показывает все 100 таблиц?

4. да, он показывает все таблицы. но я увидел кое-что, что показывает список всех таблиц, и я понимаю, что он постоянно импортирует только первые 6 таблиц (из списка, который я видел сейчас)

5. это какая-то проблема с mapreduce, поскольку sqoop использует MR в серверной части, и я должен передать определенный аргумент, чтобы включить его для импорта всех таблиц.

Ответ №1:

Прежде всего import-all-tables , будет запущена таблица импорта для всех таблиц.

Если вы не определяете количество картографов в задании, Sqoop по умолчанию выберет 4 картографа. Итак, для этого требуется, чтобы таблица имела первичный ключ, или вы указываете --split-by имя столбца.

Если это так, вы увидите ошибку типа:

Инструмент ОШИБКИ.ImportAllTablesTool: ошибка во время импорта: не удалось найти первичный ключ для тестирования таблицы. Пожалуйста, укажите один с помощью —split-by или выполните последовательный импорт с помощью ‘-m 1’.

Таким образом, вы можете использовать 1 картограф, который замедлит процесс импорта.

Лучший способ — добавить --autoreset-to-one-mapper , он будет импортировать таблицы с первичным ключом с количеством сопоставителей, указанных в команде, и автоматически будет использовать 1 сопоставитель для таблиц без первичного ключа.


Подходим к вашей проблеме,

сбой импорта sqoop для таблицы DadChMasConDig .

Я не знаю, почему он не зарегистрирован на консоли.

При импорте этой таблицы может возникнуть исключение, например

Обнаруженное исключение IOException при выполнении задания импорта: java.io.IOException: куст не поддерживает тип SQL для столбца <somecolumn>

Например, varbinary не поддерживается.

Если вы импортируете данные только в HDFS, это не должно быть проблемой. Вы можете попробовать:

sqoop-import-all-tables --connect "jdbc:sqlserver://ip.ip.ip.ipMIGERATIONSERVER;port=1433;username=sa;password=blablaq;database=sqlserverdb"

Ответ №2:

У меня была такая же проблема, и у меня сработало следующее. Хотя обычно —create-hive-table и —hive-overwrite не сочетаются и не имеют смысла вместе. Но никакая другая комбинация не работала, и каждый раз импортировались только 3 из 10 или часть таблиц

  sqoop import-all-tables 
       --connect jdbc:mysql://<mysql-url>/my_database 
       --username sql_user 
       --password sql_pwd 
       --hive-import 
       --hive-database test_hive 
       --hive-overwrite 
       --create-hive-table 
       --warehouse-dir /apps/hive/warehouse/test_hive.db 
       -m 1