Ubuntu HDFS与Spark集成指南
Ubuntu环境下HDFS与Spark集成指南
1. 环境准备
在集成前需确保系统满足以下基础要求,避免兼容性问题:
- 操作系统:Ubuntu 20.04 LTS及以上(推荐);
- Java环境:JDK 8或11(Spark 3.x兼容,建议使用OpenJDK);
- Hadoop版本:3.2及以上(需与Spark版本匹配,如Spark 3.2.x兼容Hadoop 3.2+);
- Spark版本:3.2及以上(推荐最新稳定版);
- Scala版本:2.12(Spark 3.x默认支持,若使用Scala编写应用需匹配)。
通过以下命令快速安装Java:
sudo apt update
sudo apt install openjdk-11-jdk -y
java -version # 验证安装(需显示Java版本信息)
2. 安装HDFS(Hadoop分布式文件系统)
2.1 下载并解压Hadoop
从Apache官网下载Hadoop(如3.3.1版本),解压至指定目录:
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
tar -xzf hadoop-3.3.1.tar.gz
sudo mv hadoop-3.3.1 /usr/local/hadoop
2.2 配置Hadoop核心参数
编辑Hadoop配置目录(/usr/local/hadoop/etc/hadoop
)下的关键文件:
- core-site.xml:定义HDFS的默认文件系统地址;
< configuration> < property> < name> fs.defaultFS< /name> < value> hdfs://localhost:9000< /value> < /property> < /configuration>
- hdfs-site.xml:配置HDFS数据存储路径及副本数(单机环境设为1);
< configuration> < property> < name> dfs.replication< /name> < value> 1< /value> < /property> < property> < name> dfs.name.dir< /name> < value> file:///usr/local/hadoop/hdfs/namenode< /value> < /property> < property> < name> dfs.data.dir< /name> < value> file:///usr/local/hadoop/hdfs/datanode< /value> < /property> < /configuration>
2.3 启动HDFS服务
格式化NameNode(首次启动需执行,删除原有数据):
/usr/local/hadoop/bin/hdfs namenode -format
启动HDFS集群:
/usr/local/hadoop/sbin/start-dfs.sh
验证服务状态(应看到NameNode
、DataNode
进程):
jps
3. 安装Spark
3.1 下载并解压Spark
从Apache官网下载与Hadoop版本兼容的Spark(如3.2.0-bin-hadoop3.2.tgz),解压至指定目录:
wget https://dlcdn.apache.org/spark/spark-3.2.0/spark-3.2.0-bin-hadoop3.2.tgz
tar -xzf spark-3.2.0-bin-hadoop3.2.tgz
sudo mv spark-3.2.0-bin-hadoop3.2 /usr/local/spark
3.2 配置Spark环境变量
编辑~/.bashrc
文件,添加Spark和Hadoop的环境变量:
export SPARK_HOME=/usr/local/spark
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$SPARK_HOME/bin:$HADOOP_HOME/bin
使配置生效:
source ~/.bashrc
3.3 配置Spark与HDFS集成
编辑Spark配置文件(/usr/local/spark/conf/spark-defaults.conf
),添加HDFS相关参数:
spark.master local[*] # 本地模式,使用所有核心
spark.hadoop.fs.defaultFS hdfs://localhost:9000 # 指向HDFS的默认文件系统
spark.executor.memory 4g # Executor内存(根据机器配置调整)
3.4 启动Spark(可选)
若需启动Spark Standalone集群(非YARN模式),执行:
/usr/local/spark/sbin/start-master.sh
/usr/local/spark/sbin/start-worker.sh spark://localhost:7077
验证Spark状态(访问Web UI:http://localhost:8080
)。
4. 验证HDFS与Spark集成
4.1 向HDFS上传测试数据
将本地文件(如test.txt
)上传至HDFS:
echo -e "Hello\nSpark\nHDFS Integration Test" >
~/test.txt
/usr/local/hadoop/bin/hdfs dfs -put ~/test.txt /user/hadoop/
4.2 使用Spark Shell读取HDFS数据
启动Spark Shell:
spark-shell
在Shell中执行以下命令,读取HDFS文件并统计行数:
val hdfsFile = sc.textFile("hdfs://localhost:9000/user/hadoop/test.txt")
hdfsFile.count() // 应返回文件行数(如3)
hdfsFile.collect().foreach(println) // 打印文件内容
4.3 提交Spark作业到HDFS
编写Scala应用(如HDFSTest.scala
),读取HDFS文件并统计单词数:
import org.apache.spark.{
SparkConf, SparkContext}
object HDFSTest {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("HDFS Integration Test")
val sc = new SparkContext(conf)
val file = sc.textFile("hdfs://localhost:9000/user/hadoop/test.txt")
val wordCounts = file.flatMap(_.split(" ")).map(word =>
(word, 1)).reduceByKey(_ + _)
wordCounts.foreach(println)
sc.stop()
}
}
使用sbt打包应用(需提前安装sbt):
mkdir -p HDFSTest/src/main/scala
vim HDFSTest/src/main/scala/HDFSTest.scala # 粘贴上述代码
vim HDFSTest/simple.sbt # 内容:name := "HDFS Test";
version := "1.0";
scalaVersion := "2.12.15";
libraryDependencies += "org.apache.spark" %% "spark-core" % "3.2.0"
sbt package
提交作业到Spark集群:
/usr/local/spark/bin/spark-submit \
--class HDFSTest \
--master local[*] \
HDFSTest/target/scala-2.12/hdfstest_2.12-1.0.jar
5. 常见问题排查
- HDFS无法启动:检查
core-site.xml
中的fs.defaultFS
地址是否正确,端口是否被占用;确保hdfs namenode -format
已执行。 - Spark无法连接HDFS:确认
spark-defaults.conf
中的spark.hadoop.fs.defaultFS
与HDFS配置一致;检查Hadoop服务是否运行(jps
查看NameNode
、DataNode
)。 - 权限问题:若遇到HDFS权限拒绝,可通过
hdfs dfs -chmod -R 777 /user/hadoop
临时开放权限(生产环境需合理配置权限)。
通过以上步骤,即可在Ubuntu环境下完成HDFS与Spark的集成,并实现Spark对HDFS数据的读写与处理。集成后,Spark可充分利用HDFS的分布式存储能力,处理大规模数据集。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu HDFS与Spark集成指南
本文地址: https://pptw.com/jishu/731130.html