使用 Spark 的 “Hadoop Free” 构建

Spark 使用 Hadoop 客户端库来连接 HDFS 和 YARN。从 Spark 1.4 版本开始,该项目打包了 “Hadoop free” 构建,让您可以更轻松地将单个 Spark 二进制文件连接到任何 Hadoop 版本。 要使用这些构建,您需要修改 SPARK_DIST_CLASSPATH 以包含 Hadoop 的包 jar 文件。 最方便的方法是在 conf/spark-env.sh 中添加一个条目。

此页面描述了如何将 Spark 连接到不同类型的 Hadoop 发行版。

Apache Hadoop

对于 Apache 发行版,您可以使用 Hadoop 的 ‘classpath’ 命令。 例如

### in conf/spark-env.sh ###

# If 'hadoop' binary is on your PATH
export SPARK_DIST_CLASSPATH=$(hadoop classpath)

# With explicit path to 'hadoop' binary
export SPARK_DIST_CLASSPATH=$(/path/to/hadoop/bin/hadoop classpath)

# Passing a Hadoop configuration directory
export SPARK_DIST_CLASSPATH=$(hadoop --config /path/to/configs classpath)

用于 Kubernetes 上 Spark 的 Hadoop Free 构建设置

要在 Kubernetes 上运行 Spark 的 Hadoop free 构建,executor 镜像必须具有适当版本的 Hadoop 二进制文件,并设置正确的 SPARK_DIST_CLASSPATH 值。 请参阅下面的示例,了解 executor Dockerfile 中需要的相关更改

### Set environment variables in the executor dockerfile ###

ENV SPARK_HOME="/opt/spark"  
ENV HADOOP_HOME="/opt/hadoop"  
ENV PATH="$SPARK_HOME/bin:$HADOOP_HOME/bin:$PATH"  
...  

#Copy your target hadoop binaries to the executor hadoop home   

COPY /opt/hadoop3  $HADOOP_HOME  
...

#Copy and use the Spark provided entrypoint.sh. It sets your SPARK_DIST_CLASSPATH using the hadoop binary in $HADOOP_HOME and starts the executor. If you choose to customize the value of SPARK_DIST_CLASSPATH here, the value will be retained in entrypoint.sh

ENTRYPOINT [ "/opt/entrypoint.sh" ]
...