Ubuntu环境下Hadoop与Spark集成步骤
在集成前需确保系统满足以下基础条件:
java -version验证安装;spark-3.2.0-bin-hadoop3.2.tgz),确保兼容性。wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz),解压至/usr/local目录并重命名为hadoop;~/.bashrc文件,添加以下内容:export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
执行source ~/.bashrc使变量生效;$HADOOP_HOME/etc/hadoop):
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value> <!-- 单机环境设为1 -->
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///usr/local/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///usr/local/hadoop/dfs/data</value>
</property>
wget https://archive.apache.org/dist/spark/spark-3.2.0/spark-3.2.0-bin-hadoop3.2.tgz),解压至/usr/local目录并重命名为spark;~/.bashrc文件,添加以下内容:export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin
export HADOOP_HOME=/usr/local/hadoop <!-- 指向Hadoop安装目录 -->
执行source ~/.bashrc使变量生效;$SPARK_HOME/conf/spark-env.sh(若不存在则复制模板cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh),添加:export SPARK_DIST_CLASSPATH=$(hadoop classpath) <!-- 让Spark加载Hadoop依赖 -->
创建$SPARK_HOME/conf/spark-defaults.conf文件(若不存在则复制模板),添加:spark.master local[*] <!-- 本地模式运行,*表示使用所有核心 -->
spark.hadoop.fs.defaultFS hdfs://localhost:9000 <!-- 指向HDFS地址 -->
hdfs namenode -format
start-dfs.sh启动NameNode和DataNode,通过jps命令验证进程(应看到NameNode、DataNode);start-yarn.sh启动ResourceManager和NodeManager,通过jps验证进程(应看到ResourceManager、NodeManager)。spark-shell即可启动本地Spark交互式Shell;spark-submit --master yarn --deploy-mode client --class org.apache.spark.examples.SparkPi $SPARK_HOME/examples/jars/spark-examples_2.12-3.2.0.jar 10
其中--master yarn指定资源管理器为YARN,--deploy-mode client表示客户端模式(方便查看日志)。hadoop fs -put ~/test.txt /user/root/input
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("Hadoop-Spark Integration Test") \
.config("spark.hadoop.fs.defaultFS", "hdfs://localhost:9000") \
.getOrCreate()
df = spark.read.text("hdfs://localhost:9000/user/root/input/test.txt")
df.show() <!-- 显示文件内容 -->
若能正常读取并显示HDFS中的文件内容,则说明集成成功。source ~/.bashrc重新加载环境变量,或重启终端;hadoop fs -chmod -R 777 /user/root);core-site.xml中的fs.defaultFS端口(如9001)或spark-env.sh中的SPARK_MASTER_PORT。