本文介绍如何通过开源大数据平台 EMR(E-MapReduce)控制台,快速创建一个EMR集群并使用Spark3读取表格存储的数据。
前提条件
已使用阿里云账号对EMR服务授权。具体操作,请参见角色授权。
已创建表格存储数据表。具体操作,请参见通过控制台创建数据表或通过SDK创建数据表。
已创建RAM用户,并授予RAM用户管理表格存储服务的权限(AliyunOTSFullAccess)。具体操作,请参见配置RAM用户权限。
重要由于配置时需要填写访问密钥AccessKey(AK)信息来执行授权,为避免阿里云账号泄露AccessKey带来的安全风险,建议您通过RAM用户来完成授权和AccessKey的创建。
已获取AccessKey(包括AccessKey ID和AccessKey Secret),用于进行签名认证。具体操作,请参见获取AccessKey。
步骤一:创建EMR集群
进入创建集群页面。
在顶部菜单栏处,根据实际情况选择地域和资源组。
地域:创建的集群会在对应的地域内,创建后无法修改。
资源组:默认显示账号全部资源。
单击创建集群。
在创建集群页面,完成集群相关配置。更多配置项信息,请参见EMR快速入门。
软件配置:
请参照选择以下配置项,其余配置项按实际情况选择即可。
业务场景:自定义集群。
可选服务:Spark3、Hive、YARN、Hadoop-Common、HDFS。
元数据:内置MySQL。
硬件配置:
打开Master节点组下的挂载公网开关,其余配置项使用默认值即可。
重要如果不开启挂载公网开关,则创建后只能通过内网访问。创建后如果您需要公网访问,请前往ECS挂载EIP。
完成基础配置后,选中服务协议,单击确认订单。
当集群状态显示为运行中时,表示集群创建成功。
步骤二:远程登录Master节点
进入节点管理页面。
在顶部菜单栏处,根据实际情况选择地域和资源组。
单击目标集群操作列的节点管理。
在节点管理页面,单击Master节点组名称前的图标。
展开节点列表后,单击目标节点的ECS ID,即可进入ECS控制台。
在ECS控制台,单击远程连接。
在远程连接对话框,单击通过会话管理远程连接区域中的免密登录,打开远程会话窗口。
步骤三:启动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
启动界面如下所示。
步骤四:创建Spark外表并读取数据
创建Spark外表。
参数:
参数
说明
endpoint
表格存储(Tablestore)实例访问地址,建议使用VPC地址。使用VPC时,请确保EMR集群和表格存储实例之间的网络可连通。更多信息,请参见服务地址。
access.key.id
阿里云账号或者RAM用户的AccessKey ID和AccessKey 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"}}}' );
查询外表数据。
SELECT * FROM test_table;