spark on yarn

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

spark on yarn

软件安装

当前环境

hadoop环境搭建参考:hadoop集群安装

  • hadoop2.6
  • spark-2.2.0-bin-hadoop2.6.tgz
  • scala-2.11.12

安装scala

tar -zxvf scala-2.11.12.tgz

vi /etc/profile

添加以下内容

export SCALA_HOME=/home/hadoop/app/scala
export PATH=$PATH:$SCALA_HOME/bin

使配置生效

source /etc/profile

查看scala版本号

scala -version

注意: 用root账户修改完变量后,需要重新打开ssh链接,配置才能生效

安装spark

tar -zvf spark-2.2.0-bin-without-hadoop.tgz

vi /etc/profile

添加以下内容

export SPARK_HOME=/home/hadoop/app/spark2.2.0
export PATH=$PATH:$SPARK_HOME/bin

修改spark环境变量

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

vi conf/spark-evn.sh

添加以下内容

SPARK_DRIVER_MEMORY=512m
SPARK_DIST_CLASSPATH=$(/home/hadoop/app/hadoop-2.6.0/bin/hadoop classpath)
SPARK_LOCAL_DIRS=/home/hadoop/app/spark2.2.0
export SPARK_MASTER_IP=192.168.10.125export JAVA_HOME=/home/app/jdk8
export SCALA_HOME=/home/hadoop/app/scala
export HADOOP_HOME=/home/hadoop/app/hadoop
export HADOOP_CONF_DIR=/home/hadoop/app/hadoop/etc/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SCALA_HOME/bin

使配置变量生效

source /etc/profile

配置slaves

vi slaves

node3
node4

将配置文件下发到从节点

scp slaves hadoop@node3:/home/hadoop/app/spark2.2.0/conf
scp slaves hadoop@node4:/home/hadoop/app/spark2.2.0/conf
scp spark-env.sh hadoop@node3:/home/hadoop/app/spark2.2.0/conf
scp spark-env.sh hadoop@node4:/home/hadoop/app/spark2.2.0/conf

启动

# 启动zookeeper,可能存在选举延迟,可多执行几次./zkServer.sh status查看启动结果
./runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh start" zookeeper
# 在node2节点上执行,启动HDFS
sbin/start-dfs.sh
# 在node2节点上执行,启动YARN
sbin/start-yarn.sh 
# 在node4节点上面执行,启动resourcemanager
sbin/yarn-daemon.sh start resourcemanager
# 在node2上启动spark
sbin/start-all.sh

关闭

# 关闭spark
sbin/stop-all.sh
# 在node4上执行
sbin/yarn-daemon.sh stop resourcemanager
# 在node2上执行
sbin/stop-yarn.sh 
# 在node2上执行
sbin/stop-dfs.sh
# 关闭zookeeper
runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh stop" zookeeper

查看启动情况

jps

# hdfs进程
1661 NameNode
1934 SecondaryNameNode
1750 DataNode# yarn进程
8395 ResourceManager
7725 NameNode# namenode HA
8256 DFSZKFailoverController
7985 JournalNode# zookeeper进程
1286 QuorumPeerMain# spark进程
2551 Master
2641 Worker

管理界面

hadoop:  http://node2:8088/
nameNode: http://node2:50070/
nodeManager:  http://node2:8042/
spark master:  http://node2:8080/
spark worker:  http://node2:8081/
spark jobs:  http://node2:4040/

运行示例

Spark-shell

vi test.text# 在文件中添加 hello spark
hdfs dfs -mkdir /test # 创建文件夹
hdfs dfs -put test.txt /test # 上传文件到hdfs
hdfs dfs -ls /test # 查看是否上传成功
./bin/spark-shell
sc.textFile("hdfs://node2:9000/test/test.txt") # 从hdfs上获取文件
sc.first() # 获取文件的第一行数据

Run application locally(Local模式)

./bin/spark-submit --class org.apache.spark.examples.SparkPi --master local[4] /home/hadoop/app/spark2.2.0/examples/jars/spark-examples_2.11-2.2.0.jar

Run on a Spark standalone cluster(Standalone模式,使用Spark自带的简单集群管理器)

./bin/spark-submit
--class org.apache.spark.examples.SparkPi
--master spark://node2:7077
--executor-memory 512m
--total-executor-cores 4
/home/hadoop/app/spark2.2.0/examples/jars/spark-examples_2.11-2.2.0.jar 10

Run on yarn(YARN模式,使用YARN作为集群管理器)

./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client examples/jars/spark-examples*.jar 10

注意事项

HADOOP_CONF_DIR=/home/hadoop/app/hadoop/etc/hadoop

确保 HADOOP_CONF_DIR 或者 YARN_CONF_DIR 指向包含 Hadoop 集群的(客户端)配置文件的目录。这些配置被用于写入 HDFS 并连接到 YARN ResourceManager 。此目录中包含的配置将被分发到 YARN 集群,以便 application(应用程序)使用的所有的所有 containers(容器)都使用相同的配置。如果配置引用了 Java 系统属性或者未由 YARN 管理的环境变量,则还应在 Spark 应用程序的配置(driver(驱动程序),executors(执行器),和在客户端模式下运行时的 AM )。

SPARK_DIST_CLASSPATH=$(/home/hadoop/app/hadoop-2.6.0/bin/hadoop classpath)

Pre-build with user-provided Hadoop: 属于“Hadoop free”版,不包含hadoop的jar等,这样,下载到的Spark,可应用到任意Hadoop 版本。但是需要在spark的spar-evn.sh中指定配置hadoop的安装路径。

spark-submit

如果用户的应用程序被打包好了,它可以使用 bin/spark-submit 脚本来启动。这个脚本负责设置 Spark 和它的依赖的 classpath,并且可以支持 Spark 所支持的不同的 Cluster Manager 以及 deploy mode(部署模式):

./bin/spark-submit \--class <main-class> \--master <master-url> \--deploy-mode <deploy-mode> \--conf <key>=<value> \... # other options<application-jar> \[application-arguments]

一些常用的 options(选项)有 :

  • --class: 您的应用程序的入口点(例如。 org.apache.spark.examples.SparkPi)
  • --master: standalone模式下是集群的 master URL,on yarn模式下值是yarn
  • --deploy-mode: 是在 worker 节点(cluster) 上还是在本地作为一个外部的客户端(client) 部署您的 driver(默认: client)
  • --conf: 按照 key=value 格式任意的 Spark 配置属性。对于包含空格的 value(值)使用引号包 “key=value” 起来。
  • application-jar: 包括您的应用以及所有依赖的一个打包的 Jar 的路径。该 URL 在您的集群上必须是全局可见的,例如,一个 hdfs:// path 或者一个 file:// 在所有节点是可见的。
  • application-arguments: 传递到您的 main class 的 main 方法的参数,如果有的话。

异常处理

执行脚本

./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client /home/hadoop/app/spark2.2.0/examples/jars/spark-examples_2.11-2.2.0.jar

报错信息一

Application application_1537990303043_0001 failed 2 times due to AM Container for appattempt_1537990303043_0001_000002 exited with  exitCode: -103
Diagnostics: 
Container [pid=2344,containerID=container_1537990303043_0001_02_000001] is running beyond virtual memory limits. 
Current usage: 74.0 MB of 1 GB physical memory used; 
2.2 GB of 2.1 GB virtual memory used. Killing container.

问题原因

虚拟机物理内存设置的是1G,则对应虚拟内存最大为1*2.1=2.1GB,实际使用了2.2[此处疑问:为什么就使用了2.2,单个任务默认分配1024M,加上一个任务的Container默认1024M导致吗?],所以需要扩大虚拟内存的比例,或者限制container和task的大小,或者关闭掉对虚拟内存的检测。

解决方法

修改yarn-site.xml文件,新增以下内容,详情原因请参考:YARN 内存参数详解

  <property><name>yarn.nodemanager.vmem-pmem-ratio</name><value>3</value><description>虚拟内存和物理内存比率,默认为2.1</description></property><property><name>yarn.nodemanager.vmem-check-enabled</name><value>false</value><description>不检查虚拟内存,默认为true</description></property>

报错二

Exception in thread "main" org.apache.spark.SparkException: Yarn application has already ended! It might have been killed or unable to launch application master.at org.apache.spark.scheduler.cluster.YarnClientSchedulerBackend.waitForApplication(YarnClientSchedulerBackend.scala:85)at org.apache.spark.scheduler.cluster.YarnClientSchedulerBackend.start(YarnClientSchedulerBackend.scala:62)at org.apache.spark.scheduler.TaskSchedulerImpl.start(TaskSchedulerImpl.scala:173)at org.apache.spark.SparkContext.<init>(SparkContext.scala:509)at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2509)at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:909)at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:901)at scala.Option.getOrElse(Option.scala:121)at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:901)at org.apache.spark.examples.SparkPi$.main(SparkPi.scala:31)at org.apache.spark.examples.SparkPi.main(SparkPi.scala)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:755)at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:180)at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:205)at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:119)at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
18/09/04 17:01:43 INFO util.ShutdownHookManager: Shutdown hook called

问题原因

以上报错是在伪集群上运行时报错信息,具体报错原因未知,在切换到真正的集群环境后无此报错

配置链接

hadoop

  • core-site.xml

  • hdfs-site.xml

  • mapred-site.xml

  • yarn-site.xml

  • hadoop-env.sh

  • masters

  • slaves

zookeeper

  • zoo.cfg

spark

  • spark-env.sh
  • slaves

env

  • hosts
  • profile

tools

  • deploy.conf
  • deploy.sh
  • runRemoteCmd.sh

转载于:https://my.oschina.net/freelili/blog/2218794

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python爬虫学习笔记12】Ajax数据爬取简介

有时候在我们设计利用requests抓取网页数据的时候&#xff0c;会发现所获得的结果可能与浏览器显示给我们的不一样&#xff1a;比如说有的信息我们通过浏览器可以显示&#xff0c;但一旦用requests却得不到想要的结果。这种现象是因为我们通过requests获得的都是HTML源文档&…

数据挖掘——相似文章推荐

相似文章推荐&#xff1a;在用户阅读某篇文章时&#xff0c;为用户推荐更多的与在读文章内容相类似的文章 相关概念&#xff1a; 推荐(Recommended)&#xff1a;指介绍好的人或事物&#xff0c;希望被任用或接受。数据挖掘领域&#xff0c;推荐包括相似推荐和协同过滤推荐。 相…

c语言设计一个按时间片轮转法实现处理器调度的程序,设计一个按时间片轮转法实现处理器调度的程序...

实验一处理器调度一、实习内容选择一个调度算法&#xff0c;实现处理器调度。&#xff1b;二、实习目的在采用多道程序设计的系统中&#xff0c;往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时&#xff0c;就必须依照某种策略来决定哪些进程优先占用处理器。…

Perl的浅拷贝和深度拷贝

首先是深、浅拷贝的概念&#xff1a; 浅拷贝&#xff1a;shallow copy&#xff0c;只拷贝第一层的数据。Perl中赋值操作就是浅拷贝深拷贝&#xff1a;deep copy&#xff0c;递归拷贝所有层次的数据&#xff0c;Perl中Clone模块的clone方法&#xff0c;以及Storable的dclone()函…

linux lvm 查看,Linux LVM 详解

逻辑卷管理LVM是一个多才多艺的硬盘系统工具。无论在Linux或者其他类似的系统&#xff0c;都是非常的好用。传统分区使用固定大小分区&#xff0c;重新调整大小十分麻烦。但是&#xff0c;LVM可以创建和管理“逻辑”卷&#xff0c;而不是直接使用物理硬盘。可以让管理员弹性的管…

智慧园区-楼宇建模技巧之【建楼篇】

一、国际惯例先上图 二、有什么用&#xff1f;用什么搞的&#xff1f;花了多久&#xff1f; 用途 室内定位(会议室、停车位查找等)安防监控(直接定位到某个楼道的摄像头拉取视频流)各种传感器数据三维可视化请问哪里可以买到呢(含笑半步癫2333) 我这里正好有一个。https://iot.…

asp.net core输出中文乱码的问题

原文:asp.net core输出中文乱码的问题 摘要 在学习asp.net core的时候&#xff0c;尝试在控制台&#xff0c;或者页面上输出中文&#xff0c;会出现乱码的问题。 问题重现 新建控制台和站点 public class Program{public static void Main(string[] args){ Console.W…

android oom工具,Android OOM-Heap,MAT工具检测内存泄露

概述在android的开发中&#xff0c;要时刻主要内存的分配和垃圾回收&#xff0c;因为系统为每一个dalvik虚拟机分配的内存是有限的&#xff0c;在google的G1中&#xff0c;分配的最大堆大小只有16M&#xff0c;后来的机器一般都为24M&#xff0c;实在是少的可怜。这样就需要我们…

windows 端微信多开

假设微信安装目录为 "E:\Program Files\WeChat\WeChat.exe" 打开记事本&#xff0c;复制一下命令&#xff0c;保存为 bat 文件 echo off start /d "E:\Program Files\WeChat\" WeChat.exe start /d "E:\Program Files\WeChat\" WeChat.exe exi…

超详细MFS网络分布式文件系统

-----------------------MFS---------------------- (1)分布式原理 分布式文件系统( Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上&#xff0c;而是通过计算机网络与节点相连。简单来说&#xff0c;就是把一些分散的(分布在局域网内各个…

markdown文件转word文件

工具&#xff1a; https://github.com/jgm/pandoc/releases/tag/2.2.3.2 下载pandoc安装包之后&#xff0c;像安装普通软件一样点开安装就可以了。安装完成之后&#xff0c;打开cmd命令行&#xff0c;输入pandoc -v&#xff0c;如果正常显示出类似下面的信息就表明安装成功&a…

android全面屏系统哪个版本开始,Android全面屏

所谓全面屏手机&#xff0c;就是屏幕纵横比大于1.86的设备。例如&#xff1a;举个例子.png官方文档&#xff1a;If your app targets Android 8.0 (API level 26) or higher, it fills the entire screen, according to its layout.If your app targets Android 7.1 (API level…

AliOS Things声源定位应用演示

摘要&#xff1a; 1. 概述 利用麦克风阵列进行声源定位在智能降噪、语音增强、语音识别等领域有广泛应用和研究前景。本文介绍基于AliOS Things STM32F413H Discovery开发板实现声源定位算法集成和功能演示。 概述利用麦克风阵列进行声源定位在智能降噪、语音增强、语音识别等…

Mysql 使用正则表达式

需求&#xff1a;匹配出姓名字段里非中文的 SELECT * FROM 表 WHERE REAL_NAME REGEXP ([\\u4e00-\\u9fa5]{1,20}|[a-zA-Z\\.\\s]{1,20}) ; 查询结果如下

2、Collections操作(自定义类)的各种实现

2019独角兽企业重金招聘Python工程师标准>>> 1、排序(sort) 要想实现排序&#xff0c;必须实现compare方法&#xff0c;这样Collection才知道是怎样的排序规则。普通的数据类型&#xff0c;比如&#xff1a;int 、String、long等都已经实现了Comparable接口&#xf…

android多接口请求参数,okhttp3 使用json参数post方式请求接口数据(android)

1. 谷歌自带的json不支持像map一样直接put字符串进去&#xff0c;所以先导入阿里的json包2. 创建json对象&#xff0c;并且放入所要请求的参数 //登录 private void loginRequest() { String url Contents.url"login"; JSONObject json new JSONObject(); json.put…

由浅入深,一文掌握NGINX知识文集

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

Python语法特点如注释规则、代码缩进、编码规范等

在Python中&#xff0c;通常包括3种类型的注释&#xff0c;分别是单行注释、多行注释和中文编码声明注释。单行注释在Python中&#xff0c;使用“#”作为单行注释的符号。从符号“#”开始直到换行为止&#xff0c;“#”后面所有的内容都作为注释的内容&#xff0c;并被Python编…

修改android.jar教程,Android修改jar包文件

1、Android studio中新建java文件&#xff0c;取和将要修改的文件相同的文件名&#xff0c;把class文件中代码复制过去&#xff0c;修改需要改动的代码2、新建txt文件&#xff0c;将新建的Java文件按照依赖关系将路经添加到新建的txt文件中&#xff0c;被依赖的放在最前面(ps:此…

win10安装TortoiseGit

TortoiseGit 是Git的可视化工具。所以前提是已经安装了Git&#xff0c;安装很简单一路next。 下载地址&#xff0c;百度搜“TortoiseGit”&#xff0c;一般是第一个。 目前地址是&#xff1a;https://tortoisegit.org/download/ 如果打不开&#xff0c;可以进入腾讯软件中心…