使用 Apache Sqoop 在 Apache Hadoop on HDInsight 与 Azure SQL 数据库之间导入和导出数据

了解如何使用 Apache Sqoop 在 Azure HDInsight 中的 Apache Hadoop 群集与 Azure SQL 数据库或 Microsoft SQL Server 之间进行导入和导出。 本文档中的步骤直接从 Hadoop 群集的头节点使用 sqoop 命令。 可以使用 SSH 连接到头节点并运行本文档中的命令。 本文是在 HDInsight 中将 Apache Sqoop 与 Hadoop 配合使用的续篇。

先决条件

设置

  1. 使用 ssh 命令连接到群集。 编辑以下命令(将 CLUSTERNAME 替换为群集的名称),然后输入该命令:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.cn
    
  2. 为了便于使用,请设置变量。 将 PASSWORDMYSQLSERVERMYDATABASE 替换为相关值,然后输入以下命令:

    export PASSWORD='PASSWORD'
    export SQL_SERVER="MYSQLSERVER"
    export DATABASE="MYDATABASE"
    
    export SERVER_CONNECT="jdbc:sqlserver://$SQL_SERVER.database.chinacloudapi.cn:1433;user=sqluser;password=$PASSWORD"
    export SERVER_DB_CONNECT="jdbc:sqlserver://$SQL_SERVER.database.chinacloudapi.cn: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. 使用 !exit 退出 beeline。

限制

  • 批量导出 - 在基于 Linux 的 HDInsight 上,用于将数据导出到 SQL 的 Sqoop 连接器不支持批量插入。

  • 批处理 - 在基于 Linux 的 HDInsight 上,如果在执行插入时使用 -batch 开关,Sqoop 将进行多次插入而不是批处理插入操作。

重要注意事项

后续步骤

现在,你已了解了如何使用 Sqoop。 若要了解更多信息,请参阅以下文章: