Использование Apache Sqoop для импорта и экспорта данных между Apache Hadoop в HDInsight и Базой данных SQL Azure

Узнайте, как использовать Apache Sqoop для импорта и экспорта между кластером Apache Hadoop в Azure HDInsight и Базой данных SQL Azure или Microsoft SQL Server. В этом руководстве используется команда sqoop ​​непосредственно из головного узла кластера Hadoop. В этом документе вы подключитесь к головному узлу, используя SSH, и выполните команды. Эта статья является продолжением статьи Использование Apache Sqoop с Hadoop в HDInsight.

Необходимые компоненты

Настройка

  1. С помощью команды ssh command подключитесь к кластеру. Измените приведенную ниже команду, заменив CLUSTERNAME именем своего кластера, а затем введите команду:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Для удобства использования задайте переменные. Замените PASSWORD, MYSQLSERVER и MYDATABASE соответствующими значениями, а затем введите указанные ниже команды.

    export PASSWORD='PASSWORD'
    export SQL_SERVER="MYSQLSERVER"
    export DATABASE="MYDATABASE"
    
    
    export SERVER_CONNECT="jdbc:sqlserver://$SQL_SERVER.database.windows.net:1433;user=sqluser;password=$PASSWORD"
    export SERVER_DB_CONNECT="jdbc:sqlserver://$SQL_SERVER.database.windows.net:1433;user=sqluser;password=$PASSWORD;database=$DABATASE"
    

Экспорт Sqoop

Из Hive в SQL.

  1. Чтобы убедиться, что Sqoop имеет доступ к базе данных, введите приведенную ниже команду в открытом SSH-подключении. Эта команда возвращает список баз данных.

    sqoop list-databases --connect $SERVER_CONNECT
    
  2. Введите следующую команду, чтобы получить список таблиц для указанной базы данных:

    sqoop list-tables --connect $SERVER_DB_CONNECT
    
  3. Чтобы экспортировать данные из таблицы Hive hivesampletable в таблицу mobiledata базы данных, введите приведенную ниже команду в открытом SSH-подключении:

    sqoop export --connect $SERVER_DB_CONNECT \
    -table mobiledata \
    --hcatalog-table hivesampletable
    
  4. Вы можете убедиться, что данные экспортированы, выполнив следующий запрос в SSH-подключении:

    sqoop eval --connect $SERVER_DB_CONNECT \
    --query "SELECT COUNT(*) from dbo.mobiledata WITH (NOLOCK)"
    
    
    sqoop eval --connect $SERVER_DB_CONNECT \
    --query "SELECT TOP(10) * from dbo.mobiledata WITH (NOLOCK)"
    

Импорт Sqoop

Из SQL в хранилище Azure.

  1. Введите приведенную ниже команду в открытом SSH-подключении, чтобы импортировать данные из таблицы SQL mobiledata, в каталог HDInsight wasbs:///tutorials/usesqoop/importeddata. Поля в данных разделены знаками табуляции, а строки завершаются символом новой строки.

    sqoop import --connect $SERVER_DB_CONNECT \
    --table mobiledata \
    --target-dir 'wasb:///tutorials/usesqoop/importeddata' \
    --fields-terminated-by '\t' \
    --lines-terminated-by '\n' -m 1
    
  2. Вместо этого можно указать таблицу Hive:

    sqoop import --connect $SERVER_DB_CONNECT \
    --table mobiledata \
    --target-dir 'wasb:///tutorials/usesqoop/importeddata2' \
    --fields-terminated-by '\t' \
    --lines-terminated-by '\n' \
    --create-hive-table \
    --hive-table mobiledata_imported2 \
    --hive-import -m 1
    
  3. Когда импорт завершится, введите следующую команду в открытом SSH-подключении, чтобы получить список данных в новом каталоге:

    hadoop fs -tail /tutorials/usesqoop/importeddata/part-m-00000
    
  4. Используйте beeline для проверки того, что таблица была создана в Hive.

    1. Связь

      beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
      
    2. Поочередно выполните каждый из представленных ниже запросов и изучите выходные данные:

      show tables;
      describe mobiledata_imported2;
      SELECT COUNT(*) FROM mobiledata_imported2;
      SELECT * FROM mobiledata_imported2 LIMIT 10;
      
    3. Выйдите из beeline с помощью !exit.

Ограничения

  • Массовый экспорт. При работе с HDInsight под управлением Linux соединитель Sqoop, используемый для экспорта данных в SQL, не поддерживает массовую вставку данных.

  • Пакетная обработка: при использовании HDInsight на основе Linux, когда для выполнения вставок применяется параметр-batch, Sqoop выполняет несколько вставок вместо пакетной обработки операций вставки.

Важные замечания

Следующие шаги

Теперь вы узнали, как использовать Sqoop. Дополнительные сведения см. на следующих ресурсах: