使用 Curl 在 HDInsight 中的 Hadoop 上运行 Sqoop 作业

学习如何使用 Curl 在 HDInsight 中的 Hadoop 群集上运行 Sqoop 作业。

本文档使用 Curl 演示如何使用原始 HTTP 请求来与 HDInsight 交互,以便运行、监视和检索 Sqoop 作业的结果。 若要执行这些操作,需要使用 HDInsight 群集提供的 WebHCat REST API(前称 Templeton)。

先决条件

要完成本文中的步骤,需要:

使用 Curl 提交 Sqoop 作业

Note

使用 Curl 或者与 WebHCat 进行任何其他形式的 REST 通信时,必须提供 HDInsight 群集管理员用户名和密码对请求进行身份验证。 此外,还必须使用群集名称作为用来向服务器发送请求的统一资源标识符 (URI) 的一部分。

对本部分中的所有命令,请将 USERNAME替换为在群集上进行身份验证的用户,并将 PASSWORD 替换为用户帐户的密码。 将 CLUSTERNAME 替换为群集名称。

REST API 通过 基本身份验证进行保护。 始终应该使用安全 HTTP (HTTPS) 来发出请求,以确保安全地将凭据发送到服务器。

  1. 在命令行中,使用以下命令验证你是否可以连接到 HDInsight 群集。

    curl -u USERNAME:PASSWORD -G https://CLUSTERNAME.azurehdinsight.cn/templeton/v1/status
    

    应会收到类似于下面的响应:

    {"status":"ok","version":"v1"}
    

    此命令中使用的参数如下:

    • -u - 用来对请求进行身份验证的用户名和密码。
    • -G - 指出这是 GET 请求。

      所有请求的 URL 开头都是 https://CLUSTERNAME.azurehdinsight.cn/templeton/v1。 路径 /status 指示请求会返回服务器的 WebHCat(也称为 Templeton)状态。

  2. 使用以下命令 sqoop 作业:

    curl -u USERNAME:PASSWORD -d user.name=USERNAME -d command="export --connect jdbc:sqlserver://SQLDATABASESERVERNAME.database.chinacloudapi.cn;user=USERNAME@SQLDATABASESERVERNAME;password=PASSWORD;database=SQLDATABASENAME --table log4jlogs --export-dir /example/data/sample.log --input-fields-terminated-by \0x20 -m 1" -d statusdir="wasb:///example/data/sqoop/curl" https://CLUSTERNAME.azurehdinsight.cn/templeton/v1/sqoop
    

    此命令中使用的参数如下:

    • -d - 由于未使用 -G,请求将按默认使用 POST 方法。 -d 指定与请求一起发送的数据值。

      • user.name - 正在运行命令的用户。

      • command - 要执行的 Sqoop 命令。

      • statusdir - 此作业的状态要写入到的目录。

      此命令应会返回可用于检查作业状态的作业 ID。

      {"id":"job_1415651640909_0026"}
      
  3. 若要检查作业的状态,请使用以下命令。 将“JOBID”替换为上一步骤返回的值。 例如,如果返回值为 {"id":"job_1415651640909_0026"},则 JOBID 将是 job_1415651640909_0026

        curl -G -u USERNAME:PASSWORD -d user.name=USERNAME https://CLUSTERNAME.azurehdinsight.cn/templeton/v1/jobs/JOBID | jq .status.state
    

    如果作业已完成,状态将是 SUCCEEDED

    Note

    此 Curl 请求返回具有作业相关信息的 JavaScript 对象表示法 (JSON) 文档;使用 jq 可以仅检索状态值。

  4. 在作业的状态更改为“SUCCEEDED”后,可以从 Azure Blob 存储中检索作业的结果。 随查询一起传递的 statusdir 参数包含输出文件的位置;在本例中,位置为 wasb:///example/data/sqoop/curl。 此地址会将作业的输出存储在 HDInsight 群集所用的默认存储容器的 example/data/sqoop/curl 目录中。

    可使用 Azure 门户访问 stderr 和 stdout blob。 还可使用 Microsoft SQL Server Management Studio 检查上传到 log4jlogs 表的数据。

限制

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

摘要

如本文档中所示,可以使用原始 HTTP 请求来运行、监视和查看 HDInsight 群集上的 Sqoop 作业的结果。

有关本文中使用的 REST 接口的详细信息,请参阅 Sqoop REST API 指南

后续步骤

有关将 Hive 与 HDInsight 配合使用的一般信息:

有关 HDInsight 上的 Hadoop 的其他使用方法的信息:

涉及 curl 的其他 HDInsight 文章: