数据读取

本文介绍如何通过开源大数据平台 EMR(E-MapReduce)控制台,快速创建一个EMR集群并使用Spark3读取表格存储的数据。

前提条件

  • 已使用阿里云账号对EMR服务授权。具体操作,请参见角色授权

  • 已创建表格存储数据表。具体操作,请参见通过控制台创建数据表通过SDK创建数据表

  • 已创建RAM用户,并授予RAM用户管理表格存储服务的权限(AliyunOTSFullAccess)。具体操作,请参见配置RAM用户权限

    重要

    由于配置时需要填写访问密钥AccessKey(AK)信息来执行授权,为避免阿里云账号泄露AccessKey带来的安全风险,建议您通过RAM用户来完成授权和AccessKey的创建。

  • 已获取AccessKey(包括AccessKey IDAccessKey Secret),用于进行签名认证。具体操作,请参见获取AccessKey

步骤一:创建EMR集群

  1. 进入创建集群页面。

    1. 登录EMR on ECS控制台

    2. 在顶部菜单栏处,根据实际情况选择地域和资源组。

      • 地域:创建的集群会在对应的地域内,创建后无法修改。

      • 资源组:默认显示账号全部资源。

    3. 单击创建集群

  2. 创建集群页面,完成集群相关配置。更多配置项信息,请参见EMR快速入门

    1. 软件配置:

      请参照选择以下配置项,其余配置项按实际情况选择即可。

      • 业务场景自定义集群

      • 可选服务Spark3、Hive、YARN、Hadoop-Common、HDFS。

      • 元数据内置MySQL

    2. 硬件配置:

      打开Master节点组下的挂载公网开关,其余配置项使用默认值即可。

      重要

      如果不开启挂载公网开关,则创建后只能通过内网访问。创建后如果您需要公网访问,请前往ECS挂载EIP

  3. 完成基础配置后,选中服务协议,单击确认订单

    当集群状态显示为运行中时,表示集群创建成功。

步骤二:远程登录Master节点

  1. 进入节点管理页面。

    1. 登录EMR on ECS控制台

    2. 在顶部菜单栏处,根据实际情况选择地域和资源组。

    3. 单击目标集群操作列的节点管理

  2. 节点管理页面,单击Master节点组名称前的image.png图标。

  3. 展开节点列表后,单击目标节点的ECS ID,即可进入ECS控制台。

  4. ECS控制台,单击远程连接

  5. 远程连接对话框,单击通过会话管理远程连接区域中的免密登录,打开远程会话窗口。

步骤三:启动Spark SQL CLI

在远程会话窗口中,执行如下命令启动Spark SQL CLI,用于Spark外表创建和后续SQL操作。

spark-sql --jars /opt/apps/SPARK-EXTENSION/spark-extension-current/spark3-emrsdk/*,/opt/apps/HADOOP-COMMON/hadoop-common-current/share/hadoop/common/lib/commons-net-3.6.jar

启动界面如下所示。

image.png

步骤四:创建Spark外表并读取数据

  1. 创建Spark外表。

    • 参数:

      参数

      说明

      endpoint

      表格存储(Tablestore)实例访问地址,建议使用VPC地址。使用VPC时,请确保EMR集群和表格存储实例之间的网络可连通。更多信息,请参见服务地址

      access.key.id

      阿里云账号或者RAM用户的AccessKey IDAccessKey Secret。获取方式请参见创建AccessKey

      access.key.secret

      instance.name

      表格存储实例名称。

      table.name

      表格存储的数据表名称。

      catalog

      表格存储数据表的Schema定义。

    • 示例:

      以数据表pet为例,表结构如下,其中name为主键。

      name

      owner

      species

      sex

      birth

      death

      DROP TABLE IF EXISTS test_table;
      CREATE TABLE test_table
      USING tablestore
      OPTIONS(endpoint = 'https://xxx.cn-hangzhou.vpc.tablestore.aliyuncs.com',
              access.key.id = 'xxx',
              access.key.secret = 'xxx',
              table.name = 'test_tablestore_name',
              instance.name = 'test_instance',
              catalog = '{"columns":{"name":{"col":"name","type":"string"},"owner":{"col":"owner","type":"string"},"species":{"col":"species","type":"string"},"sex":{"col":"sex","type":"string"},"birth":{"col":"birth","type":"string"},"death":{"col":"death","type":"string"}}}'
      );
  2. 查询外表数据。

    SELECT * FROM test_table;