在 HDInsight 中将 Apache Sqoop 与 Hadoop 配合使用

了解如何使用 HDInsight 中的 Apache Sqoop 在 HDInsight 群集与 Azure SQL 数据库之间导入和导出数据。

虽然自然而然地选用 Apache Hadoop 处理如日志和文件等非结构化和半结构化的数据,但可能还需要处理存储在关系数据库中的结构化数据。

Apache Sqoop 是一种专用于在 Hadoop 群集和关系数据库之间传输数据的工具。 可以使用此工具将数据从关系数据库管理系统 (RDBMS)(如 SQL Server、MySQL 或 Oracle)中导入到 Hadoop 分布式文件系统 (HDFS),在 Hadoop 中使用 MapReduce 或 Apache Hive 转换数据,然后将数据导回到 RDBMS。 本文将 Azure SQL 数据库用作关系数据库。

重要

本文将设置一个测试环境用于执行数据传输。 然后,你将从下面的运行 Sqoop 作业部分所述的方法中,为此环境选择一种数据传输方法。

有关 HDInsight 群集上支持的 Sqoop 版本,请参阅 HDInsight 提供的群集版本有哪些新增功能?

了解方案

HDInsight 群集附带了某些示例数据。 可使用以下两个示例:

  • 一个 Apache Log4j 日志文件,位于 /example/data/sample.log。 以下日志会从该文件中提取出来:
2012-02-03 18:35:34 SampleClass6 [INFO] everything normal for id 577725851
2012-02-03 18:35:34 SampleClass4 [FATAL] system problem at id 1991281254
2012-02-03 18:35:34 SampleClass3 [DEBUG] detail for id 1304807656
...
  • 一个名为 hivesampletable 的 Hive 表,它引用 /hive/warehouse/hivesampletable 中的数据文件。 该表包含一些移动设备数据。

    字段 数据类型
    clientid string
    querytime string
    market string
    deviceplatform string
    devicemake string
    devicemodel string
    state string
    country string
    querydwelltime Double
    sessionid bigint
    sessionpagevieworder bigint

本文将使用这两个数据集来测试 Sqoop 导入和导出。

设置测试环境

群集、SQL 数据库和其他对象是在 Azure 门户中使用 Azure 资源管理器模板创建的。 可以在 Azure 快速启动模板中找到此模板。 该资源管理器模板调用 bacpac 包,以将表架构部署到 SQL 数据库。 如果想要私有容器用于 bacpac 文件,请使用模板中的以下值:

"storageKeyType": "Primary",
"storageKey": "<TheAzureStorageAccountKey>",

注意

使用模板或 Azure 门户进行的导入操作仅支持从 Azure Blob 存储导入 BACPAC 文件。

  1. 选择以下映像在 Azure 门户中打开资源管理器模板。

    Deploy to Azure button for new cluster

  2. 输入以下属性:

    字段
    订阅 从下拉列表中选择你的 Azure 订阅。
    资源组 从下拉列表中选择你的资源组,或新建一个资源组
    位置 从下拉列表中选择区域。
    群集名称 输入 Hadoop 群集的名称。 请仅使用小写字母。
    群集登录用户名 保留预先填充的值 admin
    群集登录密码 输入密码。
    SSH 用户名 保留预先填充的值 sshuser
    SSH 密码 输入密码。
    SQL 管理员登录名 保留预先填充的值 sqluser
    SQL 管理员密码 输入密码。
    _artifacts 位置 使用默认值(除非想要在其他位置使用自己的 bacpac 文件)。
    _artifacts 位置 SAS 令牌 留空。
    Bacpac 文件名 使用默认值(除非想要使用自己的 bacpac 文件)。
    位置 使用默认值。

    逻辑 SQL Server 的名称将为 <ClusterName>dbserver。 数据库名称将是 <ClusterName>db。 默认的存储帐户名将是 e6qhezrh2pdqu

  3. 选择“我同意上述条款和条件”。

  4. 选择“购买”。 此时会出现一个标题为“为模板部署提交部署”的新磁贴。 创建群集和 SQL 数据库大约需要 20 分钟时间。

运行 Sqoop 作业

HDInsight 可以使用各种方法运行 Sqoop 作业。 使用下表来确定哪种方法最适合用户,并访问此链接进行演练。

使用此方法 ,如果想要... ... 交互式 shell ...批处理 ...从此 客户端操作系统
SSH Linux、Unix、Mac OS X 或 Windows
.NET SDK for Hadoop   Windows(暂时)
Azure PowerShell   Windows

限制

  • 批量导出 - 在基于 Linux 的 HDInsight 上,用于将数据导出到 Microsoft SQL Server 或 SQL 数据库的 Sqoop 连接器目前不支持批量插入。
  • 批处理 - 在基于 Linux 的 HDInsight 上,如果在执行插入时使用 -batch 开关,Sqoop 将执行多次插入而不是批处理插入操作。

后续步骤

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