You need to enable JavaScript to run this app.
E-MapReduce

E-MapReduce

复制全文
Spark
Serverless Spark 访问半托管或自建 Hadoop 集群
复制全文
Serverless Spark 访问半托管或自建 Hadoop 集群

本文档介绍如何配置火山引擎 EMR Serverless Spark 服务,使其能够无缝访问部署在客户自建IDC(或 EMR 半托管形态)中的 Hadoop 集群(HDFS)和 Hive Metastore (HMS)。此方案适用于需要利用 Serverless Spark 的弹性计算能力处理存储在本地或混合云环境数据的场景。

前置条件

在开始配置之前,请确保满足以下条件:

  • 网络连通:火山引擎VPC与客户自建IDC之间的网络已打通(例如,通过专线、VPN或云联网等方式)。

    注意

    跨网络访问HDFS的性能受限于火山VPC与IDC之间的网络延迟和带宽。对于性能敏感型作业,需评估网络条件。

  • 防火墙策略:客户自建IDC的网络防火墙(如果存在)已放通来自火山引擎VPC网段的访问流量,需确保HMS端口(如9083)和HDFS相关端口(如8020)开放。

配置步骤

步骤 1:设置 Hive Metastore (HMS) 信息

在EMR Serverless控制台或通过API创建应用时,配置HMS信息:
Image

  1. VPC选择:选择客户在火山引擎的、已与自建IDC网络打通的VPC。
  2. HMS地址:填写客户自建IDC中Hive Metastore的Thrift服务地址(通常格式为 thrift://ip:port)。

步骤 2:设置 HDFS 信息

需要从客户自建IDC的Hadoop集群中获取其HDFS的核心配置信息。这些配置定义了NameNode的地址、高可用(HA)设置等。
请将获取到的完整HDFS core-site.xmlhdfs-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>

步骤 3:设置 Spark 参数

将步骤2中获取的HDFS配置信息,通过Spark参数传递给EMR Serverless Spark作业。

  1. 传递HDFS配置

    • 对于步骤2配置中的每一个 <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
      
  2. 设置Hive Warehouse路径

    • 指定Hive表数据在自建HDFS上的存储路径。这个路径需要与自建Hive Metastore中配置的hive.metastore.warehouse.dir一致。
    • 参数示例
      spark.sql.warehouse.dir=hdfs://my-hdfs-cluster/path/to/your/hive/warehouse
      
  3. (可选)配置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指向的目录)读写权限的实际用户名。

  4. (可选)安全认证:如果自建Hadoop集群启用了Kerberos等强认证,需要进行额外的安全配置(如Keytab分发)。
    此场景的详细配置指南,请参阅最佳实践文档 Serverless Spark 访问 Kerberos 集群

最近更新时间:2026.02.12 16:09:47
这个页面对您有帮助吗?
有用
有用
无用
无用