本文档介绍如何配置火山引擎 EMR Serverless Spark 服务,使其能够无缝访问部署在客户自建IDC(或 EMR 半托管形态)中的 Hadoop 集群(HDFS)和 Hive Metastore (HMS)。此方案适用于需要利用 Serverless Spark 的弹性计算能力处理存储在本地或混合云环境数据的场景。
在开始配置之前,请确保满足以下条件:
注意
跨网络访问HDFS的性能受限于火山VPC与IDC之间的网络延迟和带宽。对于性能敏感型作业,需评估网络条件。
在EMR Serverless控制台或通过API创建应用时,配置HMS信息:
thrift://ip:port)。需要从客户自建IDC的Hadoop集群中获取其HDFS的核心配置信息。这些配置定义了NameNode的地址、高可用(HA)设置等。
请将获取到的完整HDFS core-site.xml和 hdfs-site.xml中的关键配置项整合,并确保包含HA相关的配置。以下是一个示例配置片段(请根据实际环境替换所有值):
<!-- 示例:HDFS HA 配置片段 - 请替换为实际环境配置 --> <configuration> <!-- 定义命名服务名称 --> <property> <name>dfs.nameservices</name> <value>my-hdfs-cluster</value> <!-- 替换为实际集群的nameservice ID --> </property> <!-- 定义该命名服务下的NameNode列表 --> <property> <name>dfs.ha.namenodes.my-hdfs-cluster</name> <value>nn1,nn2</value> <!-- 替换为实际的NameNode逻辑标识符 --> </property> <!-- 配置nn1的RPC地址 --> <property> <name>dfs.namenode.rpc-address.my-hdfs-cluster.nn1</name> <value>idc-namenode-host1:8020</value> <!-- 替换为nn1的实际主机名/IP和端口 --> </property> <!-- 配置nn2的RPC地址 --> <property> <name>dfs.namenode.rpc-address.my-hdfs-cluster.nn2</name> <value>idc-namenode-host2:8020</value> <!-- 替换为nn2的实际主机名/IP和端口 --> </property> <!-- 配置故障转移代理提供者 --> <property> <name>dfs.client.failover.proxy.provider.my-hdfs-cluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 根据实际需要添加其他必要配置,如安全认证、ViewFs配置等 --> </configuration>
将步骤2中获取的HDFS配置信息,通过Spark参数传递给EMR Serverless Spark作业。
传递HDFS配置:
<property>,将其<name>添加 spark.hadoop.前缀,并将其<value>作为参数值。spark.hadoop.dfs.nameservices=my-hdfs-cluster spark.hadoop.dfs.ha.namenodes.my-hdfs-cluster=nn1,nn2 spark.hadoop.dfs.namenode.rpc-address.my-hdfs-cluster.nn1=idc-namenode-host1:8020 spark.hadoop.dfs.namenode.rpc-address.my-hdfs-cluster.nn2=idc-namenode-host2:8020 spark.hadoop.dfs.client.failover.proxy.provider.my-hdfs-cluster=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
设置Hive Warehouse路径:
hive.metastore.warehouse.dir一致。spark.sql.warehouse.dir=hdfs://my-hdfs-cluster/path/to/your/hive/warehouse
(可选)配置HDFS访问用户身份:
EMR Serverless Spark访问HDFS时,默认使用root用户身份。
如果自建IDC的HDFS启用了权限控制(如Ranger、Sentry),且root用户没有所需的读写权限,必须通过以下参数指定一个拥有适当权限的用户:
spark.kubernetes.driverEnv.SPARK_USER=your_hdfs_user spark.executorEnv.SPARK_USER=your_hdfs_user spark.kubernetes.driverEnv.HADOOP_USER_NAME=your_hdfs_user spark.executorEnv.HADOOP_USER_NAME=your_hdfs_user
将 your_hdfs_user替换为在自建HDFS上拥有目标目录(如 spark.sql.warehouse.dir指向的目录)读写权限的实际用户名。
(可选)安全认证:如果自建Hadoop集群启用了Kerberos等强认证,需要进行额外的安全配置(如Keytab分发)。
此场景的详细配置指南,请参阅最佳实践文档 Serverless Spark 访问 Kerberos 集群。