㈠ 怎么编译spark-streaming-flume
storm是实时处理,spark和hadoop是批处理,两者是互补。在Hadoop2.0之后,hadoop使用了新的yarn框架,map/rece只是其中一种默许了,spark也可以在hadoop的yarn框架下运行的,所以2者还会是融合的。
spark还有与storm相同功能的 Spark Steaming,实时处理流式数据。可以顺着Hadoop -> spark -> spark Steaming一路学下去,storm是否学习,你可以自己选择下。如果有相同功能的spark Steaming,肯定是学习spark Steaming啦。
如果我的回答没帮助到您,请继续追问。
㈡ spark java本地环境怎么搭建
1. 环境准备
Eclipse 请不要使用最新的 Neon(4.6) ,太多Bug了。 还是使用最新的 Mars(4.5) 系列吧
JDK 版本8.x (linux推荐Oracle, 没有测试过OpenJDK)
因为只是用Java,因此无需安装Scala及其相应的插件
2. 创建一个新的maven项目
3. pom.xml
org.apache.hadoop
hadoop-client
2.6.0
javax.servlet
*
org.apache.spark
spark-core_2.10
1.6.1
org.apache.spark
spark-streaming_2.10
1.6.1
org.apache.spark
spark-mllib_2.10
1.6.1
org.scala-lang
scala-library
2.10.5
这里只列出了必要的几个依赖。 其他的请根据你自己的项目需求添加
4. 使用maven打包
之后在Goal 之中填写clean package 即可
如果在修改了与Spark相关的代码之后,需要重新编译打包才行。 否则会有异常提示。
5. 代码编写注意事项:
在创建JavaSparkContext的时候,需要把自己加进去。
public static JavaSparkContextgetContext(String taskName) {
JavaSparkContextsc = new JavaSparkContext(SparkConnUtils.getSparkConf(taskName));
sc.addJar("target/sparkstat-0.0.1-SNAPSHOT.jar");
return sc;
}
其中target/sparkstat-0.0.1-SNAPSHOT.jar是maven 运行之后生成的完整的jar包
㈢ 如何使用intellij搭建spark开发环境
注意,客户端和虚拟集群中hadoop、spark、scala的安装目录是一致的,这样开发的spark应用程序的时候不需要打包spark开发包和scala的库文件,减少不必要的网络IO和磁盘IO。当然也可以不一样,不过在使用部署工具spark-submit的时候需要参数指明classpath。
1:IDEA的安装
官网jetbrains.com下载IntelliJ IDEA,有Community Editions 和& Ultimate Editions,前者免费,用户可以选择合适的版本使用。
根据安装指导安装IDEA后,需要安装scala插件,有两种途径可以安装scala插件:
启动IDEA -> Welcome to IntelliJ IDEA -> Configure -> Plugins -> Install JetBrains plugin... -> 找到scala后安装。
启动IDEA -> Welcome to IntelliJ IDEA -> Open Project -> File -> Settings -> plugins -> Install JetBrains plugin... -> 找到scala后安装。
如果你想使用那种酷酷的黑底界面,在File -> Settings -> Appearance -> Theme选择Darcula,同时需要修改默认字体,不然菜单中的中文字体不能正常显示。2:建立Spark应用程序
下面讲述如何建立一个Spark项目week2(,正在录制视频),该项目包含3个object:
取自spark examples源码中的SparkPi
计词程序WordCount1
计词排序程序WordCount2
A:建立新项目
创建名为dataguru的project:启动IDEA -> Welcome to IntelliJ IDEA -> Create New Project -> Scala -> Non-SBT -> 创建一个名为week2的project(注意这里选择自己安装的JDK和scala编译器) -> Finish。
设置week2的project structure
增加源码目录:File -> Project Structure -> Meles -> week2,给week2创建源代码目录和资源目录,注意用上面的按钮标注新增加的目录的用途。
增加开发包:File -> Project Structure -> Libraries -> + -> java -> 选择
/app/hadoop/spark100/lib/spark-assembly-1.0.0-hadoop2.2.0.jar
/app/scala2104/lib/scala-library.jar可能会提示错误,可以根据fix提示进行处理
B:编写代码
在源代码scala目录下创建1个名为week2的package,并增加3个object(SparkPi、WordCoun1、WordCount2):
SparkPi代码
package week2
import scala.math.random
import org.apache.spark._
/** Computes an approximation to pi */
object SparkPi {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("Spark Pi")
val spark = new SparkContext(conf)
val slices = if (args.length > 0) args(0).toInt else 2
val n = 100000 * slices
val count = spark.parallelize(1 to n, slices).map { i =>
val x = random * 2 - 1
val y = random * 2 - 1
if (x*x + y*y < 1) 1 else 0
}.rece(_ + _)
println("Pi is roughly " + 4.0 * count / n)
spark.stop()
}
}
复制代码
WordCount1代码
package week2
import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.SparkContext._
object WordCount1 {
def main(args: Array[String]) {
if (args.length == 0) {
System.err.println("Usage: WordCount1 <file1>")
System.exit(1)
}
val conf = new SparkConf().setAppName("WordCount1")
val sc = new SparkContext(conf)
sc.textFile(args(0)).flatMap(_.split(" ")).map(x => (x, 1)).receByKey(_ + _).take(10).foreach(println)
sc.stop()
}
}
复制代码
WordCount2代码
package week2
import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.SparkContext._
object WordCount2 {
def main(args: Array[String]) {
if (args.length == 0) {
System.err.println("Usage: WordCount2 <file1>")
System.exit(1)
}
val conf = new SparkConf().setAppName("WordCount2")
val sc = new SparkContext(conf)
sc.textFile(args(0)).flatMap(_.split(" ")).map(x => (x, 1)).receByKey(_ + _).map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1)).take(10).foreach(println)
sc.stop()
}
}
复制代码
C:生成程序包
生成程序包之前要先建立一个artifacts,File -> Project Structure -> Artifacts -> + -> Jars -> From moudles with dependencies,然后随便选一个class作为主class。
按OK后,对artifacts进行配置,修改Name为week2,删除Output Layout中week2.jar中的几个依赖包,只剩week2项目本身。
按OK后, Build -> Build Artifacts -> week2 -> rebuild进行打包,经过编译后,程序包放置在out/artifacts/week2目录下,文件名为week2.jar。
3:Spark应用程序部署
将生成的程序包week2.jar复制到spark安装目录下,切换到用户hadoop,然后切换到/app/hadoop/spark100目录,进行程序包的部署。具体的部署参见应用程序部署工具spark-submit 。
㈣ 新手请教:为什么安装spark需要源码编译
因为不同版本的HDFS在协议上是不兼容的,所以如果你想用你的Spark从HDFS上读取数据,那么你就的选择相应版本的HDFS来编译Spark,这个可以在编译的时候通过设置hadoop.version来选择,默认情况下,Spark默认为编译成Hadoop 1.0.4版本。现在可以使用的方法有Maven编译,sbt编译(时间较长),Spark自带脚本编译(实际还是调用Maven)。
㈤ 如何使用spark做大数据分析
动手实验Apache Spark的最好方式是使用交互式Shell命令行,Spark目前有Python Shell和Scala Shell两种交互式命令行。
可以从 这里下载Apache Spark,下载时选择最近预编译好的版本以便能够立即运行shell。
目前最新的Apache Spark版本是1.5.0,发布时间是2015年9月9日。
tar -xvzf ~/spark-1.5.0-bin-hadoop2.4.tgz
运行Python Shell
cd spark-1.5.0-bin-hadoop2.4
./bin/pyspark
在本节中不会使用Python Shell进行演示。
Scala交互式命令行由于运行在JVM上,能够使用java库。
运行Scala Shell
cd spark-1.5.0-bin-hadoop2.4
./bin/spark-shell
执行完上述命令行,你可以看到下列输出:
Scala Shell欢迎信息
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 1.5.0
/_/
Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_25)
Type in expressions to have them evaluated.
Type :help for more information.
15/08/24 21:58:29 INFO SparkContext: Running Spark version 1.5.0
下面是一些简单的练习以便帮助使用shell。也许你现在不能理解我们做的是什么,但在后面我们会对此进行详细分析。在Scala Shell中,执行下列操作:
在Spark中使用README 文件创建textFileRDD
val textFile = sc.textFile("README.md")
获取textFile RDD的第一个元素
textFile.first()
res3: String = # Apache Spark
对textFile RDD中的数据进行过滤操作,返回所有包含“Spark”关键字的行,操作完成后会返回一个新的RDD,操作完成后可以对返回的RDD的行进行计数
筛选出包括Spark关键字的RDD然后进行行计数
val linesWithSpark = textFile.filter(line => line.contains("Spark"))
linesWithSpark.count()
res10: Long = 19
要找出RDD linesWithSpark单词出现最多的行,可以使用下列操作。使用map方法,将RDD中的各行映射成一个数,然后再使用rece方法找出包含单词数最多的行。
找出RDD textFile 中包含单词数最多的行
textFile.map(line => line.split(" ").size)
.rece((a, b) => if (a > b) a else b)
res11: Int = 14
返回结果表明第14行单词数最多。
也可以引入其它java包,例如 Math.max()方法,因为map和rece方法接受scala函数字面量作为参数。
在scala shell中引入Java方法
import java.lang.Math
textFile.map(line => line.split(" ").size)
.rece((a, b) => Math.max(a, b))
res12: Int = 14
我们可以很容易地将数据缓存到内存当中。
将RDD linesWithSpark 缓存,然后进行行计数
linesWithSpark.cache()
res13: linesWithSpark.type =
MapPartitionsRDD[8] at filter at <console>:23
linesWithSpark.count()
res15: Long = 19
上面简要地给大家演示的了如何使用Spark交互式命令行。
弹性分布式数据集(RDDs)
Spark在集群中可以并行地执行任务,并行度由Spark中的主要组件之一——RDD决定。弹性分布式数据集(Resilient distributed data, RDD)是一种数据表示方式,RDD中的数据被分区存储在集群中(碎片化的数据存储方式),正是由于数据的分区存储使得任务可以并行执行。分区数量越多,并行越高。下图给出了RDD的表示:
Display- Edit
想象每列均为一个分区(partition ),你可以非常方便地将分区数据分配给集群中的各个节点。
为创建RDD,可以从外部存储中读取数据,例如从Cassandra、Amazon简单存储服务(Amazon Simple Storage Service)、HDFS或其它Hadoop支持的输入数据格式中读取。也可以通过读取文件、数组或JSON格式的数据来创建RDD。另一方面,如果对于应用来说,数据是本地化的,此时你仅需要使用parallelize方法便可以将Spark的特性作用于相应数据,并通过Apache Spark集群对数据进行并行化分析。为验证这一点,我们使用Scala Spark Shell进行演示:
㈥ spark的开发环境应该是怎样的
indows下spark开发环境配置
特注:windows下开发spark不需要在本地安装hadoop,但是需要winutils.exe、hadoop.dll等文件,前提是你已经安装了eclipse、maven、jdk等软件
spark支持jdk版本建议是1.8及以上,如果开发spark建议将jdk编译版本设置为1.8
我选择的spark是spark-1.4.0-bin-hadoop2.6.tgz,故以该版本为例
第一步:下载spark-1.4.0-bin-hadoop2.6.tgz到本地,并解压在本地目录
㈦ spark编译在linux怎么使用
在windows下安装软件大家都觉得很容易,只要双击setup或是install的图标,然后跟着向导一步一步的按提示做就可以了,但是在linux下安装软件就不像windows下那样容易了,有时你找到的是没有编译过的软件源码,那就更加的麻烦了,这里就介绍一下如...
㈧ spark独立模式还需要编译吗
spark有三种集群部署方式:
1、独立部署模式standalone,spark自身有一套完整的资源管理方式
2、架构于hadoop之上的spark集群
3、架构于mesos之上的spark集群
尝试了下搭建第一种独立部署模式集群,将安装方式记录如下:
环境ubuntu 12.04 (两台),部署方式是和hadoop类似,先在一台机器上部署成功后直接将文件打包拷贝到其他机器上,这里假设现在A机器上部署,并且A为master,最后B为slave
A和B均上创建用户spark
sudo useradd spark
以后spark的目录在集群所有机器的/home/spark/spark下(第一个spark是用户名,第二个spark是spark文件目录名)
保证A能无密码登陆到B上的spark用户,在ssh里面设置
这部分是现在master机器(A)上配置
0 首先保证A能无密码方式ssh至localhost和B ,具体方式参见: 点击打开链接
0.1 在A机器上执行
ssh-keygen -t rsa
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
ssh localhost
那么A可以实现无密码登陆localhost
0.2 在B机器上执行
ps -e|grep ssh
如果出现:
695 ? 00:00:00 sshd
1754 ? 00:00:00 ssh-agent
若没有sshd那么在B上执行
sudo apt-get install openssh-server
在B上安装ssh服务端(ubuntu有可能默认只有agent端)
0.3 在B上执行:
ssh-keygen -t rsa
scp spark@A:~/.ssh/authorized_keys ~/.ssh
第一句是为了保证在B上有.ssh目录
第二句是将A的公钥拷贝到B上,从而实现A无密码访问B
0.4 在A上执行gedit ~/.ssh/config添加
user spark
这里是为了A以默认用户spark无密码登陆B,其实这一步没有必要,因为A和B机器上都是在spark用户下操作的,那么机器A的saprk执行ssh B也是以spark用户登陆的
1 每台机器确保有java ,一个简单的方式:
sudo apt-get install eclipse
2 需要maven编译spark源码 ,下载maven 点击打开链接 ,随便下载一个版本
简单的方式:
sudo apt-get install maven
复杂的方式:
wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.2.2/binaries/apache-maven-3.2.2-bin.tar.gz
tar -zxvf apache-maven-3.2.2-bin.tar.gz
mv apache-maven-3.2.2-bin.tar.gz maven
sudo mv maven /usr/local
然后gedit /etc/profile末尾添加如下:
#set maven environment
M2_HOME=/usr/local/maven
export MAVEN_OPTS="-Xms256m -Xmx512m"
export PATH=$M2_HOME/bin:$PATH
验证maven安装成功:
source /etc/profile
mvn -v
出现类似语句:Apache Maven 3.2.2 (; 2014-06-17T21:51:42+08:00)
3 下载spark, 点击打开链接 ,注意不要下载带有hadoop之类字样的版本,而是source package比如spark-1.0.0.tgz
tar -zxvf spark-1.0.0.tgz
mv spark-1.0.0 spark
cd spark
sh make-distribution.sh
最后一步会
编译spark源码
,过程可能有点长,取决于网络和机器配置,我的用了19min,编译成功类似如下图(图来自网上):
4 配置spark
4.1 gedit ./conf/spark-env.sh在spark-env.sh末尾添加如下:
export SPARK_MASTER_IP=A
export SPARK_WORKER_CORES=1
export SPARK_WORKER_INSTANCES=1
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_MEMORY=1g
export MASTER=spark://${SPARK_MASTER_IP}:${SPARK_MASTER_PORT}
注意这里的SPARK_MASTER_IP我觉得还是设置为master机器的IP地址比较好,这里我假设master的hostname是A
SPARK_WORKER_INSTANCES表示slave机器的数目,这里只有B一台故设为1
4.2 gedit ./conf/slaves添加B的hostname,这里B机器的hostname假设就为B故在文件中追加一个B即可。文件里原来有一个localhost如果你想要master同时也为worker机器那么可保留该行,否则可以删除
5 验证master机器A能否单机启动spark