MaxCompute 推出Hive+HDFS类型的外部Schema,通过映射EMR或标准开源形态的Hadoop,支持实时获取元数据与数据的实时访问。database级别映射Hive实例,MaxCompute可以读取Hive的数据,但不能使用Hadoop的计算能力。
功能介绍
Hive是常见的开源大数据的数据仓库解决方案,元数据大多存储在HMS中,数据大多存储在HDFS上。MaxCompute支持创建此类型的外部数据源。通过MaxCompute与Hive的联邦,可以实现数据仓库访问、汇聚开源大数据系统数据的能力。
Hive+HDFS类型Schema暂不支持Kerberos认证,只支持免认证方式的实例,通过外部数据源连接的Hadoop实例。在MaxCompute中,则通过MaxCompute权限体系基于对象名称管理外部Schema内用户使用映射的数据对象。
适用范围
仅华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华南1(深圳)、中国香港、新加坡和德国(法兰克福)地域支持构建湖仓一体2.0能力。
Hive版本支持2.x,支持3.x兼容2.x的能力。
Hive+HDFS模式的SQL后付费联邦计算任务在公测期间暂不收费。
如果Hive+HDFS外部数据源是在E-MapReduce实例上,目前只支持自建RDS作为元数据,不支持DLF统一元数据和内置MySQL;且在读取数据前需要确认E-MapReduce实例的Hive组件是正常运行的。
操作步骤
步骤一:准备测试数据
如已有Hive数据,可忽略此步骤。
开通E-MapReduce服务。MaxCompute与Hadoop集群所在的VPC必须部署在同一地域。
准备Hive测试数据
登录E-MapReduce控制台,在左上角选择地域。
在我的集群主页面,单击创建集群。
软件配置
在顶部菜单栏处,根据实际情况选择资源组。资源组默认显示账号全部资源。其他配置参数如下:
参数名
说明
地域
创建的集群会在对应的地域内,一旦创建便无法修改。
MaxCompute与Hadoop集群所在的VPC必须部署在同一地域。
业务场景
本示例中选择自定义集群。
产品版本
根据需求选择,推荐使用最新版本。
服务高可用
默认不开启。打开服务高可用开关后,EMR会把Master节点分布在不同的底层硬件上以降低故障风险。
可选服务(至少一项)
本文实践选择
HADOOP-COMMON(3.2.1)、HDFS(3.2.1)、HIVE(3.1.3)以及YARN(3.2.1)。允许采集服务运行日志
默认开启采集。
如果您有采集需求,可以在集群信息中,修改服务运行日志采集状态。
元数据
本示例中使用自建 RDS。
云上创建RDS步骤参见创建RDS MySQL实例与配置数据库。
用于生产环境的集群,建议使用 独立 RDS MySQL,可以选择使用阿里云高可用版本的 RDS MySQL 5.7
填写RDS连接信息hivemetastore-site.xml:
javax.jdo.option.ConnectionURL
JDBC元数据连接,例如:
jdbc:mysql://rds.host.name/hive_db_namejavax.jdo.option.ConnectionUserName
元数据的数据库账号名。
javax.jdo.option.ConnectionPassword
元数据的数据库密码。
上述配置仅适用于本文实践,关于通过E-MapReduce控制台创建分析集群的详细操作请参见快速创建和使用数据湖分析集群。
硬件配置
参数名
说明
付费类型
包年包月
按量付费
在测试场景下,建议使用按量付费,测试正常后可以释放该集群,再新建一个包年包月的生产集群正式使用。
可用区
集群创建后,无法直接更改可用区,请谨慎选择。
专有网络
选择对应区域下的专有网络。如果没有,单击创建VPC前往新建。创建专有网络完成后,单击刷新,可以选择刚创建的VPC。
交换机
选择在对应专有网络下可用区的交换机,如果在这个可用区没有可用的交换机,则需要新创建一个。
默认安全组
重要不支持使用ECS上创建的企业安全组。
如果已有在使用的安全组,可以直接选择使用或新建安全组。
节点组
根据业务诉求,配置Master节点组、Core节点组或Task节点组信息。详情请参见选择硬件与网络。
本例中打开Master节点组下的挂载公网开关,其余使用默认值即可。
集群伸缩
配置弹性伸缩规则。
基础配置
参数名
说明
集群名称
集群的名字,长度限制为1~64个字符,仅可使用中文、字母、数字、短划线(-)和下划线(_)。
身份凭证
密钥对:如果希望在不输入密码的情况下进行身份验证,可以选择密钥对方式,更多详情请参见管理SSH密钥对。
密码:用于远程登录集群的Master节点。请记录该配置,登录集群时您需要输入该密码。
登录集群Master节点,进入Hive准备数据。
登录集群Master节点
登录E-MapReduce控制台,在左上角选择地域。
单击目标集群对应的节点管理。
在节点管理页签,单击节点组所在行的
图标,单击节点ID进入实例详情页。在节点ID的实例页面,单击远程连接。
在弹出的远程连接对话框,使用默认的通过Workbench远程连接,单击立即登录。
在登录实例窗口根据实际情况填写该实例信息。
说明在创建密钥对时,私钥会自动下载保存为.pem格式的私钥文件。认证方式可以选择SSH密钥认证,上传私钥文件,可以在不输入密码的情况下进行身份验证。
准备Hive测试数据。使用Workbench方式登录集群主节点后,在终端界面输入如下命令:
[user@emr-node ~]$ hive -- 创建库 hive> CREATE database IF NOT EXISTS myhive; -- 切换库 hive> USE myhive; -- 创建非分区表 hive> CREATE TABLE IF NOT EXISTS employees ( id INT, name STRING, age INT, department STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; -- 插入数据 hive> INSERT INTO employees VALUES(1, 'John', 25, 'Sales'), (2, 'Jane', 30, 'Marketing'), (3, 'Mike', 35, 'Engineering'), (4, 'Sarah', 28, 'HR'), (5, 'David', 32, 'Finance'), (6, 'Linda', 29, 'IT'), (7, 'Robert', 31, 'Operations'), (8, 'Emily', 27, 'Research'), (9, 'Michael', 33, 'Development'), (10, 'Chris', 26, 'Support'); -- 创建分区表 hive> CREATE TABLE employees_pt ( id INT, name STRING, age INT ) PARTITIONED BY (department STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; -- 插入数据 INSERT INTO employees_pt PARTITION (department='Sales') VALUES(1, 'John', 25),(2, 'Jane', 30),(3, 'Mike', 35); INSERT INTO employees_pt PARTITION (department='Marketing') VALUES(4, 'Sarah', 28),(5, 'David', 32); INSERT INTO employees_pt PARTITION (department='Engineering') VALUES(6, 'Linda', 29),(7, 'Robert', 31); INSERT INTO employees_pt PARTITION (department='HR') VALUES(8, 'Emily', 27),(9, 'Michael', 33),(10, 'Chris', 26);查询非分区表和分区表:
-- 查询非分区表 hive> SELECT * FROM employees; 1 John 25 Sales 2 Jane 30 Marketing 3 Mike 35 Engineering 4 Sarah 28 HR 5 David 32 Finance 6 Linda 29 IT 7 Robert 31 Operations 8 Emily 27 Research 9 Michael 33 Development 10 Chris 26 Support -- 查询分区表 hive> SELECT * FROM employees_pt; 6 Linda 29 Engineering 7 Robert 31 Engineering 8 Emily 27 HR 9 Michael 33 HR 10 Chris 26 HR 4 Sarah 28 Marketing 5 David 32 Marketing 1 John 25 Sales 2 Jane 30 Sales 3 Mike 35 Sales
步骤二:创建Hive+HDFS外部数据源
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏,选择 。
在外部数据源页面,单击创建外部数据源。
在弹出的新增外部数据源对话框,根据界面提示配置相关参数。参数说明如下:
参数
是否必填
说明
外部数据源类型
必填
选择Hive+HDFS。
外部数据源名称
必填
可自定义命名。命名规则如下:
以字母开头,且只能包含小写字母、下划线和数字。
不能超过128个字符。
例如
hive_hdfs。外部数据源描述
选填
根据需要填写。
网络连接对象
必填
网络连接名称,选择或创建MaxCompute到阿里云E-MapReduce或Hadoop VPC网络的连接。
重要VPC必须与MaxCompute外部数据源及外部数据源挂载的项目处于同一地域。
参数详情请参见网络开通流程中的创建MaxCompute与目标VPC网络间的网络连接步骤。
集群名称
在Hadoop集群高可用环境下用于指代NameNode的名称。
以EMR集群为例,集群名称的获取方法如下:
登录E-MapReduce控制台,在左上角选择地域。
单击目标集群ID,进入集群详情页面。
在集群服务页签,单击HDFS服务的配置,进入配置页面。
切换至hdfs-site.xml页签,在配置项名称栏搜索
dfs.nameservices,该配置项对应的值则为集群名称。
NameNode 地址
目标Hadoop集群的Active和Standby NameNode服务地址和端口号(端口号通常是8020)。
以EMR集群为例,NameNode地址的获取方法如下:
登录E-MapReduce控制台,在左上角选择地域。
单击目标集群ID,进入集群详情页面。
在集群服务页签,单击HDFS服务的状态,进入状态页面。
在组件列表区域,单击NameNode前面的
图标,展开拓扑列表。获取master-1-1节点对应的内网 IP,NameNode 地址格式即为
内网IP:8020。
HMS 服务地址
目标Hadoop集群的Active和Standby NameNode的Hive元数据服务地址和端口号(端口号通常是9083)。
登录E-MapReduce控制台,在左上角选择地域。
单击目标集群ID,进入集群详情页面。
在集群服务页签,单击Hive服务的状态,进入状态页面。
在组件列表区域,单击HiveRuntime前面的
图标,展开拓扑列表。获取master-1-1节点对应的内网 IP,HMS 服务地址格式即为
内网IP:9083。
Fs.Defaultfs
认证类型
暂时仅支持无认证方式。
创建交换机
MaxCompute通过VPC访问数据源,默认采用反向访问2.0技术方案,该方案需要配置特定可用区的交换机,打通元数据访问链路。
各个Region可用交换机的可用区在界面提示中有说明,在要访问的数据源所在的VPC中,选择已有或新建满足可用区要求的交换机。
外部数据源补充属性
选填
特殊声明的外部数据源补充属性。指定后,使用此外部数据源的任务可以按照参数定义的行为访问源系统。
说明支持的具体参数请关注后续官网文档更新说明,具体参数将随产品能力演进逐步放开。
单击确认,完成外部数据源的创建。
步骤三:创建外部Schema
外部Schema操作需要在MaxCompute内部项目中执行,因此要求该内部项目必须已启用支持Schema层级开关
在左侧导航栏,选择。
在项目管理页面,单击目标项目操作列的升级到支持Schema层级。
需要在执行Schema操作或查询External Schema的数据前,开启SQL语法支持的Schema开关,即在SQL前增加
SET odps.namespace.schema=true;语句。在MaxCompute客户端中,使用如下命令创建引用了Hive+HDFS类型外部数据源的外部Schema:
CREATE EXTERNAL SCHEMA IF NOT EXISTS <external_schema_name> WITH <hive_foreign_server_name> ON '<database_name>' ;参数说明如下:
external_schema_name:自定义外部Schema名称。本示例为test_schema_hive。hive_foreign_server_name:已创建的外部数据源名称。本示例为hive_hdfs。database_name:Hive数据库名称。本示例为myhive。
步骤四:使用SQL访问数据源系统
列出Hive的表名称
方式1:
SHOW tables IN <external_schema_name>; --external_schema_name为外部Schema名称。方式2:
USE SCHEMA <external_schema_name>; --external_schema_name为外部Schema名称。 SHOW tables;
使用示例
查询名称为test_schema的外部Schema下的所有表名。
USE SCHEMA test_schema; SHOW TABLES;返回结果示例:
ALIYUN$xxx@test.aliyunid.com:employees_pt ALIYUN$xxx@test.aliyunid.com:employees查询
test项目中test_schemaSchema的employees表数据。SELECT * FROM test.test_schema.employees;返回结果示例:
+------------+------------+------------+------------+ | id | name | age | department | +------------+------------+------------+------------+ | 1 | John | 25 | Sales | | 2 | Jane | 30 | Marketing | | 3 | Mike | 35 | Engineering | | 4 | Sarah | 28 | HR | | 5 | David | 32 | Finance | | 6 | Linda | 29 | IT | | 7 | Robert | 31 | Operations | | 8 | Emily | 27 | Research | | 9 | Michael | 33 | Development | | 10 | Chris | 26 | Support | +------------+------------+------------+------------+从数据源将联邦外表
employees的数据复制入数仓。MaxCompute不允许对来自外部Schema执行
CREATE TABLE AS操作,因此需要使用USE SCHEMA Default;将Schema切换为Default,再执行如下语句:-- 将联邦外表的数据复制到数仓中 CREATE TABLE employees_copy AS SELECT * FROM test.test_schema.employees; -- 查询数仓中已复制的表数据 SELECT * FROM employees_copy;返回结果示例:
+------------+------------+------------+------------+ | id | name | age | department | +------------+------------+------------+------------+ | 1 | John | 25 | Sales | | 2 | Jane | 30 | Marketing | | 3 | Mike | 35 | Engineering | | 4 | Sarah | 28 | HR | | 5 | David | 32 | Finance | | 6 | Linda | 29 | IT | | 7 | Robert | 31 | Operations | | 8 | Emily | 27 | Research | | 9 | Michael | 33 | Development | | 10 | Chris | 26 | Support | +------------+------------+------------+------------+