Spark编程基础python版第二版代码总结

第3章 大数据实验环境搭建

 这条命令创建了可以登陆的 hadoop 用户,并使用 /bin/bash 作为 Shell

-m: 为新用户创建主目录(main)

-s:指定新用户的默认 shell

sudo useradd -m hadoop -s /bin/bash

为hadoop用户设置密码 

sudo passwd hadoop

为hadoop用户增加管理员权限, sudo是一个非常重要的命令,用于允许授权的用户以超级用户(root)或其他用户的身份执行命令。它的全称是“superuser do”,即“超级用户执行”。

sudo adduser hadoop sudo

更新APT,APT(Advanced Package Tool):APT 是一种用于管理软件包的工具,它用于安装、更新、删除和管理软件包。 在 Linux 系统中,更新 APT 指的是更新软件包列表,以便获取最新的软件版本信息

sudo apt-get update

Ubuntu默认已安装了SSH客户端,因此,这里还需要安装SSH服务端,请在Linux的终端中执行以下命令: (需要将所有机器配置为“名称节点可以无密码登录它们)

sudo apt-get install openssh-server

使用命令登录本机 

ssh localhost

SSH无密码登录

 首先,请输入命令“exit”退出刚才的SSH,就回到了原先的终端窗口;然后,可以利用ssh-keygen生成密钥,并将密钥加入到授权中,命令如下:

cd ~/.ssh/        # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa    # 会有提示,都按回车即可
cat ./id_rsa.pub >> ./authorized_keys  # 加入授权

创建“/usr/lib/jvm”目录用来存放JDK文件: 

cd /usr/lib
sudo mkdir jvm #创建/usr/lib/jvm目录用来存放JDK文件

 对安装文件进行解压缩

-z 选项表示使用 gzip 压缩或解压文件

-x 是必须的,它告诉 tar 命令执行解压操作

-v 选项会输出正在解压的文件名,方便用户了解解压进度,显示详细信息

-f 后面必须跟上归档文件的路径或名称

cd ~ #进入hadoop用户的主目录
cd Downloads
sudo tar -zxvf ./jdk-8u371-linux-x64.tar.gz -C /usr/lib/jvm

使用vim编辑器打开hadoop用户的环境变量配置文件 

vim ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_371
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

保存.bashrc文件并退出vim编辑器。然后,继续执行命令让.bashrc文件的配置立即生效: 

source ~/.bashrc
java -version

在Linux系统中,文件和目录的访问权限是严格控制的。某些文件或目录可能只有特定的用户或组才能访问、修改或执行

请使用hadoop用户登录Linux系统,打开一个终端,执行如下命令:

chown 是“change owner”的缩写,用于更改文件或目录的所有者

-R:递归地更改指定目录及其所有子目录和文件的所有者

sudo tar -zxvf ~/Downloads/hadoop-3.3.5.tar.gz -C /usr/local    # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-3.3.5/ ./hadoop      # 将文件夹名改为hadoop
sudo chown -R hadoop:hadoop ./hadoop       # 修改文件权限

Hadoop解压后即可使用,可以输入如下命令来检查 Hadoop是否可用,成功则会显示 Hadoop版本信息: 

cd /usr/local/hadoop
./bin/hadoop version

Hadoop默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。Hadoop附带了丰富的例子,运行如下命令可以查看所有例子: 

cd /usr/local/hadoop
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar

./bin/hadoop:调用Hadoop命令行工具

jar :运行JAR文件中的Java程序

./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar :指定Hadoop
MapReduce示例程序的JAR文件路径
grep :运行grep功能,用于搜索符合正则表达式的行

./input :指定输入目录路径,包含要搜索的文本文件

./output :指定输出目录路径,用于存放搜索结果

'dfs[a-z.]+':指定要搜索的正则表达式,匹配以dfs开头的字符串

cd /usr/local/hadoop
mkdir input
cp ./etc/hadoop/*.xml ./input   # 将配置文件复制到input目录下
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/*          # 查看运行结果

       需要注意的是,Hadoop默认不会覆盖结果文件,因此,再次运行上面实例会提示出错。如果要再次运行,需要先使用如下命令把output文件夹删除:

rm:删除文件或目录

-r:递归删除目录及其所有子目录和文件

rm -r ./output

修改以后,core-site.xml文件的内容如下:

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

<configuration>
作用:这是配置文件的根元素,表示配置文件的开始

解释:所有配置项都包含在这个<configuration>标签内

<property>
作用:表示一个配置属性

解释:每个<property>标签包含一个配置项,通常包含<name>和<value>两个子标

hadoop.tmp.dir :

值:file:/usr/local/hadoop/tmp
描述:Hadoop的临时文件存储路径,用于存储运行时生成的临时文件,如日志文件、临时数据等
作用:为Hadoop提供一个基础路径,用于存储各种临时文件
fs.defaultFS :

值:hdfs://localhost:9000
描述:默认的文件系统URI
作用:指定Hadoop默认使用的文件系统。在这个配置中,Hadoop默认使用运行在本地机器上的HDFS,端口号为9000

需要修改配置文件hdfs-site.xml,修改后的内容如下:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/data</value>
    </property>
</configuration>

·dfs.replication :设置HDFS文件的副本数量为1

dfs.namenode.name.dir:设置NameNode的元数据存储路径为/usr/local/hadoop/tmp/dfs/name
dfs.datanode.data.dir :设置DataNode的数据存储路径为/usr/local/hadoop/tmp/dfs/data 

修改配置文件以后,要执行名称节点的格式化,命令如下:

 1.初始化文件系统元数据 2.清除旧数据,确保文件系统的干净状态

cd /usr/local/hadoop
./bin/hdfs namenode -format

./bin/hdfs :调用Hadoop的命令行工具

namenode :指定操作的目标是NameNode

-format :格式化NameNode的文件系统元数据,初始化一个新的空的HDFS文件系统

执行下面命令启动Hadoop: 

cd /usr/local/hadoop
./sbin/start-dfs.sh  #start-dfs.sh是个完整的可执行文件,中间没有空格

Hadoop启动完成后,可以通过命令 jps 来判断是否成功启动,命令如下: 

jps

要使用HDFS,首先需要在HDFS中创建用户目录(本书全部统一采用hadoop用户名登录Linux系统),命令如下:

 其中-p 选项允许递归创建多级目录

cd /usr/local/hadoop
./bin/hdfs dfs -mkdir -p /user/hadoop

接着需要把本地文件系统的“/usr/local/hadoop/etc/hadoop”目录中的所有xml文件作为输入文件,复制到分布式文件系统HDFS中的“/user/hadoop/input”目录中,命令如下:

dfs: 指定使用 HDFS 的文件系统操作

cd /usr/local/hadoop
./bin/hdfs dfs -mkdir input  #在HDFS中创建hadoop用户对应的input目录
./bin/hdfs dfs -put ./etc/hadoop/*.xml input  #把本地文件复制到HDFS中
./bin/hdfs dfs -ls input

现在就可以运行Hadoop自带的grep程序,命令如下: 

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar grep input output 'dfs[a-z.]+'

运行结束后,可以通过如下命令查看HDFS中的output文件夹中的内容: 

./bin/hdfs dfs -cat output/*
./bin/hdfs dfs -rm -r output    # 删除 output 文件夹

如果要关闭Hadoop,可以执行下面命令: 

cd /usr/local/hadoop
./sbin/stop-dfs.sh

首先使用vim编辑器打开“~/.bashrc”这个文件,然后,在这个文件的最前面位置加入如下单独一行: 

export PATH=$PATH:/usr/local/hadoop/sbin

在后面的学习过程中,如果要继续把其他命令的路径也加入到PATH变量中,也需要继续修改“~/.bashrc”这个文件。当后面要继续加入新的路径时,只要用英文冒号“:”隔开,把新的路径加到后面即可,比如,如果要继续把“/usr/local/hadoop/bin”路径增加到PATH中,只要继续追加到后面,如下所示: 

export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin

添加后,执行命令“source ~/.bashrc”使设置生效。设置生效后,在任何目录下启动Hadoop,都只要直接输入start-dfs.sh命令即可,同理,停止Hadoop,也只需要在任何目录下输入stop-dfs.sh命令即可 

在Ubuntu中,在hadoop01节点上执行如下命令修改主机名: 

sudo vim /etc/hostname

使用ifconfig命令获取每台虚拟机的IP地址,具体命令如下: 

ifconfig

需要注意的是,每台机器的IP地址建议设置为固定IP地址,不要使用动态分配IP地址,否则,每次重启系统以后有可能IP地址会动态变化,导致后面搭建的集群无法连接。下面介绍把机器的IP地址设置为固定IP地址的方法。    

在Ubuntu系统中新建一个终端,执行如下命令查询网关地址: 

netstat -nr

在hadoop01中,执行如下命令打开并修改“/etc/hosts”文件: 

sudo vim /etc/hosts

可以在hosts文件中增加如下三条IP和主机名映射关系: 

192.168.91.128   hadoop01
192.168.91.129   hadoop02
192.168.91.130   hadoop03

需要在各个节点上都执行如下命令,测试是否相互ping得通,如果ping不通,后面就无法顺利配置成功。请在每个节点上都执行下面三条命令:

ping hadoop01 -c 3   # 只ping 3次就会停止,否则要按Ctrl+c中断ping命令
ping hadoop02 -c 3
ping hadoop03 -c 3

SSH无密码登录节点

必须要让hadoop01节点可以SSH无密码登录到各个节点上(包括hadoop01可以SSH无密码登录自己)

首先需要再次确认三个节点上已经安装了SSH服务端,如果之前没有安装,需要执行如下命令安装SSH服务端(如果此前已经安装就不用重复安装): 

sudo apt-get install openssh-server

生成hadoop01节点的公匙,如果之前已经生成过公钥,必须要删除原来生成的公钥,重新生成一次。在hadoop01节点执行如下命令: 

ssh-keygen :调用SSH密钥生成工具

-t rsa:指定生成的密钥类型为RSA

cd ~/.ssh              # 如果没有该目录,先执行一次ssh localhost
rm ./id_rsa*           # 删除之前生成的公匙(如果已经存在)
ssh-keygen -t rsa       # 执行该命令后,遇到提示信息,一直按回车就可以

为了让hadoop01节点能够无密码SSH登录本机,需要在hadoop01节点上执行如下命令: 

./id_rsa.pub :指定要读取的公钥文件路径

 >〉:将  cat  命令的输出追加到目标文件中

./authorized_keys :指定目标文件路径,存储授权的公钥

cat ./id_rsa.pub >> ./authorized_keys

接下来,在hadoop01节点将上公匙传输到hadoop02和hadoop03节点: 

scp ~/.ssh/id_rsa.pub hadoop@hadoop02:/home/hadoop/
scp ~/.ssh/id_rsa.pub hadoop@hadoop03:/home/hadoop/

上面的命令中,scp是secure copy的简写,用于在 Linux下进行远程拷贝文件,类似于cp命令,不过,cp只能在本机中拷贝。执行scp时会要求输入hadoop02和hadoop03节点上hadoop用户的密码,输入完成后会提示传输完毕,如图所示。传输完成以后,在hadoop02和hadoop03节点上的“/home/hadoop”目录下就可以看到文件id_rsa.pub了 

接着在节点hadoop02和hadoop03上分别执行如下命令将SSH公匙加入授权: 

mkdir ~/.ssh       # 如果不存在该文件夹需先创建,若已存在,则忽略本命令
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub    # 用完以后就可以删掉

这样,在hadoop01节点上就可以无密码SSH登录到各个节点了(包括hadoop01、hadoop02和hadoop03),可在hadoop01节点上执行如下命令进行检验: 

ssh hadoop02
ssh hadoop03

如果hadoop01节点上已经安装过Hadoop(比如之前安装过伪分布式的Hadoop),需要首先删除已经安装的Hadoop。在hadoop01节点上下载Hadoop安装文件,并执行如下命令: 

sudo tar -zxvf ~/Downloads/hadoop-3.3.5.tar.gz -C /usr/local    # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-3.3.5/ ./hadoop      # 将文件夹名改为hadoop
sudo chown -R hadoop:hadoop ./hadoop       # 修改文件权限

在前面的伪分布式安装内容中,已经介绍过PATH变量的配置方法。可以按照同样的方法进行配置,这样就可以在任意目录中直接使用hadoop、hdfs等命令了。如果还没有配置PATH变量,那么需要在hadoop01节点上进行配置。 首先执行命令“vim ~/.bashrc”,也就是使用vim编辑器打开“~/.bashrc”文件,然后,在该文件最上面的位置加入下面一行内容: 

export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

请把hadoop01节点中的core-site.xml文件修改为如下内容:

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://hadoop01:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
</configuration>

把hadoop01节点中的hdfs-site.xml设置为如下内容:

<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>hadoop03:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
</configuration>

把mapred-site.xml文件配置成如下内容:

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>hadoop01:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>hadoop01:19888</value>
        </property>
        <property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property> 
</configuration>

请把hadoop01节点中的yarn-site.xml文件配置成如下内容:

<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>hadoop01</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>
cd /usr/local/hadoop
sudo rm -r ./tmp     # 删除 Hadoop 临时文件
sudo rm -r ./logs/*   # 删除日志文件
cd /usr/local
tar -zcf ~/hadoop.master.tar.gz ./hadoop   # 先压缩再复制
cd ~
scp ./hadoop.master.tar.gz hadoop02:/home/hadoop
scp ./hadoop.master.tar.gz hadoop03:/home/hadoop
cd ~
sudo rm -r /usr/local/hadoop    # 删掉旧的(如果存在)
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop

命令用于生成Hadoop分布式文件系统(HDFS)的报告,显示集群的当前状态、节点信息、磁盘使用情况等 

cd /usr/local/hadoop
./bin/hdfs namenode -format
cd /usr/local/hadoop
./sbin/start-dfs.sh
./sbin/start-yarn.sh
./sbin/mr-jobhistory-daemon.sh start historyserver
cd /usr/local/hadoop
./bin/hdfs dfsadmin -report

首先创建HDFS上的用户目录,可以在hadoop01节点上执行如下命令: 

hdfs dfs -mkdir -p /user/hadoop #此前已经配置了PATH环境变量,所以不用路径全称

然后,在HDFS中创建一个input目录,并把“/usr/local/hadoop/etc/hadoop”目录中的配置文件作为输入文件复制到input目录中,命令如下: 

hdfs dfs -mkdir input
hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input

接着就可以运行 MapReduce 作业了,命令如下: 

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar grep input output 'dfs[a-z.]+'

最后,关闭Hadoop集群,需要在hadoop01节点执行如下命令: 

stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.sh stop historyserver
sudo apt-get update

执行如下命令安装MySQL: 

apt-get 是一个基于Linux 的软件包管理工具,用于管理软件包的安装、更新、卸载等操作

sudo apt-get install mysql-server

默认情况下,安装完成就会自动启动MySQL。可以手动关闭MySQL服务,然后再次启动MySQL服务,命令如下: 

service mysql stop
service mysql start

执行如下命令进入MySQL Shell界面: 

-u 是 --user 的简写,用于指定登录 MySQL 数据库的用户名; -p 是 --password 的简写,用于提示用户输入登录 MySQL 数据库的密码。

mysql -u root -p

      当向MySQL数据库导入数据时,可能会出现中文乱码问题,原因是character_set_server默认设置是latin1,不是中文编码。要查询MySQL数据库当前的字符编码格式,可以使用如下命令: 

可以单个设置修改编码方式,比如,使用如下命令:

    但是,通过这种方式设置字符编码格式,重启MySQL服务以后就会失效。因此,建议按照如下方式修改编码格式:

mysql> show variables like ‘char%’;
mysql> set character_set_server=utf8;

(1)修改配置文件     在Linux系统中新打开一个终端,使用vim编辑器编辑“/etc/mysql/mysql.conf.d/mysqld.cnf”文件,命令如下: 

vim /etc/mysql/mysql.conf.d/mysqld.cnf
character_set_server=utf8

在Linux终端的Shell命令提示符(不是“mysql>”命令提示符)下执行如下命令重启MySQL服务: 

service mysql restart

重启MySQL服务以后,再次使用如下命令查询MySQL数据库当前的字符编码格式: 

mysql> show variables like ‘char%’;

执行如下命令安装Kafka: 

cd ~/Downloads #假设安装文件放在这个目录下
sudo tar -zxvf kafka_2.12-3.5.1.tgz -C /usr/local
cd /usr/local
sudo mv kafka_2.12-3.5.1 kafka
sudo chown -R hadoop ./kafka

首先需要启动Kafka。请登录Linux系统(本书统一使用hadoop用户登录),打开一个终端,输入下面命令启动Zookeeper服务:

 注意,执行上面命令以后,终端窗口会返回一堆信息,然后就停住不动了,没有回到Shell命令提示符状态,这时,不要误以为死机了,而是Zookeeper服务器已经启动,正在处于服务状态。所以,不要关闭这个终端窗口,一旦关闭,Zookeeper服务就停止了。

cd  /usr/local/kafka
./bin/zookeeper-server-start.sh  config/zookeeper.properties
cd  /usr/local/kafka
./bin/kafka-server-start.sh  config/server.properties
cd  /usr/local/kafka
bin/kafka-server-start.sh  config/server.properties  &
cd  /usr/local/kafka
./bin/kafka-topics.sh  --create  --zookeeper  localhost:2181  \
> --replication-factor  1  --partitions  1  --topic  wordsendertest
#这个Topic叫wordsendertest,2181是Zookeeper默认的端口号,--partitions是Topic里面的分区数,--replication-factor是备份的数量,在Kafka集群中使用,由于这里是单机版,所以不用备份
#可以用list列出所有创建的Topic,来查看上面创建的Topic是否存在
./bin/kafka-topics.sh  --list  --zookeeper  localhost:2181
./bin/kafka-console-producer.sh  --broker-list  localhost:9092 \
>  --topic  wordsendertest
cd /usr/local/kafka
./bin/kafka-console-consumer.sh  --bootstrap-server  localhost:9092  \
> --topic  wordsendertest  --from-beginning

Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

 在Linux终端中执行如下命令安装Anaconda:

cd /home/hadoop/Downloads #假设安装文件在这个目录下
sh ./Anaconda3-2023.07-2-Linux-x86_64.sh

新建一个.condarc文件 

vim ~/.condarc
channels:
  - defaults
show_channel_urls: true
channel_alias: https://mirrors.tuna.tsinghua.edu.cn/anaconda
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

在Anaconda3目录下执行如下命令安装Python3.8 

conda create -n pyspark python=3.8

把Python环境切换到pyspark 

conda activate pyspark

执行如下命令退出Python环境: 

>>> exit()

 第4章 Spark环境搭建和使用方法

sudo  tar  -zxf  ~/Downloads/spark-3.4.0-bin-without-hadoop.tgz  -C  /usr/local/
cd  /usr/local
sudo  mv  ./spark-3.4.0-bin-without-hadoop  ./spark
sudo  chown  -R  hadoop:hadoop  ./spark  # hadoop是当前登录Linux系统的用户名
cd  /usr/local/spark
cp  ./conf/spark-env.sh.template  ./conf/spark-env.sh
export  SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)

需要特别强调的是,.bashrc文件中必须包含以下环境变量的设置

(1)SPARK_HOME:表示Spark安装路径在哪里

(2)PYSPARK_PYTHON:表示Spark去哪里寻找Python执行器

(3)JAVA_HOME:告知Spark Java安装在什么位置

(4)HADOOP_CONF_DIR:告知Spark Hadoop的配置文件在哪里

(5)HADOOP_HOME:告知Spark Hadoop安装在哪里。 此外,还可以为Spark配置PATH环境变量

vim ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_371
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export HADOOP_HOME=/usr/local/hadoop
export SPARK_HOME=/usr/local/spark
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PYSPARK_PYTHON=/home/hadoop/anaconda3/envs/pyspark/bin/python3.8
export PATH=$PATH:${JAVA_HOME}/bin:$HADOOP_HOME/bin:$SPARK_HOME/bin
source ~/.bashrc

还可以对Spark运行过程的日志信息进行设置,只显示错误级别的信息。执行如下命令: 

cd /usr/local/spark/conf
sudo mv log4j2.properties.template log4j.properties
vim log4j.properties 

打开log4j.properties以后,把rootLogger.level设置为如下形式(文件中的其他内容不要修改): 

rootLogger.level = error

通过运行Spark自带的实例SparkPi,可以验证Spark是否安装成功 

cd  /usr/local/spark
./bin/run-example  SparkPi

可以通过 grep 命令进行过滤,快速找到我们想要的执行结果 

./bin/run-example  SparkPi  2>&1  |  grep  "Pi is roughly"

 过滤后的运行结果中包含了π的近似值,具体如下

Pi is roughly 3.145695728478642

在Spark中采用Local模式启动pyspark的命令主要包含以下参数

--master:这个参数表示当前的pyspark要连接到哪个Master,如果是local[*],就是使用Local模式(本地模式)启动pyspark。其中,括号内的星号表示需要使用几个CPU核心(Core),也就是启动几个线程模拟Spark集群

--jars:这个参数用于把相关的JAR包添加到CLASSPATH中;如果有多个jar包,则可以使用逗号分隔符连接它们

 比如,要采用Local模式,在4个CPU核心上执行pyspark命令,命令如下:

cd  /usr/local/spark
./bin/pyspark  --master local[4]

或者,可以在CLASSPATH中添加code.jar,命令如下: 

cd  /usr/local/spark
./bin/pyspark  --master  local[4]  --jars  code.jar

可以执行“pyspark  --help”命令,获取完整的选项列表,具体如下: 

cd /usr/local/spark
./bin/pyspark --help

在Linux终端中执行pyspark命令,就可以启动进入Python版本的Spark交互式执行环境。在执行pyspark命令时,可以不带任何参数。如果设置了PYSPARK_PYTHON环境变量,就可以直接使用如下命令启动pyspark: 

cd /usr/local/spark
./bin/pyspark

可以执行“spark-submit  --help”命令,获取完整的选项列表,具体如下: 

cd /usr/local/spark
./bin/spark-submit --help

可以运行Spark安装好以后自带的样例程序SparkPi,它的功能是计算得到pi的值(3.1415926)。在Linux Shell中执行如下命令运行SparkPi: 

这是Bash的重定向操作符,用于将标准错误(stderr)的内容重定向到标准输出(stdout)
2 :代表标准错误(stderr)

>:表示重定向

1:代表标准输出(stdout)

2>&1 :表示将标准错误的内容合并到标准输出中。这样做的目的是确保所有输出(无论是正常输出还是错误信息)都能被后续的管道(I)处理

cd  /usr/local/spark
bin/spark-submit  \
> --master local[*]  \
> /usr/local/spark/examples/src/main/python/pi.py 10 2>&1  |  grep  "Pi is roughly"

        在所有节点上完成安装Anaconda3的所有步骤,包括安装Anaconda3、设置国内源、创建pyspark环境等。hadoop01节点此前已经安装Anaconda3,这里不用重复安装,只需要为hadoop02和hadoop03安装Anaconda3。

 在所有节点上执行如下命令把Python环境设置为pyspark:

conda activate pyspark

然后执行如下命令测试Python环境是否设置成功: 

python

最后,执行如下命令退出Python环境: 

vim  ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_371
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export HADOOP_HOME=/usr/local/hadoop
export SPARK_HOME=/usr/local/spark
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PYSPARK_PYTHON=/home/hadoop/anaconda3/envs/pyspark/bin/python3.8

配置workers文件 在hadoop01节点上执行如下命令将 workers.template改名为workers: 

cd  /usr/local/spark/
sudo mv  ./conf/workers.template  ./conf/workers

在workers文件中设置Spark集群的Worker节点。编辑workers文件的内容,把默认内容localhost替换成如下内容: 

hadoop01
hadoop02
hadoop03

配置spark-env.sh文件 

在hadoop01节点上编辑spark-env.sh文件的内容,添加如下内容:

#PART1
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_371
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export YARN_CONF_DIR==/usr/local/hadoop/etc/hadoop

#PART2
export SPARK_MASTER_HOST=hadoop01
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_WEBUI_PORT=8081
export  SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
export SPARK_HISTORY_OPTS="  
-Dspark.history.fs.logDirectory=hdfs://hadoop01:9000/sparklog 
-Dspark.history.fs.cleaner.enabled=true"

#PART3
export SPARK_WORKER_CORES=1
export SPARK_WORKER_MEMORY=1G
export SPARK_EXECUTOR_CORES=1
export SPARK_EXECUTOR_MEMORY=1G
export SPARK_DRIVER_MEMORY=1G
export SPARK_WORKER_PORT=7078
export SPARK_WORKER_WEBUI_PORT=8082

创建历史服务器日志目录 

在hadoop01节点的Linux终端中执行如下命令启动HDFS:

cd /usr/local/hadoop
./sbin/start-dfs.sh

这是chmod命令的使用,用于修改文件或目录的权限。
·-chmod :是修改权限的命令选项

·777 :是权限的八进制表示,表示赋予文件或目录所有用户(所有者、组成员和其他用户)读

(r)、写(w)和执行(x)权限
。7表示rwx(读、写、执行)
。第一个7表示所有者权限
。第二个7表示组权限
。第三个7表示其他用户权限

cd /usr/local/hadoop
./bin/hdfs dfs -mkdir /sparklog
./bin/hdfs dfs -chmod 777 /sparklog

配置spark-defaults.conf文件 

在hadoop01节点上执行如下命令:

cd /usr/local/hadoop
sudo mv spark-defaults.conf.template spark-defaults.conf
vim spark-defaults.conf

在spark-defaults.conf中写入如下配置信息: 

spark.eventLog.enabled true  # 开启Spark的日志记录功能
spark.eventLog.dir hdfs://hadoop01:9000/sparklog  #日志记录的保存路径
spark.eventLog.compress true # 是否启动压缩

在hadoop01节点上执行如下命令,将Master节点(hadoop01节点)上的/usr/local/spark文件夹复制到各个Worker节点上(即hadoop02和hadoop03节点): 

cd  /usr/local/
tar  -zcf  ~/spark.master.tar.gz  ./spark
cd  ~
scp  ./spark.master.tar.gz  hadoop02:/home/hadoop
scp  ./spark.master.tar.gz  hadoop03:/home/hadoop

在hadoop02和hadoop03节点上分别执行如下操作: 

cd  ~
sudo  rm  -rf  /usr/local/spark/
sudo  tar  -zxf  ~/spark.master.tar.gz  -C  /usr/local
sudo  chown  -R  hadoop  /usr/local/spark

启动Hadoop集群 

cd  /usr/local/hadoop/
sbin/start-all.sh

启动历史服务器 在Master节点(hadoop01节点)上执行如下命令启动历史服务器: 

cd  /usr/local/spark/
./sbin/start-history-server.sh

启动Master节点 在M

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值