在 Debian 上集成 Hadoop 与 Spark 的实操指南
一 环境准备与版本选择
- 安装 Java JDK 8 或 11(两者均被 Hadoop/Spark 支持),建议选择 OpenJDK 11:sudo apt update && sudo apt install openjdk-11-jdk;验证:java -version。
- 为运行 Hadoop/Spark 的专用用户(如 hadoop)配置 SSH 免密登录:ssh-keygen -t rsa,cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys,chmod 600 ~/.ssh/authorized_keys,测试 ssh localhost。
- 版本匹配要点:选择与 Hadoop 版本匹配的 Spark 预编译包(如 spark-3.3.2-bin-hadoop3.tgz 对应 Hadoop 3.x),避免类库冲突与兼容性问题。
二 安装与配置 Hadoop
- 安装与目录:下载 Hadoop(如 3.3.6)并解压至 /opt/hadoop-3.3.6,建立软链:ln -s /opt/hadoop-3.3.6 /opt/hadoop。
- 环境变量:在 /etc/profile 或 $HADOOP_HOME/etc/hadoop/hadoop-env.sh 中设置 JAVA_HOME 与 HADOOP_HOME,例如:export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64;export HADOOP_HOME=/opt/hadoop;export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin。
- 核心配置($HADOOP_HOME/etc/hadoop):
- core-site.xml:设置默认文件系统与临时目录
fs.defaultFShdfs://localhost:9000
hadoop.tmp.dir/opt/hadoop/tmp
- hdfs-site.xml:单机或伪分布式建议 dfs.replication=1,并指定 NameNode/DataNode 目录
dfs.replication1
dfs.namenode.name.dir/opt/hadoop/hdfs/namenode
dfs.datanode.data.dir/opt/hadoop/hdfs/datanode
- mapred-site.xml:指定 YARN 作为 MapReduce 框架
mapreduce.framework.nameyarn
- yarn-site.xml:启用 Shuffle 服务并设定 ResourceManager 主机
yarn.nodemanager.aux-servicesmapreduce_shuffle
yarn.nodemanager.aux-services.mapreduce.shuffle.classorg.apache.hadoop.mapred.ShuffleHandler
yarn.resourcemanager.hostnamelocalhost
- 初始化与启动:首次启动前执行 hdfs namenode -format;随后启动 start-dfs.sh 与 start-yarn.sh。
- 健康检查:hdfs dfsadmin -report 查看 DataNode;yarn node -list 查看 NodeManager;访问 http://localhost:8088 查看 YARN Web UI。
三 安装与配置 Spark 以对接 Hadoop
- 安装与目录:下载 Spark 预编译包(如 spark-3.3.2-bin-hadoop3.tgz)解压至 /opt/spark-3.3.2,建立软链:ln -s /opt/spark-3.3.2 /opt/spark。
- 环境变量:在 /etc/profile 或 $SPARK_HOME/conf/spark-env.sh 中设置 SPARK_HOME 与 PATH,例如:export SPARK_HOME=/opt/spark;export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin。
- 对接 Hadoop 的关键配置:
- spark-env.sh:指向 Hadoop 配置目录并加入 Hadoop Classpath
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_DIST_CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath)
- spark-defaults.conf:使用 YARN 作为集群管理器,并指向 HDFS
spark.master yarn
spark.hadoop.fs.defaultFS hdfs://localhost:9000
spark.eventLog.enabled true
spark.eventLog.dir hdfs://localhost:9000/spark-logs
- 启动与验证:启动 start-master.sh 与 start-worker.sh spark://localhost:7077;访问 http://localhost:8080 查看 Spark Web UI。
四 提交作业与端到端验证
- 快速示例:运行内置示例计算 π
/opt/spark/bin/run-example SparkPi 10
或提交到 YARN:
/opt/spark/bin/spark-submit
–class org.apache.spark.examples.SparkPi
–master yarn
–deploy-mode client
/opt/spark/examples/jars/spark-examples_2.12-3.3.2.jar 10
- 读写 HDFS 的 WordCount:
- 准备输入:echo “hello spark hadoop” > /tmp/input.txt;hdfs dfs -mkdir -p /user/hadoop/input;hdfs dfs -put /tmp/input.txt /user/hadoop/input/input.txt
- 提交任务:
/opt/spark/bin/spark-submit
–class org.apache.spark.examples.JavaWordCount
–master yarn
–deploy-mode client
/opt/spark/examples/jars/spark-examples_2.12-3.3.2.jar
hdfs://localhost:9000/user/hadoop/input/input.txt
- 查看结果:hdfs dfs -cat /user/hadoop/output/part-*
- 常用检查:
- Hadoop:hdfs dfsadmin -report;yarn node -list;YARN UI http://localhost:8088
- Spark:Spark UI http://localhost:8080;日志位于 $HADOOP_HOME/logs 与 $SPARK_HOME/logs
五 常见问题与优化建议
- 版本兼容:务必使用与 Hadoop 3.x 匹配的 Spark 预编译包(如 spark-3.3.2-bin-hadoop3),避免 NoClassDefFoundError 或方法签名不兼容。
- 端口与防火墙:确保 HDFS 9000、YARN 8088、Spark UI 8080 等端口开放;云主机需配置安全组放行。
- 权限与目录:HDFS 上作业目录(如 /user/hadoop 与 /spark-logs)需存在且权限正确;必要时执行 hdfs dfs -mkdir -p 与 chmod/chown。
- SSH 与启动:伪分布式需保证 SSH 免密可用;首次 namenode -format 仅需一次,重复格式化会导致集群 ID 不一致。
- 资源配置:在 spark-defaults.conf 中合理设置 spark.executor.memory、spark.driver.memory 与队列(如 yarn.queue),避免与 YARN 资源超限冲突。
- 日志与排错:优先查看 $HADOOP_HOME/logs 与 $SPARK_HOME/logs;YARN 应用日志可通过 http://localhost:8088 进入对应应用详情页查看。