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),我们一起学习,进步和交流!(woshigcs) 
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访! 

Spark历险记之编译和远程任务提交的更多相关文章

  1. spark 官方文档(1)——提交应用程序

    Spark版本:1.6.2 spark-submit提供了在所有集群平台提交应用的统一接口,你不需要因为平台的迁移改变配置.Spark支持三种集群:Standalone.Apache Mesos和Ha ...

  2. Spark源码编译

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3822995.html spark源码编译步骤如下: cd /home/hdpusr/workspace ...

  3. Spark技术内幕:Stage划分及提交源码分析

    http://blog.csdn.net/anzhsoft/article/details/39859463 当触发一个RDD的action后,以count为例,调用关系如下: org.apache. ...

  4. Myeclipse如何使用自带git工具向远程仓库提交代码(转)

    Myeclipse如何使用自带git工具向远程仓库提交代码 第一步:将改动的代码标记 项目右键:team->synchronize workspace 点击确定 项目右键>add to g ...

  5. Win7 Eclipse 搭建spark java1.8编译环境,JavaRDD的helloworld例子

    [学习笔记] Win7 Eclipse 搭建spark java1.8编译环境,JavaRDD的helloworld例子: 在eclipse oxygen上创建一个普通的java项目,然后把spark ...

  6. 独一无二 hortonworks spark 源码编译教程

    hortonworks的源码在github上能找到! https://github.com/hortonworks/spark2-release 找到对应版本release源码后下载到本地 在wind ...

  7. 【Spark Core】TaskScheduler源代码与任务提交原理浅析2

    引言 上一节<TaskScheduler源代码与任务提交原理浅析1>介绍了TaskScheduler的创建过程,在这一节中,我将承接<Stage生成和Stage源代码浅析>中的 ...

  8. spark 源码编译 standalone 模式部署

    本文介绍如何编译 spark 的源码,并且用 standalone 的方式在单机上部署 spark. 步骤如下: 1. 下载 spark 并且解压 本文选择 spark 的最新版本 2.2.0 (20 ...

  9. Spark源码编译并在YARN上运行WordCount实例

    在学习一门新语言时,想必我们都是"Hello World"程序开始,类似地,分布式计算框架的一个典型实例就是WordCount程序,接触过Hadoop的人肯定都知道用MapRedu ...

随机推荐

  1. mac系统下通过安装包的形式安装mongdb

    下载地址 mongoDB mongoDB 图形化管理软件 MongoDB Compass 下载完成后,进行解压,解压后的文件进行重命名 mongodb 然后前往/usr/local,将mongodb文 ...

  2. cdq分治·三维偏序问题

    转载自FlashHu大佬的博客CDQ分治总结(CDQ,树状数组,归并排序),在讲述部分有部分删改,用了自己的代码 CDQ分治的思想 CDQ分治是基于时间的离线分治算法.这一类分治有一个重要的思想——用 ...

  3. 进程、线程、协程、CPU

    进程.线程.CPU 进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.或者说进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进 ...

  4. POJ2449-A*算法-第k短路

    (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 题意:传送门  原题目描述在最下面.  给你一个有向图,求指定节点间的第k短路. 思路:  先反向跑出从终点开始的到每个节点的最短距离 ...

  5. Java io简单总结

    IO 字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的 字符流在操作时使用了缓冲区,通过缓冲区再操作文件 缓冲:一段特殊的内存.如果一个程序频繁地操作一个资源(如文件或数据库),则性能会 ...

  6. PAT_A1043#Is It a Binary Search Tree

    Source: PAT A1043 Is It a Binary Search Tree (25 分) Description: A Binary Search Tree (BST) is recur ...

  7. jquery操作html元素之(删除元素)

    删除元素/内容 如需删除元素和内容,一般可使用以下两个 jQuery 方法: remove() - 删除被选元素(及其子元素) empty() - 从被选元素中删除子元素 jQuery remove( ...

  8. python 数据结构之冒泡排序

    def bubble_sort(alist): # 外层循环冒泡排序进行的次数(len-1) for i in range(len(alist) - 1, 0, -1): # 内层循环控制冒泡的比较: ...

  9. 小明系列故事――女友的考验 HDU - 4511 AC自动机+简单DP

    题意:自己看题目,中文体面. 题解: 把所有不能走的路径放入AC自动机中. 然后DP[i][j]表示走到 i 这个点,且位于AC自动机 j 这个节点最短距离 然后直接DP即可.注意一点会爆int #i ...

  10. vue axios简单配置

    参考:https://www.cnblogs.com/sophie_wang/p/7844119.html 1. 安装 npm install axios 2. main.js import axio ...