百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

大数据实战丨如何快速搭建一个自己的Spark分布式架构

csdh11 2025-02-27 14:48 21 浏览

从零开始搭建我们的Spark平台

1、准备centeros环境

为了搭建一个真正的的集群环境,并且要做到高可用的架构,我们至少准备三个虚拟机来作为集群节点。因此我购买了三台阿里云的服务器,来作为我们的集群节点。

注意到,master是主节点,而slave顾名思义就是奴隶,自然就是为主节点工作的节点。实际上,在我们这个集群中,master和slave并没有那么明确的区分,因为事实上他们都在“努力地工作”。当然在搭建集群的时候,我们依然要明确这个概念。

2、下载jdk

  • 1、下载jdk1.8 tar.gz包
wget https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.tar.gz
  • 2、解压
tar -zxvf jdk-8u201-linux-x64.tar.gz

解压之后得到

  • 3、配置环境变量

修改profile

vi /etc/profile

添加如下

export JAVA_HOME=/usr/local/java1.8/jdk1.8.0_201
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

source使其生效

source /etc/profile

查看是否生效

java -version

看到如图内容表示已经成功。

以上操作三台虚拟机一模一样!
以上操作三台虚拟机一模一样!
以上操作三台虚拟机一模一样!

3、安装zookeeper

  • 下载zookeeper包
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
  • 解压
tar -zxvf zookeeper-3.4.13.tar.gz
  • 进入zookeeper配置目录
cd zookeeper-3.4.13/conf
  • 拷贝配置文件模板
cp zoo_sample.cfg zoo.cfg
  • 拷贝后修改zoo.cfg内容
dataDir=/home/hadoop/data/zkdata
dataLogDir=/home/hadoop/log/zklog

server.1=master:2888:3888
server.2=slave1:2888:3888


  • 配置环境变量
export ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.13
export PATH=$PATH:$ZOOKEEPER_HOME/bin
  • 使环境变量生效
source /etc/profile
  • 注意到前面配置文件中这句话,配置了数据目录
dataDir=/home/hadoop/data/zkdata
  • 我们手动创建该目录,并且进入到其中
cd /home/hadoop/data/zkdata/
echo 3 > myid
  • 这里需要特别注意这个
echo 1 > myid
  • 这是对于这个配置,因此在master中我们echo 1,而对于slave1则是 echo 2,对于slave2则是 echo 3
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888


  • 配置完启动测试
zkServer.sh start


  • 启动后查看是否启动成功
zkServer.sh status


以上操作三台虚拟机都要进行!只有echo 不一样
以上操作三台虚拟机都要进行!只有echo 不一样
以上操作三台虚拟机都要进行!只有echo 不一样
  • 在master中启动后查看状态
  • 在salve1中启动后查看状态

这里面的Mode是不一样的,这是zookeeper的选举机制,至于该机制如何运行,这里按下不表。后续会有专门说明。 至此,zookeeper集群已经搭建完成

4、安装hadoop

  • 1、通过wget下载hadoop-2.7.7.tar.gz
wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
  • 2、下载后解压

解压出一个hadoop-2.7.7目录

tar -zxvf hadoop-2.7.7



  • 3、配置hadoop环境变量

修改profile

vi /etc/profile
  • 增加hadoop环境变量
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:
  • 使环境变量生效
source /etc/profile
  • 配置完之后,查看是否生效
 hadoop version


  • 进入hadoop-2.7.7/etc/hadoop中
  • 编辑core-site.xml
vi core-site.xml 
  • 增加configuration

    
    
        fs.defaultFS
        hdfs://myha01/
    

    
    
        hadoop.tmp.dir
        /home/hadoop/data/hadoopdata/
    

    
    
        ha.zookeeper.quorum
        master:2181,slave1:2181,slave2:2181
    

    
    
        ha.zookeeper.session-timeout.ms
        1000
        ms
    
  • 拷贝mapred-site.xml.template
cp mapred-site.xml.template mapred-site.xml


  • 编辑mapred-site.xml
vi mapred-site.xml
  • 增加如下内容

    
    
        mapreduce.framework.name
        yarn
    

    
    
        mapreduce.jobhistory.address
        master:10020
    

    
    
        mapreduce.jobhistory.webapp.address
        master:19888
    
  • 编辑hdfs-site.xml
vi hdfs-site.xml 
  • 增加如下内容


    
    
        dfs.replication
        1
    

    
    
        dfs.namenode.name.dir
        /home/hadoop/data/hadoopdata/dfs/name
    
    
        dfs.datanode.data.dir
        /home/hadoop/data/hadoopdata/dfs/data
    

    
    
        dfs.webhdfs.enabled
        true
    

    
    
        dfs.nameservices
        myha01
    

    
    
        dfs.ha.namenodes.myha01
        nn1,nn2
    

    
    
        dfs.namenode.rpc-address.myha01.nn1
        master:9000
    


  • 编辑yarn-site.xml
vi yarn-site.xml 
  • 增加如下内容

  
    
        yarn.resourcemanager.ha.enabled
        true
    

    
    
        yarn.resourcemanager.cluster-id
        yrc
    

    
    
        yarn.resourcemanager.ha.rm-ids
        rm1,rm2
    

    
    
        yarn.resourcemanager.hostname.rm1
        slave1
    

    
        yarn.resourcemanager.hostname.rm2
        slave2
    

    
    
        yarn.resourcemanager.zk-address
        master:2181,slave1:2181,slave2:2181
    

    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    

    
        yarn.log-aggregation-enable
        true
    

    
        yarn.log-aggregation.retain-seconds
        86400
    

    
    
        yarn.resourcemanager.recovery.enabled
        true
    

    
    
        yarn.resourcemanager.store.class
        org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
    


  • 最后编辑salves
master
slave1
slave2


以上操作三台虚拟机一模一样!
以上操作三台虚拟机一模一样!
以上操作三台虚拟机一模一样!
  • 接着就可以启动hadoop
  • 首先在三个节点上启动journalnode,切记三个节点都要操作
hadoop-daemon.sh start journalnode
  • 操作完成后用jps命令查看,可以看到



  • 其中QuorumPeerMain是zookeeper,JournalNode则是我启动的内容
  • 接着对主节点的namenode进行格式化
hadoop namenode -format


  • 注意标红色方框的地方
  • 完成格式化后查看/home/hadoop/data/hadoopdata目录下的内容


  • 目录中的内容拷贝到slave1上,slave1是我们的备用节点,我们需要他来支撑高可用模式,当master宕机的时候,slave1马上能够顶替其继续工作。
cd..
scp -r hadoopdata/ root@slave1:hadoopdata/


  • 这样就确保了主备节点都保持一样的格式化内容

接着就可以启动hadoop

  • 首先在master节点启动HDFS
start-dfs.sh 



  • 接着启动start-yarn.sh ,注意start-yarn.sh需要在slave2中启动
start-yarn.sh 


  • 分别用jps查看三个主机

master


slave1


slave2


  • 这里注意到master和slave1都有namenode,实际上只有一个是active状态的,另一个则是standby状态。如何证实呢,我们 在浏览器中输入master:50700,可以访问


  • 在浏览器中输入slave1:50700,可以访问
  • 另一种方式,是查看我们配置的两个节点
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2

5、spark安装

  • 下载spark
wget http://mirrors.shu.edu.cn/apache/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz
  • 解压
tar -zxvf spark-2.4.0-bin-hadoop2.7.tgz


  • 进入spark的配置目录
cd spark-2.4.0-bin-hadoop2.7/conf
  • 拷贝配置文件spark-env.sh.template
cp spark-env.sh.template spark-env.sh


编辑spark-env.sh

vi spark-env.sh
  • 增加内容
export JAVA_HOME=/usr/local/java1.8/jdk1.8.0_201

export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7
export HADOOP_CONF_DIR=/usr/local/hadoop/hadoop-2.7.7/etc/hadoop

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master:2181,slave1:2181,slave2:2181 -Dspark.deploy.zookeeper.dir=/spark"
export SPARK_WORKER_MEMORY=300m
export SPARK_WORKER_CORES=1


其中java的环境变量、hadoop环境变量请从系统环境变量中拷贝,后面SPARK_WORKER_MEMORY是spark运行的内存,SPARK_WORKER_CORES是spark使用的CPU核数

以上操作三台虚拟机一模一样!
以上操作三台虚拟机一模一样!
以上操作三台虚拟机一模一样!
  • 配置系统环境变量
 vi /etc/profile
  • 增加内容
export SPARK_HOME=/usr/local/spark/spark-2.4.0-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin
  • 拷贝slaves.template 文件
cp slaves.template slaves
  • 使环境变量生效
source  /etc/profile
  • 编辑slaves
vi slaves
  • 增加内容
master
slave1
slave2


  • 最后我们启动spark,注意即便配置了spark的环境变量,由于start-all.sh和hadoop的start-all.sh冲突,因此我们必须进入到spark的启动目录下,才能执行启动所有的操作。
  • 进入启动目录
cd spark-2.4.0-bin-hadoop2.7/sbin
  • 执行启动
./start-all.sh 
  • 执行完成后,用jps查看三个节点下的状态
  • master:
  • slave1:


  • slave2:


注意到三个节点都有了spark的worker进程,只有master当中有Master进程。

访问master:8080


至此我们就拥有了正式的spark环境。

6、尝试使用

由于我们已经配置了环境变量,故可以输入spark-shell直接开始。

 spark-shell 

这里我们就进入了spark-shell.

然后进行编码

val lise = List(1,2,3,4,5)
val data = sc.parallelize(lise)
data.foreach(println)

`


或者我们进入spark-python

pyspark


查看sparkContext

相关推荐

探索Java项目中日志系统最佳实践:从入门到精通

探索Java项目中日志系统最佳实践:从入门到精通在现代软件开发中,日志系统如同一位默默无闻却至关重要的管家,它记录了程序运行中的各种事件,为我们排查问题、监控性能和优化系统提供了宝贵的依据。在Java...

用了这么多年的java日志框架,你真的弄懂了吗?

在项目开发过程中,有一个必不可少的环节就是记录日志,相信只要是个程序员都用过,可是咱们自问下,用了这么多年的日志框架,你确定自己真弄懂了日志框架的来龙去脉嘛?下面笔者就详细聊聊java中常用日志框架的...

物理老师教你学Java语言(中篇)(物理专业学编程)

第四章物质的基本结构——类与对象...

一文搞定!Spring Boot3 定时任务操作全攻略

各位互联网大厂的后端开发小伙伴们,在使用SpringBoot3开发项目时,你是否遇到过定时任务实现的难题呢?比如任务调度时间不准确,代码报错却找不到方向,是不是特别头疼?如今,随着互联网业务规模...

你还不懂java的日志系统吗 ?(java的日志类)

一、背景在java的开发中,使用最多也绕不过去的一个话题就是日志,在程序中除了业务代码外,使用最多的就是打印日志。经常听到的这样一句话就是“打个日志调试下”,没错在日常的开发、调试过程中打印日志是常干...

谈谈枚举的新用法--java(java枚举的作用与好处)

问题的由来前段时间改游戏buff功能,干了一件愚蠢的事情,那就是把枚举和运算集合在一起,然后运行一段时间后buff就出现各种问题,我当时懵逼了!事情是这样的,做过游戏的都知道,buff,需要分类型,且...

你还不懂java的日志系统吗(javaw 日志)

一、背景在java的开发中,使用最多也绕不过去的一个话题就是日志,在程序中除了业务代码外,使用最多的就是打印日志。经常听到的这样一句话就是“打个日志调试下”,没错在日常的开发、调试过程中打印日志是常干...

Java 8之后的那些新特性(三):Java System Logger

去年12月份log4j日志框架的一个漏洞,给Java整个行业造成了非常大的影响。这个事情也顺带把log4j这个日志框架推到了争议的最前线。在Java领域,log4j可能相对比较流行。而在log4j之外...

Java开发中的日志管理:让程序“开口说话”

Java开发中的日志管理:让程序“开口说话”日志是程序员的朋友,也是程序的“嘴巴”。它能让程序在运行过程中“开口说话”,告诉我们它的状态、行为以及遇到的问题。在Java开发中,良好的日志管理不仅能帮助...

吊打面试官(十二)--Java语言中ArrayList类一文全掌握

导读...

OS X 效率启动器 Alfred 详解与使用技巧

问:为什么要在Mac上使用效率启动器类应用?答:在非特殊专业用户的环境下,(每天)用户一般可以在系统中进行上百次操作,可以是点击,也可以是拖拽,但这些只是过程,而我们的真正目的是想获得结果,也就是...

Java中 高级的异常处理(java中异常处理的两种方式)

介绍异常处理是软件开发的一个关键方面,尤其是在Java中,这种语言以其稳健性和平台独立性而闻名。正确的异常处理不仅可以防止应用程序崩溃,还有助于调试并向用户提供有意义的反馈。...

【性能调优】全方位教你定位慢SQL,方法介绍下!

1.使用数据库自带工具...

全面了解mysql锁机制(InnoDB)与问题排查

MySQL/InnoDB的加锁,一直是一个常见的话题。例如,数据库如果有高并发请求,如何保证数据完整性?产生死锁问题如何排查并解决?下面是不同锁等级的区别表级锁:开销小,加锁快;不会出现死锁;锁定粒度...

看懂这篇文章,你就懂了数据库死锁产生的场景和解决方法

一、什么是死锁加锁(Locking)是数据库在并发访问时保证数据一致性和完整性的主要机制。任何事务都需要获得相应对象上的锁才能访问数据,读取数据的事务通常只需要获得读锁(共享锁),修改数据的事务需要获...