阅读量:4
CentOS环境下HDFS与Spark集成实践指南
一、前置准备
在开始集成前,需确保CentOS系统满足以下基础条件:
- 已安装JDK 1.8或更高版本(建议使用OpenJDK 11),并配置
JAVA_HOME环境变量(通过echo $JAVA_HOME验证); - 所有节点(NameNode、DataNode、Master、Worker)已配置静态IP、主机名解析(
/etc/hosts文件添加映射)及NTP时间同步(避免时钟偏差导致集群异常)。
二、HDFS安装与配置
1. 下载并解压Hadoop
从Apache Hadoop官网下载稳定版本(如3.3.1),解压至指定目录(如/opt):
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
tar -xzvf hadoop-3.3.1.tar.gz -C /opt/
export HADOOP_HOME=/opt/hadoop-3.3.1
export PATH=$PATH:$HADOOP_HOME/bin
2. 配置Hadoop核心参数
- 编辑
core-site.xml(定义HDFS默认文件系统):<configuration> <property> <name>fs.defaultFSname> <value>hdfs://localhost:9000value> property> configuration> - 编辑
hdfs-site.xml(配置HDFS数据存储及副本数):<configuration> <property> <name>dfs.replicationname> <value>1value> property> <property> <name>dfs.namenode.name.dirname> <value>/opt/hadoop-3.3.1/data/namenodevalue> property> <property> <name>dfs.datanode.data.dirname> <value>/opt/hadoop-3.3.1/data/datanodevalue> property> configuration>
3. 格式化并启动HDFS
- 格式化NameNode(首次启动需执行,删除原有元数据):
hdfs namenode -format - 启动HDFS服务:
$HADOOP_HOME/sbin/start-dfs.sh - 验证HDFS状态:
访问http://localhost:9870(HDFS Web UI),确认NameNode、DataNode已启动,且存储路径正常。
三、Spark安装与配置
1. 下载并解压Spark
从Apache Spark官网下载与Hadoop版本兼容的Spark发行包(如3.4.0对应Hadoop 3.3),解压至指定目录(如/opt):
wget https://archive.apache.org/dist/spark/spark-3.4.0/spark-3.4.0-bin-hadoop3.3.tgz
tar -xzvf spark-3.4.0-bin-hadoop3.3.tgz -C /opt/
export SPARK_HOME=/opt/spark-3.4.0-bin-hadoop3.3
export PATH=$PATH:$SPARK_HOME/bin
2. 配置Spark与HDFS集成
- 编辑
spark-env.sh(指定Hadoop配置目录,使Spark能访问HDFS):echo "HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop" >> $SPARK_HOME/conf/spark-env.sh - (可选)配置Spark默认参数(优化HDFS交互):
编辑$SPARK_HOME/conf/spark-defaults.conf,添加以下内容:spark.executor.extraJavaOptions -Ddfs.replication=1 spark.driver.extraJavaOptions -Ddfs.replication=1 spark.hadoop.dfs.client.socket-timeout=300000
3. 启动Spark集群
- 启动Spark Master:
$SPARK_HOME/sbin/start-master.sh - 启动Spark Worker(连接Master):
$SPARK_HOME/sbin/start-worker.sh spark://localhost:7077 - 验证Spark状态:
访问http://localhost:8080(Spark Web UI),确认Master、Worker已注册,且资源状态正常。
四、集成验证
1. 使用Spark Shell读取HDFS文件
通过Spark Shell测试HDFS文件读写功能(以test.txt为例):
# 启动Spark Shell(本地模式,使用所有核心)
spark-shell --master local[*]
# 读取HDFS上的文本文件
val textRDD = sc.textFile("hdfs://localhost:9000/user/root/test.txt")
textRDD.take(5).foreach(println) // 打印前5行
# 写入数据到HDFS(CSV格式)
val data = Seq(("key1", "value1"), ("key2", "value2"))
val df = spark.createDataFrame(data).toDF("key", "value")
df.write.mode("overwrite").csv("hdfs://localhost:9000/test_output.csv")
# 退出Shell
:q
2. 运行Spark示例程序
使用Spark自带的WordCount示例,处理HDFS上的文件:
# 执行WordCount(指定HDFS输入/输出路径)
/opt/spark-3.4.0-bin-hadoop3.3/bin/run-example SparkPi 10
/opt/spark-3.4.0-bin-hadoop3.3/bin/spark-submit \
--class org.apache.spark.examples.WordCount \
--master local[*] \
$SPARK_HOME/examples/jars/spark-examples_2.12-3.4.0.jar \
hdfs://localhost:9000/user/root/test.txt \
hdfs://localhost:9000/wordcount_output
3. 验证结果
- 访问
http://localhost:9870,查看HDFS上的test_output.csv、wordcount_output目录是否存在,且数据正确; - 查看Spark Web UI的“Completed Applications”,确认作业执行成功(状态为“FINISHED”)。
五、常见问题排查
- HDFS连接失败:检查
core-site.xml中的fs.defaultFS地址是否正确,NameNode是否启动(jps命令查看NameNode进程); - Spark无法访问HDFS:确认
spark-env.sh中HADOOP_CONF_DIR指向正确的Hadoop配置目录,且hadoop classpath能获取Hadoop依赖; - 权限问题:确保HDFS存储路径(如
/opt/hadoop-3.3.1/data)有正确的读写权限(chown -R hadoop:hadoop /opt/hadoop-3.3.1,hadoop为用户组)。
通过以上步骤,即可在CentOS环境下完成HDFS与Spark的集成,利用Spark的内存计算能力高效处理HDFS上的大规模数据。
以上就是关于“CentOS HDFS与Spark集成实践”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm