第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