spark on yarn 和SparkjobHistory配置和常见erro

#spark on yarn 和SparkjobHistory配置和常见erro
感谢开源和各位前辈对知识的无私奉献
希望我的这篇文章,能对您有所帮助
软件版本信息:
Vmware16,Centos7,hadoop2.7.2,jdk1.8,scala-2.11.8,spark2.0.1
如果有需要的软件在下面链接里,很抱歉,centos的镜像因为太大没有办法上传到网盘里,需要劳烦您自己找一下资源
物理机配置:
10代i5,24G内存,1000g固态
虚拟机配置
5G内存,50G硬盘
Vmware:
链接:https://pan.baidu.com/s/17RlsO9ZGg1zQCHAFjmSFTg
提取码:w4a4
jdk,hadoop,spark,scala,我都压缩过后放到了一个文zip后缀的压缩文件

链接:https://pan.baidu.com/s/1w7TRWfBZ0GF3JodwHLwSlw
提取码:r9fn
我的建议是先在windows下解压缩,然后通过xftp或者winscp这一类的工具上传到您的虚拟机上。好的话不多说,让我们开始

环境准备

您需要一个安装了scala,jdk的hadoop集群
我的建议是,将scala和jdk都安装到集群的虚拟机上,hadoop安装成完全分布式,如果不会的考虑可以去找一下对应的文章。
首先解压缩文件夹
注意:!!!一定要写对您的配置文件,单词不要写错,不要写错,不要写错,主在不在乎我不知道,但这对您来说真的会很重要

tar -zxvf spark-2.0.1-bin-hadoop2.7.tgz -C /您希望安装到的路径
# 我的是路径/opt/module
# 随后我们给文件取一个好记得名字
mv spark-2.0.1-bin-hadoop2.7 /opt/module/spark-yarn

接下来我们配置对应的环境变量

sudo vim /etc/profile.d/my_env.sh
或者
sudo vim /etc/profile

内容参考这一部分,其中HADOOP_CONF_DIR您可以试一下不写,至于报不报错,由您的电脑说了算
在这里插入图片描述
随后source一下
如果是第一种方式编写的环境变量

source /etc/profile/即可

第二种方式:

source /etc/profile.d/my_env.sh

两种方式配置环境变量的区别是
通过第一种是所有在加载环境时您配置的环境变量对所有用户均有效
通过第二种方式配置的环境变量仅对当前用户有效

spark on yarn

请您切换到您安装的spark的conf目录下下修改对应文件

cd $SPARK_HOME/conf
# 给文件改个名
mv ./spark-env.sh.example ./spark-env.sh
# 修改文件
vim ./spark-env.sh
# 按下i输入以下内容,等号后面的内容请分别切换为您的jdk安装目录
export JAVA_HOME=/opt/module/jdk1.8.0_144
# 这里的等号后面的内容请切换为您的hadoop安装目录下的etc下的hadoop目录
YARN_CONF_DIR=/opt/module/hadoop-2.7.2/etc/hadoop

接着我们做spark on yarn的最后一项配置
改一下yarn的配置文件,因为我们是虚拟机,内存可能不大够,执行job时极有可能erro
我们可以通过修改yarn的配置文件来解决这个问题:目前有两种改法我推荐的是第二种
第一种方式:vim $HADOOP_HOME/etc/hadoop/yarn-site.xml

<property>
    <!-- 是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是 true-->
    <name>yarn.nodemanager.pmem-check-enabled</name>
    <value>false</value>
</property>
<!--是否启动一个线程检查每个任务正式用的虚拟内存量,如果任务超出分配值,则直接将其杀死,默认为true-->
<proeprty>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
</property>

第二种方式:vim $HAOOP_HOME/etc/hadoop/yarn-site.xml

<property>
    <!-- 每个job最多可用内存-->
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>2000</value>
</property>
<property>
    <!-- 每个任务最少可用内存-->
    <name>yarn.scheduler.minimum-allocation-mb</name>
    <value>1000</value>
</property>
<proeprty>
    <name>yarn.nodemanager.vmem-pmem-ratio</name>
    <value>4.1</value>
</proeprty>

到这里,最基本的spark on yarn配置就已经完成了
我们做一个小测试
执行一个job看看效果,就算一下π的value如何?

./bin/spark-submit \ # 官方给的脚本路径,不能省略,省略100%报错
--class org.apache.spark.examples.SparkPi \ # 类的路径,您敢省略我就敢erro
--master yarn \ # 指定程序运行在yarn上
--driver-memory 600m \ # 指定Driver端的内存为600MB
--executor-memory 600m \# 指定一个executor的内存为600MB
--deploy-mode cluster \
$SPARK_HOME/examples/jars/spark-examples_2.11-2.0.1.jar \# jar包路径
10


出现SUCESSED说明job执行成功,注意:这里是不会直接输出计算出π的值的,如果出现您的情人error1号
stack trace:。。。。
或者2号
java.io.IOException: Failed to send RPC。。。。。
这两种类型的错误,有极大可能是您的内存方面的问题,按照上述的yarn配置的第二种方式修改一下有极大可能能解决。

配置spark on yarn 模式的history

首先您需要配置一下hadoop的jobhistory(日志聚集功能)并开启对应服务

vim $HADOOP/etc/hadoop/yarn-site.xml
<!-- 开启日志聚集功能-->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<!-- 设置保留时间为7天-->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>
<!-- 指定url界面-->
<property>
    <name>yarn.log.server.url</name>
    <value>http://hadoop112:19888/jobhistory/logs</value>
</property>
# 随后报存退出
vim $HADOOP/etc/hadoop/mapred-site.xml
<!--历史服务器端地址-->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop112:10020</value>
</property>
<!-- 历史服务器web地址-->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop112:19888</value>
</property>
</configuration>
# 保存退出

接下来我们修改一部分配置文件,注意:你的hdfs下/spark目录一定要存在

# 不管存不存在我们都创建一下试试呗,反正不会报一堆error
hadoop fs -mkdir /spark
vim $SPARK_HOME/conf/spark-env.sh
# 输入如下内容
SPARK_HISTORY_DIR="
-Dspark.history.ui=18080
-Dspark.history.fs.logDirector=hdfs://你的NameNode所在主机名:9000/spark
-Dspark.history.retainedApplication=30"

然后我们重命名一下文件

mv $SPRK_HOME/conf/spark-default.conf.example $SPARK_HOME/conf/spark-default.conf
vim $SPARK_HOME/conf/spark-default.conf
# 修改掉文件中原本注释的,如果没有的就添加
# 如果我想偷懒咋办?直接输呗
# 注意:!!!,如果您不想和一堆亲爱的erro面对面的话,请您一定要把我的
# hadoop112:9000改成您的NameNodes所在主机名和对应的core-site.xml里写
# 的那个端口号
spark.eventLog.enabled           true
spark.eventLog.dir               hdfs://hadoop112:9000/spark
spark.yarn.historyServer.address=hadoop112:18080
spark.history.ui.port=18080

最后保存退出
现在基本就完成了
让我们一起在$HADOOP_HOME中分别重启hdfs,yarn,jobhistory, 在spark中开启,history,如果这里没有遇见程序员的情人erro,说明您基本成功了
相应命令

# NameNode节点开启hdfs
$HADOOP_HOME/sbin/start-dfs.sh
# yarn节点 开启yarn
$HADOOP_HOME/sbib/start-yarn.sh
# NameNode 节点 开启日志聚集
$HADOOP_HOME/sbin/mr-jobhistory-daemon.sh start historyserver
$SPARK_HOME/sbin/start-history-server.sh

最后,我们再跑一个一把spark作为client的job,如果没遇到您的情人error就欧可以看到您亲爱的不是3.1415926的π了

 ./bin/spark-submit \
 --class org.apache.spark.examples.SparkPi \
 --master yarn \ 
 --driver-memory 600m \
 --executor-memory 600m \
 --deploy-mode client $SPARK_HOME/examples/jars/spark-examples_2.11-2.0.1.jar 10

在这里插入图片描述

在这里插入图片描述

最后,创作不易,希望各位能提供一些建议,供在下参考写出更好更,适合各位的博文。有问题也欢迎留言,看到了会如果是我能力范围内的问题,会回复的。
也希望各位能驯服erro这个凶猛的对象。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值