Wsl + Vscode一站式搭建Hadoop + Spark环境

想要搭建Linux、Hadoop、Spark等环境,现在通常的做法是在VM、Virtualbox等软件上安装虚拟机
本文介绍在windows子系统(Windows Subsystem for Linux)上搭建相关环境并使用vscode进行Spark程序开发

Wsl环境准备

wsl安装文档详细请见<设置 WSL 开发环境 | Microsoft Learn>
PowerShell中键入ubuntu即可进入wsl环境
注意到windows文件资源管理器已经多了一只小企鹅
文件资源管理器

搭建Hadoop伪分布式环境

资源准备

  • 修改/opt目录权限:
    sudo chown -R yourname /opt # 以下的用户名xuxin替换为用户姓名.

  • 在/opt目录下新建两个文件夹modulesoftware
    /opt/software目录下准备jdk-1.8hadoop-3.2.3
    jdk:< Java Downloads | Oracle>
    hadoop:<Apache Hadoop>

  • 将下载好的文件直接复制粘贴进/opt/software目录下
    ![[Pasted image 20231112164154.png]]

  • 解压文件

tar -zxvf /opt/software/jdk-8u212-linux-x64.tar.gz -C /opt/module/
tar -zxvf /opt/software/hadoop-3.2.3.tar.gz -C /opt/module/

配置ssh服务

  • 安装ssh server
    sudo apt install openssh-server
  • 配置免密登录
cd ~/.ssh/    # 若没有该目录,先执行ssh localhost
ssh-keygen -t rsa    # 出现提示,全部回车即可
cat ./id_rsa.pub >> ./authorized_keys

配置Java环境

  • 修改.bashrc文件
    vim ~/.bashrc
    添加以下内容
export JAVA_HOME=/opt/module/jdk1.8.0_212
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
  • 使配置文件生效
    source ~/.bashrc

  • 出现以下内容表示java环境搭建完成
    java -version
    java

配置hadoop环境

  • 修改core-site.xml文件
cd /opt/module/hadoop-3.2.3
vim ./etc/hadoop/core-site.xml
  • 改为如下配置
<configuration>

<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/module/hadoop-3.2.3/tmp</value>
<description>Abase for other temporary directories.</description>
</property>

<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>

<property>
<name>hadooop.http.staticuser.user</name>
<value>xuxin</value>
</property>

</configuration>
  • 同样修改hdfs.xml文件
cd /opt/module/hadoop-3.2.3
vim ./etc/hadoop/hdfs-site.xml
  • 改为如下配置
<configuration>

<property>
<name>dfs.replication</name>
<value>1</value>
</property>

<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/module/hadoop-3.2.3/tmp/dfs/name</value>
</property>

<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/module/hadoop-3.2.3/tmp/dfs/data</value>
</property>

</configuration>
  • namenode初始化
cd /opt/module/hadoop-3.2.3
./bin/hdfs namenode -format
  • 出现类似日志信息表示初始化成功
    namenode

  • 启动hdfs

cd /opt/module/hadoop-3.2.3/
./sbin/start-dfs.sh
  • 浏览器访问localhost:9870可访问web页面
    Utilities -> Browse the file system 查看hdfs文件系统

  • 如果需要web端进行操作,可以在Hadoop目录下关闭安全模式
    ./bin/hadoop dfsadmin -safemode leave

运行wordcount示例代码

  • 创建 test.txt文件
cd /opt/module/hadoop-3.2.3/
mkdir input
vim test.txt
  • 测试文件内容
I learn C language
I like Java
I do not like Python
  • hdfs创建用户目录
    ./bin/hadoop fs -mkdir -p /user/xuxin

  • 由于指定了用户目录,因此在命令中就可以使用相对路径如 input,其对应的绝对路径就是 /user/xuxin/input
    ./bin/hadoop fs -put ./input input

  • 在web端可见已经上传成功

  • 运行实例wordcount代码
    ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.3.jar wordcount input output

  • 查看output输出
    ./bin/hadoop fs -cat output/*
    wordcount

OK,至此成功完成hadoop环境准备

Spark简单示例

资源准备

  • 下载spark-3.2.4版本
    <Downloads | Apache Spark>

  • 同样的方式将文件直接复制粘贴进/opt/software目录下

  • 解压

cd /opt/software
tar -zxvf ./spark-3.2.4-bin-hadoop3.2.tgz -C ../module

配置spark环境

  • 修改配置文件
mv spark-env.sh.template spark-env.sh
vim spark-env.sh

  • 添加一行
    export SPARK_DIST_CLASSPATH=$(/opt/module/hadoop-3.2.3/bin/hadoop classpath)

运行示例代码

cd /opt/module/spark-3.2.4-bin-hadoop3.2
./bin/run-example SparkPi
  • 运行结果

  • 观察到输出结果: Pi is roughly 3.1451557257786287

配置PySpark环境

Spark On Yarn

yarn准备

  • 修改mapred-site.xml配置文件
cd /opt/module/hadoop-3.2.3/etc/hadoop
vim mapred-site.xml

添加以下内容

<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
  • 修改 yarn-site.xml配置文件
    vim yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
  • 开启yarn
    ./sbin/start-yarn.sh
    查看当前进程
    jps

  • 可以简单编写脚本方便hadoop启动与关闭

    • 简单参考my_hadoop.sh
#!/bin/bash

if [ $# -lt 1 ]
then
        echo "No Args Input..."
        exit ;
fi

case $1 in
"start")
        echo "==================== 启动 hadoop集群 ===================="

        echo "------------- 启动 hdfs -------------"
         "/opt/module/hadoop-3.2.3/sbin/start-dfs.sh"
        echo "------------- 启动 yarn -------------"
         "/opt/module/hadoop-3.2.3/sbin/start-yarn.sh"
        echo "GO SEE http://localhost:9870/explorer.html#/ EXPLORE YOUR HDFS!"
;;
"stop")
        echo "==================== 关闭 hadoop集群 ===================="
        echo "------------- 关闭 yarn -------------"
        "/opt/module/hadoop-3.2.3/sbin/stop-yarn.sh"
        echo "------------- 关闭 hdfs -------------"
         "/opt/module/hadoop-3.2.3/sbin/stop-dfs.sh"
;;
*)
                echo "Input Args Error..."
;;
esac
my_hadoop.sh start # 开启hdfs & yarn
my_hadoop.sh stop  # 关闭yarn & hdfs

安装Miniconda3

cd /opt/software
bash ./Miniconda3-latest-Linux-x86_64.sh
  • 跟着指引安装即可, 安装目录可以选择 /opt/module/miniconda3

  • 安装完成
    在这里插入图片描述

  • 重启shell可以看见前边多了一个(base)

  • 创建conda虚拟环境
    conda create -n pyspark python=3.10

配置spark文件

  • 在spark-env.sh文件中添加:
HADOOP_CONF_DIR=/opt/module/hadoop-3.2.3
YARN_CONF_DIR=/opt/module/hadoop-3.2.3
  • 在.bashrc中添加配置:
export PYSPARK_PYTHON=/opt/module/miniconda3/envs/pyspark/bin/python
export PYSPARK_DRIVER_PYTHON=/opt/module/miniconda3/envs/pyspark/bin/python

Vscode配置远程连接

插件准备及python解释器选择

  • 安装Remote Development插件

  • 安装Python插件
    在这里插入图片描述

  • 左侧找到远程资源管理器选择Ubuntu并在当前窗口连接
    在这里插入图片描述

  • 在家目录创建pyspark-project文件夹

cd ~
mkdir pyspark-project
  • 在vscode中选择此文件夹打开
    ![[Pasted image 20231112194429.png]]

  • 安装python库pyspark
    ctrl + ` 打开终端进行安装

conda activate pyspark
pip install pyspark==3.2.0  # pyspark版本不能太高,否则有兼容性问题
  • python选择pyspark虚拟环境为解释器
    在这里插入图片描述

测试WordCount程序

  • 编写word_count.py程序
# coding:utf8

'''
word_count.py
单词计数
'''

from pyspark import SparkConf, SparkContext


if __name__ == '__main__':
    conf = SparkConf().setAppName("WordCount")
    sc = SparkContext(conf=conf)

    input_path = "input/test.txt"

    file_rdd = sc.textFile(input_path)

    words_rdd = file_rdd.flatMap(lambda line: line.split(" "))

    words_with_one_rdd = words_rdd.map(lambda x: (x, 1))

    result_rdd = words_with_one_rdd.reduceByKey(lambda a, b: a + b)

    result_rdd.coalesce(1).saveAsTextFile("output")
    
  • 执行代码
cd /opt/module/spark-3.2.4-bin-hadoop3.2
 ./bin/spark-submit --master yarn ~/pyspark-project/test/word_count.py
  • 运行结果
    ![[Pasted image 20231112200340.png]]

  • 输出文件:

    至此pyspark环境已经搭建完成
    可以在vscode上编写程序并且提交到yarn了

Logo

鸿蒙生态一站式服务平台。

更多推荐