通过网络连接功能,您可以访问自有VPC(Virtual Private Cloud)内的数据源。本文将以SparkSQL和Application JAR类型任务连接至您的自有VPC的HMS(Hive Metastore)服务为例,为您介绍如何配置并访问自有VPC内的数据源。
前提条件
已准备好数据源。本文以在EMR on ECS页面创建包含Hive服务,元数据为内置MySQL的DataLake集群为例,详情请参见创建集群。
使用限制
当前仅支持创建一个网络连接。
当前仅支持使用下列可用区的交换机。
地域名称
地域ID
可用区名称
德国(法兰克福)
eu-central-1
法兰克福 可用区A
法兰克福 可用区B
印度尼西亚(雅加达)
ap-southeast-5
雅加达 可用区A
新加坡
ap-southeast-1
新加坡 可用区B
新加坡 可用区C
美国(弗吉尼亚)
us-east-1
弗吉尼亚 可用区A
弗吉尼亚 可用区B
步骤一:新增网络连接
进入网络连接页面。
在左侧导航栏,选择
。在Spark页面,单击目标工作空间名称。
在EMR Serverless Spark页面,单击左侧导航栏中的网络连接。
在网络连接页面,单击新增网络连接。
在新增网络连接对话框中,配置以下信息,单击确定。
参数
说明
连接名称
输入新增连接的名称。
专有网络
选择与EMR集群相同的专有网络。
如果当前没有可选择的专有网络,请单击创建专有网络,前往专有网络控制台创建,详情请参见创建和管理专有网络。
交换机
选择与EMR集群部署在同一专有网络下的相同交换机。
如果当前可用区没有交换机,请单击虚拟交换机,前往专有网络控制台创建,详情请参见创建和管理交换机。
重要仅支持选择特定可用区下的交换机,详情请参见使用限制。
当状态显示为已成功时,表示新增网络连接成功。
步骤二:为EMR集群添加安全组规则
获取已创建网络连接中指定交换机的网段。
您可以登录专有网络管理控制台,在交换机页面获取交换机的网段。
添加安全组规则。
在集群管理页面,单击目标集群的集群ID。
在基础信息页面,单击集群安全组后面的链接。
在安全组规则页面,单击手动添加,填写端口范围和授权对象,然后单击保存。
参数
说明
端口范围
填写9083端口。
授权对象
填写前一步骤中获取的指定交换机的网段。
重要为防止被外部的用户攻击导致安全问题,授权对象禁止填写为0.0.0.0/0。
(可选)步骤三:连接Hive服务并查询表数据
如果您已有创建并配置好的Hive表,则可以跳过该步骤。
使用SSH方式登录集群的Master节点,详情请参见登录集群。
执行以下命令,进入Hive命令行。
hive
执行以下命令,创建表。
CREATE TABLE my_table (id INT,name STRING);
执行以下命令,向表中插入数据。
INSERT INTO my_table VALUES (1, 'John'); INSERT INTO my_table VALUES (2, 'Jane');
执行以下命令,查询数据。
SELECT * FROM my_table;
(可选)步骤四:准备并上传资源文件
如果您后续使用JAR任务类型,则需提前准备好资源文件。如果使用本文的SparkSQL任务类型,则可以跳过该步骤。
在本地新建一个Maven工程。
使用
mvn package
命令打包,编译打包后生成sparkDataFrame-1.0-SNAPSHOT.jar文件。在EMR Serverless Spark页面的目标工作空间下,单击左侧的文件管理。
在文件管理页面,单击上传文件。
上传本地打包好的
sparkDataFrame-1.0-SNAPSHOT.jar
文件。
步骤五:新建并运行任务
JAR任务
在EMR Serverless Spark页面,单击左侧的数据开发。
单击新建。
输入名称,类型选择
,单击确定。在新建的任务开发中,配置以下信息,其余参数无需配置,然后单击运行。
参数
说明
主jar资源
选择前一步骤中上传的资源文件。例如,sparkDataFrame-1.0-SNAPSHOT.jar。
Main Class
提交Spark任务时所指定的主类。本文示例填写为com.example.DataFrameExample。
Spark配置
配置以下信息。
spark.hadoop.hive.metastore.uris thrift://*.*.*.*:9083 spark.hadoop.hive.imetastoreclient.factory.class org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClientFactory spark.emr.serverless.network.service.name <yourConnectionName>
其中,以下信息请您根据实际情况替换:
*.*.*.*
为HMS服务的内网IP地址。本示例为EMR集群Master节点的内网IP,您可以在EMR集群的节点管理页面中查看。<yourConnectionName>
为您在步骤一中新增的网络连接的名称。
运行任务后,在下方的运行记录区域,单击任务操作列的详情。
在任务历史的开发任务页面的日志探查页签,您可以查看相关的日志信息。
SparkSQL任务
创建并启动SQL会话,详情请参见管理SQL会话。
Spark配置参数需要配置以下信息。
spark.hadoop.hive.metastore.uris thrift://*.*.*.*:9083 spark.hadoop.hive.imetastoreclient.factory.class org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClientFactory spark.emr.serverless.network.service.name <yourConnectionName>
其中,以下信息请您根据实际情况替换:
*.*.*.*
为HSM服务的内网IP地址。本示例为EMR集群Master节点的内网IP,您可以在EMR集群的节点管理页面中查看。<yourConnectionName>
为您在步骤一中新增的网络连接的名称。
在EMR Serverless Spark页面,单击左侧的数据开发。
单击新建。
输入名称,类型选择
,单击确定。在新建的任务开发中,选择Catalog、数据库和已启动的SQL会话实例,输入以下命令,并单击运行。
SELECT * FROM default.my_table;
说明当您计划将基于外部Metastore的SQL代码部署到工作流时,请确保您的SQL语句以
db.table_name
的形式指定表名,并且务必在界面右上方“Catalog”选项中选取一个默认库,其格式应为catalog_id.default
。下方的运行结果区域会向您展示返回信息。