使用Spark的“无Hadoop”构建

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

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

阿帕奇 Hadoop

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

### 在 conf/spark-env.sh ###
# 如果 'hadoop' 二进制文件在你的 PATH 中
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
# 使用 'hadoop' 二进制文件的显式路径
export SPARK_DIST_CLASSPATH=$(/path/to/hadoop/bin/hadoop classpath)
# 传递一个 Hadoop 配置目录
export SPARK_DIST_CLASSPATH=$(hadoop --config /path/to/configs classpath)

Kubernetes上Spark的Hadoop自由构建设置

要在Kubernetes上运行Hadoop的Spark免费构建,执行器镜像必须包含适当版本的Hadoop二进制文件,并设置正确的 SPARK_DIST_CLASSPATH 值。请参阅下面的示例以获取执行器Dockerfile中所需的相关更改:

### 在执行器的 dockerfile 中设置环境变量 ###

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

# 将你的目标 Hadoop 二进制文件复制到执行器 Hadoop 主页

COPY /opt/hadoop3  $HADOOP_HOME  
...

# 复制并使用 Spark 提供的 entrypoint.sh。它使用 $HADOOP_HOME 中的 Hadoop 二进制文件设置你的 SPARK_DIST_CLASSPATH 并启动执行器。如果你选择在这里自定义 SPARK_DIST_CLASSPATH 的值,该值将保留在 entrypoint.sh 中

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