Spark集群部署

1 篇文章 0 订阅
1 篇文章 0 订阅

Spark集群部署

部署顺序

  1. 系统安装
  2. SHH配置
  3. JDK安装
  4. Hadoop安装
  5. Spark安装

系统安装


安装CentOS系统,选择最低配置。
安装版本为: CentOS-7-x86_64-Everything-1804

记录集群中每个节点的IP,并测试连通性确保各节点间互相可以ping通。

安装软件版本为:
JDK: jdk-8u191-linux-x64.tar
Hadoop: hadoop-3.1.0.tar
Spark: spark-2.3.2-bin-hadoop2.7

hosts修改


整个配置过程中,注意账号名的不同;即出现账号名时应对对应账号名作相应修改!

  1. 修改各个节点的主机名,使其与该节点的角色名一致,如master,slave1,slave2,...(这一步非必须,只是为了便于区分):
sudo vi /etc/hostname 	#编辑 /etc/hostname 文件从而修改主机名
sudo reboot   			#重启使新主机名生效
  1. 修改各个 hosts 文件,在本地植入部分 DNS 映射,将对应的角色名与IP匹配起来,然 后尝试用角色名相互 ping,相互能 ping 通证明配置成功:
sudo vi /etc/hosts 

hosts

ping master -c 4

ping

说明: 第 2 步保障了 Hadoop 可以通过角色名在局域网里找到各个节点,为了让 Hadoop 可以进 一步读取、操作各个节点,需要赋予其登录的权限,意即让 Hadoop 拥有各个节点的普通用户账 号,从而在需要操作各个节点时直接用对应的账号登录获取操作权限。SSH 协议可以为节点上的账户创建唯一的公私钥,然后利用这些公私钥实现无密码登录,从而让Hadoop 直接绕开传统的账号密码登录过程,直接用公私钥访问节点。

SHH配置

配置 SSH 无密码登录

  1. 生成各个节点的 SSH 公私钥:

    cd ~/.ssh			# 如果没有该目录,先执行一次ssh localhost
    rm ./id_rsa* 		# 删除之前生成的公匙(如果有)
    ssh-keygen -t rsa	# 一直按回车就可以
    

    ssh

  2. 为了让每个节点都拥有其它节点的公钥,要先把所有公钥放进一个文件里,分 4 步 走:
    ( a ) 在 master 上,将 master 的公钥复制到 authorized_keys 文件里:

    cat ./id_rsa.pub >> ./authorized_keys  # cat 命令用于提取内容,>>输出重定向
    

    ( b ) 将 slave1 的公钥文件发送给 master,此时的传送要输入密码:

    scp ~/.ssh/id_rsa.pub 账号名@master:/home/账号名/
    

    注意,这里前后两处hadoop需要修改为对应的账号名

    发生公钥

    ( c ) master 将接收到的 slave1 的公钥文件里的内容提取追加到authorized_keys 文 件里:

    cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
    

    ( d ) 重复前两步,将 slave2 (其他节点)的公钥内容也放进 authorized_keys 文件,然后将 authorized_keys 文件分别发送到两个 slave~/.ssh/ 下:

    scp ~/.ssh/authorized_keys 账号名@slave1:/home/账号名/.ssh/
    scp ~/.ssh/authorized_keys 账号名@slave2:/home/账号名/.ssh/
    

    注意,修改账号名hadoop为自己的账号名。

    在这里插入图片描述

  3. 每个节点尝试使用 ssh <角色名> 的命令直接登录其它节点,直到每个节点都可以 成功免密码登录其它节点,则免密码登录配置成功! 如在 master 上输入:

    ssh slave1
    

    在这里插入图片描述

JDK安装


JDK安装需在各个机器上都做一遍。或者在master上安装完成后通过scp发送到各个节点相同目录下,然后修改PATH环境变量。这里我安装的JDK版本为:jdk-8u191-linux-x64.tar

  1. 将上传的 JDK 压缩包(jdk-8u191-linux-x64.tar)放到家目录(/home/账号名/),解压并放到指定的文件夹:
sudo mkdir -p /usr/local/jvm
sudo tar -zxvf jdk-8u191-linux-x64.tar.gz -C /usr/local/jvm
  1. 将当前的 PATH 环境变量提取保存到 setenv.sh,然后将其修改为初始化语句,增加 JAVA 的路径(我用的是 jdk1.8.0_191,大家相应地改成自己的 jdk 版本号):
echo $PATH >> ~/setenv.sh 
sudo vi ~/setenv.sh
export JAVA_HOME=/usr/local/jvm/jdk1.8.0_191
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=$PATH:${JAVA_HOME}/bin

在这里插入图片描述

  1. 执行 setenv.sh 脚本文件修改当前环境变量 PATH,然后尝试 javajavac 指令是否有效:
source ~/setenv.sh 
java -version
javac -version

在这里插入图片描述

Hadoop安装


Hadoop安装需在各个机器上都做一遍。或者在master上安装完成后通过scp发送到各个节点相同目录下,然后修改PATH环境变量。这里我安装的Hadoop版本为:jdk-8u191-linux-x64.tar

  1. 在各个节点上将 hadoop 解压到 /usr/local/ 目录下,改变其所属用户和所属组(让 hadoop 软件用相应账号登录时对 hadoop 文件夹拥有最高权限):
sudo tar -zxvf hadoop-3.1.0.tar.gz -C /usr/local/ #解压
sudo mv /usr/loca/hadoop-3.1.0 /usr/local/hadoop  #mv 实现重命名 
sudo chown -R 账号名:账号名 /usr/local/hadoop
  1. 修改 slaves 文件,让 hadoop 知道自己可以聚合的节点名(保证与 hosts 里的角色名一致):
sudo vi /usr/local/hadoop/etc/hadoop/slaves 
master
slave1
slave2
  1. 修改 workers 文件
vi /usr/local/hadoop/etc/hadoop/workers
master
slave1
slave2

在这里插入图片描述

  1. 修改 core-site.xml 文件如下:
sudo vi /usr/local/hadoop/etc/hadoop/core-site.xml 
<configuration>
	<property>
		<name>fs.default.name</name>
		<value>hdfs://master:9000</value>
	</property>
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/usr/local/hadoop/tmp</value> 
	</property>
</configuration>

在这里插入图片描述

  1. 修改 hdfs-site.xml 文件如下(启用所有节点作为 DataNode,故 replication=3):

若集群数为n,则replication可以设置为n

sudo vi /usr/local/hadoop/etc/hadoop/hdfs-site.xml 
<configuration>
	<property>
		<name>dfs.replication</name>
		<value>3</value>
	</property>
	<property>
		<name>dfs.name.dir</name>
		<value>/usr/local/hadoop/hdfs/name</value> 
	</property>
	<property>
		<name>dfs.data.dir</name>
		<value>/usr/local/hadoop/hdfs/data</value> 
	</property>
    
	<property>
  		<name>dfs.http.address</name>
  		<value>192.168.142.130:50070</value>
	</property>
	<property>
  		<name>dfs.datanode.http.address</name>
  		<value>192.168.142.130:50075</value>
	</property>
	<property>
  		<name>dfs.datanode.address</name>
  		<value>192.168.142.130:50010</value>
	</property>
</configuration>

这里 192.168.142.130 应当修改为各个节点的ip地址。

在这里插入图片描述

  1. 修改 mapred-site.xml 文件如下:
sudo vi /usr/local/hadoop/etc/hadoop/mapred-site.xml
<configuration>
	<property>
		<name>yarn.app.mapreduce.am.env</name>
		<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
	</property>
	<property>
		<name>mapreduce.map.env</name>
		<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
	</property>	
	<property>
		<name>mapreduce.reduce.env</name>
		<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
	</property>
</configuration>

在这里插入图片描述

  1. 修改 yarn-site.xml 文件如下(启用 yarn 资源管理器):
sudo vi /usr/local/hadoop/etc/hadoop/yarn-site.xml 
<configuration>
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
</configuration>

在这里插入图片描述

  1. 修改 hadoop-env.sh 文件,将出现 JAVA_HOME 的值换成 jdk 所在的路径:
sudo vi /usr/local/hadoop/etc/hadoop/hadoop-env.sh
/usr/local/jvm/jdk1.8.0_191

在这里插入图片描述

说明:上述 Hadoop 的配置操作要在每个节点上做一次(或者通过scp传送到各个节点上),确保每个环节都不出错,然后就 可以尝试初始化 NameNode(聚合所有节点成为一个集群的服务),然后尝试启动各项服务。

  1. 添加PATH环境变量,将以下信息添加到setenv.sh中:
sudo vi ~/setenv.sh
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:${HADOOP_HOME}/bin
source ~/setenv.sh 
启动并验证Hadoop
  1. 对 hadoop 进行 NameNode 的格式化/初始化:

注意,不可以随意多次初始化hadoop,否则会出现问题,如果确实需要初始化,则先删除master节点下的文件hadoop/tmp,hadoop/hdfs/name,hadoop/hdfs/data,以及其他slave节点的hadoop/hdfs/data文件。删除后在进行初始化操作,删除目录为sudo rm -rf 文件路径

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

在这里插入图片描述

Spark安装


这里选择spark on yarn模式进行安装。

  1. 具体的内存配置请依据自己的电脑合适修改,不要直接套 pdf 数据。我的电脑是 1G 运行内存,所以设置的是1000M,executor cores是2(经过测试driver memory和worker memory如果小于512M,executor cores大于2的话用spark提交任务会很容易就崩死, 提示的是 SparkContext 相关错误)。
  2. 关于 spark 的概念、运行机制、spark on yarn 的内容,请阅读下面两个链接内容 http://blog.csdn.net/wwwxxdddx/article/details/51087188 spark 基本概念 http://www.aboutyun.com/thread-12294-1-1.html spark on yarn 的两种运行模式

以下步骤是在 master 主机上完成的,完成后可以直接将整个 spark 文件夹传给 slave。

  1. spark-2.3.2-bin-hadoop2.7.tgz 放到/home/hadoop/目录下;

  2. 解压文件到/usr/local 下,重命名文件夹并修改属主;

sudo tar -xzvf spark-2.3.2-bin-hadoop2.7.tgz -C /usr/local/ 
sudo mv /usr/local/spark-2.3.2-bin-hadoop2.7 /usr/local/spark 
sudo chown -R 账号名:账号名 /usr/local/spark/ 
  1. 利用 sparktemplate 文件生成配置文件;
cp /usr/local/spark/conf/spark-env.sh.template /usr/local/spark/conf/spark-env.sh   
cp /usr/local/spark/conf/slaves.template /usr/local/spark/conf/slaves  
cp /usr/local/spark/conf/spark-defaults.conf.template /usr/local/spark/conf/spark-defaults.conf
  1. 修改 spark-env.sh,在文件末尾添加如下内容:
sudo vi /usr/local/spark/conf/spark-env.sh 
export HADOOP_HOME=/usr/local/hadoop
export JAVA_HOME=/usr/local/jvm/jdk1.8.0_191  
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export SPARK_MASTER_IP=master 
export SPARK_LOCAL_DIRS=/usr/local/spark  
export SPARK_WORKER_MEMORY=1000M 
export SPARK_EXECUTOR_MEMORY=1000M
export SPARK_DRIVER_MEMORY=1000M   
export SPARK_EXECUTOR_CORES=2

在这里插入图片描述

这一步是为了配置 spark 的运行参数,hadoop_conf_dir 的设置是为了让 spark 运行在 yarn 上。 几个 memory 命令分别用于设置 driverexecutor 进程的内存,executor_cores设置的是每个 executor 进程的 CPU cores 的数量,这些设置请依据自己的电脑实际可负载情况设置。

  1. 修改 slaves 文件,在文件末尾添加其他节点 IP;
sudo vi /usr/local/spark/conf/slaves 
master
slave1
slave2

在这里插入图片描述

  1. 修改 spark-defaults.conf,在文件末尾添加如下内容:
sudo vi /usr/local/spark/conf/spark-defaults.conf 
spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three" 
spark.eventLog.enabled    true  
spark.eventLog.dir    hdfs://master:9000/historyserverforSpark 
spark.yarn.historyServer.address    master:18080 
spark.history.fs.logDirectory    hdfs://master:9000/historyserverforSpark   
spark.speculation       true 

在这里插入图片描述

这一步是为保存 spark 的运行日志,并且是保存到 hdfs 上的文件夹里面,方便运维。

  1. 将配置好的 spark 文件夹传到 slave1、slave2等节点。
sudo scp usr/local/spark 账号名@节点名:/usr/local/
sudo scp -r /usr/local/spark its312@slave1:/usr/local/ 
sudo scp -r /usr/local/spark its312@slave2:/usr/local/ 
  1. 配置 hadoop;
    修改 yarn-site.xml 文件,添加新的属性:
sudo vi /usr/local/hadoop/etc/hadoop/yarn-site.xml
	<property>
		<name>yarn.log-aggregation-enable</name>
		<value>true</value>
	</property>

在这里插入图片描述

这一步是为了开启日志整合功能,spark 在遇到问题时,利用命令 /usr/local/hadoop/bin/yarn logs -applicationId XXX
即可查看 applicationId 为 XXX 的实例的运行日志

这里需要重新初始化hadoop,使得修改的hadoop配置文件生效;

  1. 运行 spark;

    1. 运行 hadoop;
    /usr/local/hadoop/sbin/start-all.sh 
    
    1. 在 spark 中创建 historyserverforSpark 文件夹;
    /usr/local/hadoop/bin/hdfs dfs -mkdir /historyserverforSpark 
    
    1. 运行 spark;
    /usr/local/spark/sbin/start-all.sh 
    

    可以进入 spark 的 webui 查看是否成功启动:
    masterIP:8080/
    在这里插入图片描述
    masterIP:8088/cluster
    在这里插入图片描述

    1. 运行 history-server,这样应用运行完的结果可以通过 webui 看到。
    usr/local/spark/sbin/start-history-server.sh
    

    在这里插入图片描述

安装过程中的注意事项

防火墙问题

安装过程中需要关闭所有节点的防火墙,参考命令如下:

# CentOS 7的方式
systemctl stop firewalld.service #停止防火墙
systemctl start firewalld.service #开启防火墙
systemctl status firewalld.service #查看防火墙状态
systemctl enable firewalld.service #开机自启 “启用”
systemctl disable firewalld.service #开机自启 “禁用”

启动hadoop后查看节点启动数量

hdfs dfsadmin -report

hadoop多次初始化问题

在多次初始化之前,先删除对应的data、name、tmp文件夹,然后再进行初始化命令。

hadoop启动后live node数量为1问题

若hadoop启动后,master和slave节点输入jsp返回的信息都是正确的,但live node只有1个,且是master节点时,可能时hosts有问题,这是进入hosts修改ip,只有一个localhost=127.0.0.1
在这里插入图片描述

live node问题参考:Hadoop-2.2.0集群部署时live nodes数目不对的问题

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值