700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > CentOS 7上搭建Spark3.0.1+ Hadoop3.2.1分布式集群

CentOS 7上搭建Spark3.0.1+ Hadoop3.2.1分布式集群

时间:2022-09-11 09:51:51

相关推荐

CentOS 7上搭建Spark3.0.1+ Hadoop3.2.1分布式集群

CentOS 7上搭建Spark3.0.1+ Hadoop3.2.1分布式集群

VMWare 安装CentOS 7使用Xshell连接虚拟机集群设置安装JDK 1.8SSH 免密登陆安装hadoop 3.2安装Spark 3.0.1总结

VMWare 安装CentOS 7

推荐使用VMware Workstation Pro 16,下载安装即可。下载最新的CentOS 7 Minimal-.iso,在虚拟机安装。推荐1G运存和20G存储。在CentOS 7的安装过程中,需要设置root用户的密码,还可以根据需要创建单独的用户。安装完成后,使用命令行进行更新,然后安装net-tools.x86_64,以方便查看ip地址。

# 如果在安装时没有连接网络vi /etc/sysconfig/network-scripts/ifcfg-ens33# 将ONBOOT=no修改为yes# 重启网络服务service network restart# 更新系统yum update# 安装net-toolsyum install net-tools.x86_64# 查看ip地址ifconfig

ip地址为:192.168.92.137

使用Xshell连接虚拟机

这里可以下载Xshell家庭/学校免费版,但是您需要申请才行。文件->新建会话,信息配置可以参考如下,连接即可。表格中的信息,具体需要更换成您自己的。

集群设置

节点设置。为什么上面的ip地址是连续的呢? 这其实跟DHCP有关,下一步我们会使用克隆主机的方式来创建多个slave机器,大家可以去验证,但是可能出现与表中不一直的ip,我们根据需要修改即可。

安装JDK 1.8

在进行下一步的克隆前,我们先安装jdk-8u271-linux-x64.tar.gz,目前1.8版本的下载需要注册Oracle的账号才能够下载,有点麻烦呢。使用SCP命令上传到master主机上,scp命令使用参考如下。

scp local_file remote_username@remote_ip:remote_folder

参数依次是本地文件,远程用户名和远程ip,以及保存的文件夹。在PowerShell中使用如下。

PS E:\XunLeiDownload> scp .\jdk-8u271-linux-x64.tar.gz root@192.168.92.137:/usr/local>>> # 这是输出The authenticity of host '192.168.92.137 (192.168.92.137)' can't be established.ECDSA key fingerprint is SHA256:DjkK5V/chVHAD1SsaosqdxfH4wClmH8S6M8kxw7X/RQ.Are you sure you want to continue connecting (yes/no)?Warning: Permanently added '192.168.92.137' (ECDSA) to the list of known hosts.root@192.168.92.137's password:jdk-8u271-linux-x64.tar.gz100% 137MB 91.5MB/s 00:01 # 上传成功

解压jdk1.8到/usr/local路径下,

tar -xvf jdk-8u271-linux-x64.tar.gz mv jdk1.8.0_271 jdk1.8 # 重命名文件夹

安装vim,编辑/etc/profile,

yum install vim # 安装vimvim /etc/profile

添加两行内容如下,

export JAVA_HOME=/usr/local/jdk1.8export PATH=$PATH:$JAVA_HOME/bin

执行source /etc/profile使环境生效,$JAVA_HOME查看是否配置成功,或者,

java -version >>> java version "1.8.0_271"Java(TM) SE Runtime Environment (build 1.8.0_271-b09)Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)

表示配置成功。

SSH 免密登陆

在配置ssh免密登陆之前,将master克隆3份slaves出来,然后验证其ip是否和上面所述一致,并使用Xshell连接,这样我们可以得到额外的三台机器,且都安装好Java的。

注意:在使用克隆时,不太推荐使用链接克隆。

使用ifconfig查看ip地址后,如下,下面将按照这个ip地址进行配置。在master节点上更改hosts文件如下。

vim /etc/hosts编辑,在后面添加以下行。

192.168.92.137 master192.168.92.134 slave1192.168.92.135 slave2192.168.92.136 slave3

其他的slave节点也应该如此。使用以下命令,分别更改4台机器的主机名,以master节点为例。

hostnamectl set-hostname master

其他节点是slave1-3,更改完成后在Xshell中重启会话就可以发现主机名已经改变啦。要使master和3台slave免密登陆,需先在本地机器使用ssh-keygen一个公私钥对。

ssh-keygen -t rsa # 生成公私钥对>>>Generating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'.Enter passphrase (empty for no passphrase): # 不用输入 Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. # 存放位置Your public key has been saved in /root/.ssh/id_rsa.pub.# 公钥The key fingerprint is:SHA256:vGAdZV8QBkGYgbyAj4OkQ9GrYEEiilX5QLmL97CcFeg root@masterThe key's randomart image is:+---[RSA 2048]----+|+o++o+ ..=*o+o. ||==..= o oo o . ||*..o.* .. . ||=.o.+ +o . ||o..+ .o.S || .. E... . || o * . || + .|| |+----[SHA256]-----+

其他三台机器也是这样生成。将slaves生成的所有id_rsa.pub公钥文件通过scp上传到master的/root/.ssh/目录下。

scp id_rsa.pub root@master:/root/.ssh/id_rsa.pub.1 # slave2 对应于.2scp id_rsa.pub root@master:/root/.ssh/id_rsa.pub.2 # 依此类推# master上也要这样处理,否则就不能从slaves登陆到master,如下scp id_rsa.pub root@master:/root/.ssh/

在master节点上,将所有的公钥文件写入authorized_keys文件中。

cat id_rsa.pub* >> authorized_keysrm -rf id_rsa.pub.*# 删除

分发authorized_keys文件给slaves机器。

scp authorized_keys root@slave1:/root/.ssh/scp authorized_keys root@slave2:/root/.ssh/scp authorized_keys root@slave3:/root/.ssh/

分发known_hosts文件给slaves机器。

scp known_hosts root@slave3:/root/.ssh/ # 其他同上

这样就可以实现免密登陆啦,查看known_hosts文件如下。

master,192.168.92.137 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBG4pcNSq4jQmGY3JRlYoU/IssJ8gfjTZhCcqBmLlviFismkti27xJHbd0s1rcaO/MX4ORK6eUdGr2ALE/r36otk=slave1,192.168.92.134 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBG4pcNSq4jQmGY3JRlYoU/IssJ8gfjTZhCcqBmLlviFismkti27xJHbd0s1rcaO/MX4ORK6eUdGr2ALE/r36otk=slave2,192.168.92.135 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBG4pcNSq4jQmGY3JRlYoU/IssJ8gfjTZhCcqBmLlviFismkti27xJHbd0s1rcaO/MX4ORK6eUdGr2ALE/r36otk=slave3,192.168.92.136 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBG4pcNSq4jQmGY3JRlYoU/IssJ8gfjTZhCcqBmLlviFismkti27xJHbd0s1rcaO/MX4ORK6eUdGr2ALE/r36otk=

符合这样的格式才可以呢。

安装hadoop 3.2

下载hadoop-3.2.1.tar.gz,通过scp上传之master节点,然后解压。

PS E:\XunLeiDownload> scp .\jdk-8u271-linux-x64.tar.gz root@192.168.92.137:/usr/localtar -xvf hadoop-3.2.1.tar.gz # 解压在/usr/local/hadoop-3.2.1

添加环境变量,vim /etc/profile,在最后添加以下两行。

export HADOOP_HOME=/usr/local/hadoop-3.2.1export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME:/sbin

执行以下命令source /etc/profile,使配置文件生效,并查看是否成功。

hadoop version>>>Hadoop 3.2.1Source code repository /repos/asf/hadoop.git -r b3cbbb467e22ea829b3808f4b7b01d07e0bf3842Compiled by rohithsharmaks on -09-10T15:56ZCompiled with protoc 2.5.0From source with checksum 776eaf9eee9c0ffc370bcbc1888737This command was run using /usr/local/hadoop-3.2.1/share/hadoop/common/hadoop-common-3.2.1.jar

在hadoop安装目录下建立以下目录:

mkdir tmp # 即hadoop-3.2.1/tmp, 存储临时文件mkdir -p hdfs/name # namenode的数据目录mkdir -p hdfs/data # datanode的数据目录

配置相关配置文件,在etc/hadoop目录下。在core-site.xml文件中指定默认文件系统和临时文件目录。

<configuration><property><name>fs.defaultFS</name><value>hdfs://master:9000</value></property><property><name>hadoop.tmp.dir</name><value>/usr/local/hadoop-3.2.1/tmp</value></property></configuration>

在hdfs-site.xml中配置复制份数,datanode和namenode的目录。

<configuration><property><name>dfs.namenode.secondary.http-address</name><value>master:50090</value></property><property><name>dfs.replication</name><value>3</value></property><property><name>dfs.namenode.name.dir</name><value>file:/usr/local/hadoop-3.2.1/hdfs/name</value><final>true</final></property><property><name>dfs.datanode.data.dir</name><value>file:/usr/local/hadoop-3.2.1/hdfs/data</value><final>true</final></property><property><name>dfs.webhdfs.enabled</name><value>true</value></property><property><name>dfs.permissions.enabled</name><value>false</value></property></configuration>

在mapred-site.xml中指定主节点和添加classpath。

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapreduce.jobhistory.address</name><value>master:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>master:19888</value></property><property><name>mapreduce.application.classpath</name><value>/usr/local/hadoop-3.2.1/etc/hadoop,/usr/local/hadoop-3.2.1/share/hadoop/common/*,/usr/local/hadoop-3.2.1/share/hadoop/common/lib/*,/usr/local/hadoop-3.2.1/share/hadoop/hdfs/*,/usr/local/hadoop-3.2.1/share/hadoop/hdfs/lib/*,/usr/local/hadoop-3.2.1/share/hadoop/mapreduce/*,/usr/local/hadoop-3.2.1/share/hadoop/mapreduce/lib/*,/usr/local/hadoop-3.2.1/share/hadoop/yarn/*,/usr/local/hadoop-3.2.1/share/hadoop/yarn/lib/*</value></property></configuration>

yarn-site.xml中都需要指向主节点。

<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.resourcemanager.address</name><value>master:8032</value></property><property><name>yarn.resourcemanager.scheduler.address</name><value>master:8030</value></property><property><name>yarn.log-aggregation-enable</name><value>true</value></property><property><name>yarn.resourcemanager.resource-tracker.address</name><value>master:8031</value></property><property><name>yarn.resourcemanager.admin.address</name><value>master:8033</value></property><property><name>yarn.resourcemanager.webapp.address</name><value>master:8088</value></property></configuration>

workers中指定datanode节点。

localhostslave1slave2slave3

在hadoop-env.sh中指定用户。

export HADOOP_HOME=/usr/local/jdk1.8export HDFS_NAMENODE_USER=rootexport HDFS_DATANODE_USER=rootexport HDFS_SECONDARYNAMENODE_USER=rootexport YARN_RESOURCEMANAGER_USER=rootexport YARN_NODEMANAGER_USER=root

将配置好的hadoop分发到其他机器,在其他slaves机器上也要执行步骤2添加环境变量哦。

scp -r hadoop-3.2.1 slave1:/usr/local/scp -r hadoop-3.2.1 slave2:/usr/local/scp -r hadoop-3.2.1 slave3:/usr/local/

格式化namenode,在master执行。

hdfs name -format>> -11-25 23:58:07,593 INFO common.Storage: Storage directory /usr/local/hadoop-3.2.1/hdfs/name has been successfully formatted.-11-25 23:58:07,640 INFO namenode.FSImageFormatProtobuf: Saving image file /usr/local/hadoop-3.2.1/hdfs/name/current/fsimage.ckpt_0000000000000000000 using no compression-11-25 23:58:07,792 INFO namenode.FSImageFormatProtobuf: Image file /usr/local/hadoop-3.2.1/hdfs/name/current/fsimage.ckpt_0000000000000000000 of size 396 bytes saved in 0 seconds .-11-25 23:58:07,807 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0-11-25 23:58:07,825 INFO namenode.FSImage: FSImageSaver clean checkpoint: txid=0 when meet shutdown.-11-25 23:58:07,826 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************SHUTDOWN_MSG: Shutting down NameNode at master/192.168.92.137************************************************************/

在输出中看到Storage: Storage directory /usr/local/hadoop-3.2.1/hdfs/name has been successfully formatted.,说明格式话成功了,在下一次格式化前,需要删除hdfs和tmp目录下的所有文件,否则会运行不起来。启动hadoop,在sbin下。

./start-all.sh>>>./start-all.shStarting namenodes on [master]上一次登录:四 11月 26 00:08:30 CST pts/5 上master: namenode is running as process 14328. Stop it first.Starting datanodes上一次登录:四 11月 26 00:14:03 CST pts/5 上slave1: WARNING: /usr/local/hadoop-3.2.1/logs does not exist. Creating.slave3: WARNING: /usr/local/hadoop-3.2.1/logs does not exist. Creating.slave2: WARNING: /usr/local/hadoop-3.2.1/logs does not exist. Creating.localhost: datanode is running as process 14468. Stop it first.Starting secondary namenodes [master]上一次登录:四 11月 26 00:14:04 CST pts/5 上Starting resourcemanager上一次登录:四 11月 26 00:14:09 CST pts/5 上resourcemanager is running as process 13272. Stop it first.Starting nodemanagers上一次登录:四 11月 26 00:14:19 CST pts/5 上

使用jps查看。

jps>>>15586 Jps14468 DataNode14087 GetConf13272 ResourceManager14328 NameNode15096 SecondaryNameNode15449 NodeManager

这上面显示的master节点的信息slaves节点则少了一些,可以自行查看哦。验证,访问namenod主节点端口9870。

service firewalld stop # 需要关闭防火墙哦

webui地址在:http://192.168.92.137:9870/

在下面的摘要如下,可以看到确实有4个节点。

查看yarn管理界面,在http://192.168.92.137:8088/cluster

测试,向hdfs文件系统中写入一个文件。

PS E:\XunLeiDownload> scp .\TwitterSecurity.csv root@192.168.92.137:/root# 这里上传一个40多兆的csv文件hdfs dfs -put TwitterSecurity.csv /

可以看到确实在是三个节点上复制保存。

安装Spark 3.0.1

下载预编译hadoop3.2的版本,spark-3.0.1-bin-hadoop3.2.tgz。

使用scp上传到master节点上,然后解压,并加入相应的环境变量。

PS E:\XunLeiDownload> scp .\spark-3.0.1-bin-hadoop3.2.tgz root@192.168.92.137:/usr/local# 上传tar -xvf spark-3.0.1-bin-hadoop3.2.tgz # 解压mv spark-3.0.1-bin-hadoop3.2 spark-3.0.1

vim /etc/profile添加以下两行。

export SPARK_HOME=/usr/local/spark-3.0.1export PATH=$PATH:$SPARK_HOME:/bin:$SPARK_HOME:/sbin

source /etc/profile使配置文件生效。

进入conf文件夹,复制配置文件模板。

cp spark-env.sh.template spark-env.sh

在spark-env.sh后面添加以下行。

export JAVA_HOME=/usr/local/jdk1.8export HADOOP_CONF_DIR=/usr/local/hadoop-3.2.1/etc/hadoopexport SPARK_MASTER_HOST=masterexport SPARK_LOCAL_DIRS=/usr/local/spark-3.0.1

cp slaves.template slaves编辑如下。

localhostslave1slave2slave3

将spark分发给slaves机器,同时不要忘记环境变量。

scp -r spark-3.0.1 slave1:/usr/local/scp -r spark-3.0.1 slave2:/usr/local/scp -r spark-3.0.1 slave3:/usr/local/

运行,进入sbin目录。

./start-all.sh >>>org.apache.spark.deploy.master.Master running as process 16859. Stop it first.slave1: starting org.apache.spark.deploy.worker.Worker, logging to /usr/local/spark-3.0.1/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-slave1.outslave3: starting org.apache.spark.deploy.worker.Worker, logging to /usr/local/spark-3.0.1/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-slave3.outlocalhost: org.apache.spark.deploy.worker.Worker running as process 17975. Stop it first.slave2: starting org.apache.spark.deploy.worker.Worker, logging to /usr/local/spark-3.0.1/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-slave2.out

查看,地址在:http://192.168.92.137:8080/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。