Sqoop以EMR集群的方式读写OSS-HDFS服务的数据

本文介绍Sqoop如何以EMR集群的方式读写OSS-HDFS服务的数据。

前提条件

  • 已创建EMR-3.42.0及以上版本或EMR-5.8.0及以上版本的集群,并在创建时选择了Sqoop。具体步骤,请参见创建集群

  • 已开通并授权访问OSS-HDFS服务。具体操作,请参见开通并授权访问OSS-HDFS服务

操作步骤

  1. 登录EMR集群。

    1. 登录EMR on ECS控制台

    2. 单击创建的EMR集群。

    3. 单击节点管理页签,然后单击节点组左侧的+

    4. 单击ECS ID。在ECS实例页面,单击实例ID右侧的远程连接

    如果您希望使用SSH方式(SSH密钥对或SSH密码)在WindowsLinux环境中登录集群,请参见登录集群

  2. OSS-HDFS数据导入MySQL。

    sudo sqoop import --connect  <dburi>/<dbname> --username <username> --password <password> --table <tablename> --target-dir <oss-dir>  --temporary-rootdir <oss-tmpdir> --check-column <col> --incremental <mode> --last-value <value> -as <format> -m <count>
    • 参数说明

      参数

      是否必选

      说明

      dburi

      必选

      数据库的访问链接,例如jdbc:mysql://192.168.xxx.xxx:3306/

      dbname

      必选

      数据库的名称。

      username

      必选

      数据库登录用户名。

      password

      必选

      数据库登录密码。

      tablename

      必选

      MySQL表的名称。

      oss-dir

      必选

      读取或写入OSS-HDFS服务指定路径下的数据,例如oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/dir/

      oss-tmpdir

      可选

      临时写入目录。指定modeappend模式时,需要指定该参数。

      采用append模式后,Sqoop会先将数据导入临时目录,然后将文件重命名为正常目标目录。如果目标目录已经存在于HDFS中,则Sqoop拒绝导入并覆盖该目录的内容。

      col

      可选

      增量导入场景的检查列。

      mode

      可选

      增量导入模式,支持appendlastmodified两种模式。

      • append模式:基于递增列的增量数据导入。

      • lastmodified模式:基于时间列的增量数据导入。

      value

      可选

      指定上次增量导入的检查列的最大值。

      format

      可选

      文件存储的格式。取值为avrodatafilesequencefiletextfile(默认值)、parquetfile

      count

      可选

      指定MapReduce的任务数。

    • 使用示例

      OSS-HDFS服务examplebucket中指定路径下的数据导入MySQL中的数据库表src_kv。

      sqoop import --connect jdbc:mysql://master-1-1/sqoop_test --username root --password password1  --table src_kv -m 1 --target-dir oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/tmp/sqoop_kv --as-parquetfile