CentOS环境下HDFS与Spark集成步骤
yum update -y),并配置好静态IP、主机名解析(/etc/hosts)及网络连通性。yum install java-1.8.0-openjdk-devel)、Hadoop(HDFS+YARN,推荐3.x版本)、Spark(与Hadoop版本兼容,如Spark 3.5.5对应Hadoop 3.x)。hadoop-3.3.6.tar.gz),解压至指定目录(如/opt/hadoop):tar -xzvf hadoop-3.3.6.tar.gz -C /opt/
mv /opt/hadoop-3.3.6 /opt/hadoop
/etc/profile,添加以下内容并执行source /etc/profile:export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
$HADOOP_HOME/etc/hadoop/core-site.xml(设置HDFS默认文件系统)和hdfs-site.xml(配置NameNode/DataNode路径及副本数):<!-- core-site.xml -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://namenode:9000</value>
</property>
<!-- hdfs-site.xml -->
<property>
<name>dfs.replication</name>
<value>1</value> <!-- 单节点测试设为1,生产环境建议≥3 -->
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/hadoop/data/datanode</value>
</property>
hdfs namenode -format
start-dfs.sh
验证HDFS状态:hdfs dfsadmin -report(查看DataNode是否注册)。spark-3.5.5-bin-hadoop3.tgz),解压至指定目录(如/opt/spark):tar -xzvf spark-3.5.5-bin-hadoop3.tgz -C /opt/
mv /opt/spark-3.5.5-bin-hadoop3 /opt/spark
/etc/profile,添加以下内容并执行source /etc/profile:export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
$SPARK_HOME/conf/spark-env.sh(复制模板spark-env.sh.template),添加Hadoop相关配置:export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_DIST_CLASSPATH=$(hadoop classpath) # 让Spark加载Hadoop依赖
$SPARK_HOME/conf/spark-defaults.conf(复制模板spark-defaults.conf.template),添加HDFS相关配置:spark.hadoop.fs.defaultFS hdfs://namenode:9000 # 指向HDFS默认文件系统
spark.eventLog.enabled true # 开启事件日志
spark.eventLog.dir hdfs://namenode:9000/spark-logs # 日志存储路径
spark.history.fs.logDirectory hdfs://namenode:9000/spark-logs # 历史服务器日志路径
若需将Spark依赖分发到HDFS(避免每次任务分发),执行:hdfs dfs -mkdir -p /spark/jars
hdfs dfs -put $SPARK_HOME/jars/* /spark/jars/
spark.yarn.jars hdfs://namenode:9000/spark/jars/* # 在spark-defaults.conf中配置
start-master.sh
start-worker.sh spark://namenode:7077
验证Spark状态:http://namenode:8080(查看Master/Worker节点)。方式1:Spark Shell读取HDFS文件
启动Spark Shell(本地模式),尝试读取HDFS上的文件(如/user/root/test.txt):
spark-shell --master local[*]
在Shell中执行以下代码:
val data = spark.read.textFile("hdfs://namenode:9000/user/root/test.txt")
data.foreach(println)
spark.stop()
若能正常打印文件内容,则说明集成成功。
方式2:提交Spark作业到YARN
若Hadoop集群启用了YARN,可将Spark作业提交到YARN集群运行(需提前启动YARN:start-yarn.sh):
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--num-executors 2 \
--executor-memory 1g \
--driver-memory 512m \
$SPARK_HOME/examples/jars/spark-examples_2.12-3.5.5.jar 100
查看YARN Web UI(http://namenode:8088),确认作业状态为“SUCCEEDED”。
spark-env.sh中的HADOOP_CONF_DIR是否指向正确的Hadoop配置目录,或通过SPARK_DIST_CLASSPATH加载Hadoop依赖。hadoop)对HDFS目标路径有读写权限(hdfs dfs -chmod -R 777 /user/root,测试环境可使用)。core-site.xml中的fs.defaultFS端口从9000改为9001)。