Spark历险记之编译和远程任务提交

Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处,Spark以其先进的设计理念,迅速成为社区的热门项目,围绕着Spark推出了Spark SQL、Spark Streaming、MLLib和GraphX等组件,也就是BDAS(伯克利数据分析栈),这些组件逐渐形成大数据处理一站式解决平台。从各方面报道来看Spark抱负并非池鱼,而是希望替代Hadoop在大数据中的地位,成为大数据处理的主流标准,不过Spark还没有太多大项目的检验,离这个目标还有很大路要走。 Spark使用Scala语言进行实现,它是一种面向对象、函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集(Scala 提供一个称为 Actor 的并行模型,其中Actor通过它的收件箱来发送和接收非同步信息而不是共享数据,该方式被称为:Shared Nothing 模型)。在Spark官网上介绍,它具有运行速度快、易用性好、通用性强和随处运行等特点。 环境介绍

序号

应用

说明

1

CDH Hadoop2.6

如果想跑在hadoop上,则需要安装

2

JDK7

底层依赖

3

Scala2.11.7

底层依赖

4

Maven3.3.3

构建编译打包

5

Ant1.9.5

构建编译打包

6

Spark1.4.0

主角

7

Intillj IDEA

开发IDE

8

SBT

scala-spark专属打包构建工具

9

Centos6或Centos7

集群运行的Linux系统

这里Hadoop已经安装完毕,并且能正常工作,Spark可以运行在Standalone模式上,所以假如你没有Hadoop环境,当然也是可以使用的。 1,下载scala : wget http://downloads.typesafe.com/scala/2.11.7/scala-2.11.7.tgz?_ga=1.103717955.215870088.1434449855 2, 安装scala , 解压到某个目录,并加入环境变量 export SCALA_HOME=/ROOT/server/scala export PATH=$PATH:$SCALA_HOME/bin 3,下载spark,这里推荐下载spark源码,自己编译所需对应的hadoop版本,虽然spark官网也提供了二进制的包! http://spark.apache.org/downloads.html 4,编译spark 这里需要注意,默认的spark编译,使用的是scala2.10的版本,一定要确保你所有使用的scala在大版本2.10.x范围内一致,否则在某些情况下可能会出现莫名其妙的问题。 我这里用的是spark1.4.0的版本,所以只能用scala2.11.x的版本,这就需要重新编译spark了,另一个原因也需要和对应的haodop版本编译对应。 编译步骤 (1)将下载好的spark源码解压到某个目录下 (2)进入源码目录,分别执行如下命令 设置使用scala那个版本编译 dev/change-version-to-2.11.sh maven打包,指定hadoop版本和scala版本 mvn -Pyarn -Phadoop-2.6 -Dscala-2.11 -DskipTests clean package 大概半小时候可编译成功

5,安装spark 请参考散仙以前的文章:http://qindongliang.iteye.com/blog/2224797 6,spark测试的几个命令:

Java代码

  1. standlone模式
  2. bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://Hadoop-1-231:7077 examples/target/spark-examples_2.11-1.4.0.jar 100
  3. yarn-cluster模式cluster
  4. bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn-cluster examples/target/spark-examples_2.11-1.4.0.jar 100
  5. yarn-client模式cluster
  6. bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn-client examples/target/spark-examples_2.11-1.4.0.jar 100

7,远程任务提交 Spark集群一般都会部署在Linux上,而我们开发一般都会在windows上,那么我们想调试Spark程序,应该怎么做? 大多数的情况下,你都需要把你的程序打包成一个jar,然后上传到Linux上,然后在执行测试,这样非常麻烦,你频繁改代码 就意味着,你得不断的打包,上传,打包,上传,这跟hadoop的调试是一样的。 更简洁的方式,就是直接在编译器(这里推荐Intellj IDEA)里,开发,然后打包,直接在IDEA里以编程方式提交spark任务,这样在开发期间相对就比较很高效了。 如何打包构建一个spark应用的程序 ? (1)安装使用maven 下载地址 https://maven.apache.org/ (2)安装使用sbt 下载地址 http://www.scala-sbt.org/ 这里推荐用sbt,专门针对scala项目的进行构建打包的 好吧,也许你需要一个demo来帮助你理解? 在IDEA中,创建一个Scala的SBT项目: 然后在build.sbt文件中,加入如下依赖:

Java代码

  1. name := "spark2117"
  2. version := "1.0"
  3. scalaVersion := "2.11.7"
  4. libraryDependencies += "org.apache.hadoop" % "hadoop-client" % "2.6.0"
  5. libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "1.4.0"
  6. libraryDependencies += "javax.servlet" % "javax.servlet-api" % "3.0.1"

一段简单的代码:

然后直接运行就能直接在windows上提交任务到Linux上的spark集群了 IDEA的控制台里会打印计算结果:

在Spark的8080监控页面显示如下:

8,遇到的问题: IDEA里警告日志显示:

Java代码

  1. 15/08/04 19:33:09 WARN ReliableDeliverySupervisor: Association with remote system [akka.tcp://sparkMaster@h1:7077] has failed, address is now gated for [5000] ms. Reason is: [Disassociated].

Spark集群的Master机器的master的log日志显示:

Java代码

  1. java.io.InvalidClassException: scala.reflect.ClassTag$$anon$1;
  2. local class incompatible: stream classdesc serialVersionUID = -4937928798201944954,
  3. local class serialVersionUID = -8102093212602380348

服务器上log是准确的,它告诉我们有客户端和服务端的序列化版本不一致,意思就是说,你的scala或者是hadoop的版本等跟服务器上的可能不一致,所以安装时务必要确定所有的软件版本号一致。 这个问题,我在stackoverflow上提问了2天,都没人知道,最后各种疯狂的找资料才发现就是软件版本不一致导致的,真是大意失荆州了,解铃还须系铃人!

原文发布于微信公众号 - 我是攻城师(woshigcs)

原文发表时间:2015-08-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏闵开慧

hadoop源码解析1 - hadoop中各工程包依赖关系

1 hadoop中各工程包依赖简述     Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。     G...

3285
来自专栏蒋专的专栏

Spark 以及 spark streaming 核心原理及实践

作者在接触spark以及spark streaming之后,对spark技术的使用的经验积累以及心得体会,在此分享给大家。本文依次从spark生态,原理,基本概...

2.5K4
来自专栏牛肉圆粉不加葱

YARN资源调度器

1666
来自专栏牛肉圆粉不加葱

Structured Streaming 编程指南

Structured Streaming 是一个基于 Spark SQL 引擎的、可扩展的且支持容错的流处理引擎。你可以像表达静态数据上的批处理计算一样表达流计...

1582
来自专栏Hadoop实操

如何使用Oozie API接口向非Kerberos环境的CDH集群提交Java作业

前面Fayson介绍了《如何使用Oozie API接口向非Kerberos环境的CDH集群提交Spark作业》,本篇文章主要介绍如何使用Oozie Client...

3647
来自专栏美图数据技术团队

快速、安全、可靠!Yarn!| MTdata小讲堂

Yarn 的全称是 Yet Anther Resource Negotiator(另一种资源协商者)。它作为 Hadoop 的一个组件,官方对它的定义是一个工作...

1352
来自专栏分布式系统和大数据处理

安装和配置Spark(单节点)

Apache Spark被称为第三代大数据处理平台,也当前应用最广泛的大数据处理方案,这篇文章将介绍如何在Linux系统(Cent OS7)上以单机模式(Sta...

7825
来自专栏星回的实验室

打造自己的MapReduce[一]:Hadoop集群搭建

那就是我在这里的每一篇文开头都必然是:最近工作好忙,又断更很久了……Anyway,这也不能成为偷懒的理由。我可能对记录技术有些固执的误解,总认为是要待到整理出一...

1111
来自专栏我是攻城师

理解Spark的运行机制

4619
来自专栏大数据

如何给Hadoop集群划分角色

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproje...

66110

扫码关注云+社区

领取腾讯云代金券