① spark和hadoop的区别
hadoop:是分布式存储系统,同时提供分布式计算环境,存储称为hdfs,计算称为maprece 简称MR。
spark:是一个分布式计算框架,类似于hadoop的运算环境,但是比maprece提供了更多支持,与其他系统的对接,一些高级算法等,可以独立运行,也可以使用hdfs上的数据,调度任务也可以基于hadoop的yarn来管理。由于整个计算都可以在内存中完成,所以速度自然比传统的MR计算的快。除此之外spark运行时占用的系统资源也比MR小得多,相比较属于轻量级运行。最核心的也是它提供的分析学习算法,这个大部分分布式架构不具有的。
一般spark下的编程多数基于scala来完成,而非java,所以想学习spark一定要学习scala语言
② spark与hadoop相比,存在哪些缺陷
稳定性方面,由于代码质量问题,Spark长时间运行会经常出错,在架构方面,由于大量数据被缓存在RAM中,Java回收垃圾缓慢的情况严重,导致Spark性能不稳定,在复杂场景中SQL的性能甚至不如现有的Map/Rece。
不能处理大数据,单独机器处理数据过大,或者由于数据出现问题导致中间结果超过RAM的大小时,常常出现RAM空间不足或无法得出结果。然而,Map/Rece运算框架可以处理大数据,在这方面,Spark不如Map/Rece运算框架有效。
不能支持复杂的SQL统计;目前Spark支持的SQL语法完整程度还不能应用在复杂数据分析中。在可管理性方面,SparkYARN的结合不完善,这就为使用过程中埋下隐忧,容易出现各种难题。
③ java spark获取gz文件时怎样分区
spark 读取HDFS文件,首先会判断文件是否可分,可切分即可分成多个partition,不可切分则整个文件为一个partition ,gz等压缩文件属于不可切分文件,所以设置分区无效,如果想要可变分区,需要对文件加索引支持可切分
④ 怎样使用java开发spark程序
1、Spark 是基于内存的分布式计算框架,因为无需利用 HDFS 作为中间结果保存的介质,性能杠杠的。Spark 是由 Scala 实现的,所以最好学习一下 Scala(当然用 Python 和 Java 也是可以的)。(http://wdxtub.com/2016/04/11/spark-guide/)
为啥要用 Spark?
快!基于内存
易用!Scala, Java, Python 都支持,还有交互式的 Python 和 Scala 的 shell,可以快速进行原型开发
通用!批处理、交互查询、流处理、机器学习、图计算,样样精通
兼容!可以使用各种现有的技术作为底层,也可以自己独立运行
Spark 生态系统有哪些组件?
Spark SQL: 类似 Hive,支持在不同 RDD 上进行类似 SQL 的操作
Spark Streaming: 对于流数据进行处理
MLlib: 机器学习库
GraphX: 图并行框架
RDD 是什么?
在 Spark 框架中,最重要的是一类新的数据抽象,叫做 Resilient Distributed Dataset - RDD。RDD 是分布式存储在集群中的内存对象,按照值的范围或者哈希结果进行划分。与此同时 RDD 会记录关于数据进行的各种操作(每次操作都会生成新的 RDD),这样即使节点挂掉,也能够根据之前的操作日志重新得到损失的 RDD
RDD 支持2种操作:
转换(transformation):从现有的数据集创建一个新的数据集
动作(actions):在数据集上运行计算后,返回一个值给驱动程序
2、实战java开发spark程序
https://my.oschina.net/csmw00/blog/672869
3、spark集群环境搭建
http://nekomiao.me/2016/12/05/spark-install-distributed/
⑤ 刚学习spark,想上传文件给hdfs,是不是需要hadoop然后java编程这样是用eclip
spark会把hdfs当做一个数据源来处理, 所以数据存储都要做, 之后编程是从Hadoop改成spark就可以了. 是否用eclipse无所谓, 只要能编译运行就可以
⑥ 如何将java代码在spark运行
我们首先提出这样一个简单的需求:
现在要分析某网站的访问日志信息,统计来自不同IP的用户访问的次数,从而通过Geo信息来获得来访用户所在国家地区分布状况。这里我拿我网站的日志记录行示例,如下所示:
1
121.205.198.92
- - [21/Feb/2014:00:00:07 +0800] "GET /archives/417.html HTTP/1.1" 200 11465 "http://shiyanjun.cn/archives/417.html/" "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0"
2
121.205.198.92
- - [21/Feb/2014:00:00:11 +0800] "POST /wp-comments-post.php HTTP/1.1" 302 26 "http://shiyanjun.cn/archives/417.html/" "Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"
3
121.205.198.92
- - [21/Feb/2014:00:00:12 +0800] "GET /archives/417.html/ HTTP/1.1" 301 26 "http://shiyanjun.cn/archives/417.html/" "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0"
4
121.205.198.92
- - [21/Feb/2014:00:00:12 +0800] "GET /archives/417.html HTTP/1.1" 200 11465 "http://shiyanjun.cn/archives/417.html" "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0"
5
121.205.241.229
- - [21/Feb/2014:00:00:13 +0800] "GET /archives/526.html HTTP/1.1" 200 12080 "http://shiyanjun.cn/archives/526.html/" "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0"
6
121.205.241.229
- - [21/Feb/2014:00:00:15 +0800] "POST /wp-comments-post.php HTTP/1.1" 302 26 "http://shiyanjun.cn/archives/526.html/" "Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"
Java实现Spark应用程序(Application)
我们实现的统计分析程序,有如下几个功能点:
从HDFS读取日志数据文件
将每行的第一个字段(IP地址)抽取出来
统计每个IP地址出现的次数
根据每个IP地址出现的次数进行一个降序排序
根据IP地址,调用GeoIP库获取IP所属国家
打印输出结果,每行的格式:[国家代码] IP地址 频率
下面,看我们使用Java实现的统计分析应用程序代码,如下所示:
001
package org.shirdrn.spark.job;
002
003
import java.io.File;
004
import java.io.IOException;
005
import java.util.Arrays;
006
import java.util.Collections;
007
import java.util.Comparator;
008
import java.util.List;
009
import java.util.regex.Pattern;
010
011
import org.apache.commons.logging.Log;
012
import org.apache.commons.logging.LogFactory;
013
import org.apache.spark.api.java.JavaPairRDD;
014
import org.apache.spark.api.java.JavaRDD;
015
import org.apache.spark.api.java.JavaSparkContext;
016
import org.apache.spark.api.java.function.FlatMapFunction;
017
import org.apache.spark.api.java.function.Function2;
018
import org.apache.spark.api.java.function.PairFunction;
019
import org.shirdrn.spark.job.maxmind.Country;
020
import org.shirdrn.spark.job.maxmind.LookupService;
021
022
import scala.Serializable;
023
import scala.Tuple2;
024
025
public class IPAddressStats implements Serializable
{
026
027
private static final long serialVersionUID
= 8533489548835413763L;
028
private static final Log
LOG = LogFactory.getLog(IPAddressStats.class);
029
private static final Pattern
SPACE = Pattern.compile("
");
030
private transient LookupService
lookupService;
031
private transient final String
geoIPFile;
032
033
public IPAddressStats(String
geoIPFile) {
034
this.geoIPFile
= geoIPFile;
035
try {
036
//
lookupService: get country code from a IP address
037
File
file = new File(this.geoIPFile);
038
LOG.info("GeoIP
file: " +
file.getAbsolutePath());
039
lookupService
= new AdvancedLookupService(file,
LookupService.GEOIP_MEMORY_CACHE);
040
} catch (IOException
e) {
041
throw new RuntimeException(e);
042
}
043
}
044
045
@SuppressWarnings("serial")
046
public void stat(String[]
args) {
047
JavaSparkContext
ctx = new JavaSparkContext(args[0], "IPAddressStats",
048
System.getenv("SPARK_HOME"),
JavaSparkContext.jarOfClass(IPAddressStats.class));
049
JavaRDD<String>
lines = ctx.textFile(args[1], 1);
050
051
//
splits and extracts ip address filed
052
JavaRDD<String>
words = lines.flatMap(new FlatMapFunction<String,
String>() {
053
@Override
054
public Iterable<String>
call(String s) {
055
//
121.205.198.92 - - [21/Feb/2014:00:00:07 +0800] "GET /archives/417.html HTTP/1.1" 200 11465 "http://shiyanjun.cn/archives/417.html/" "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101
Firefox/11.0"
056
//
ip address
057
return Arrays.asList(SPACE.split(s)[0]);
058
}
059
});
060
061
//
map
062
JavaPairRDD<String,
Integer> ones = words.map(new PairFunction<String,
String, Integer>() {
063
@Override
064
public Tuple2<String,
Integer> call(String s) {
065
return new Tuple2<String,
Integer>(s, 1);
066
}
067
});
068
069
//
rece
070
JavaPairRDD<String,
Integer> counts = ones.receByKey(new Function2<Integer,
Integer, Integer>() {
071
@Override
072
public Integer
call(Integer i1, Integer i2) {
073
return i1
+ i2;
074
}
075
});
076
077
List<Tuple2<String,
Integer>> output = counts.collect();
078
079
//
sort statistics result by value
080
Collections.sort(output, new Comparator<Tuple2<String,
Integer>>() {
081
@Override
082
public int compare(Tuple2<String,
Integer> t1, Tuple2<String, Integer> t2) {
083
if(t1._2
< t2._2) {
084
return 1;
085
} else if(t1._2
> t2._2) {
086
return -1;
087
}
088
return 0;
089
}
090
});
091
092
writeTo(args,
output);
093
094
}
095
096
private void writeTo(String[]
args, List<Tuple2<String, Integer>> output) {
097
for (Tuple2<?,
?> tuple : output) {
098
Country
country = lookupService.getCountry((String) tuple._1);
099
LOG.info("[" +
country.getCode() + "]
" +
tuple._1 + "\t" +
tuple._2);
100
}
101
}
102
103
public static void main(String[]
args) {
104
//
./bin/run-my-java-example org.shirdrn.spark.job.IPAddressStatsspark://m1:7077 hdfs://m1:9000/user/shirdrn/wwwlog20140222.log/home/shirdrn/cloud/programs/spark-0.9.0-incubating-bin-hadoop1/java-examples/GeoIP_DATABASE.dat
105
if (args.length
< 3)
{
106
System.err.println("Usage:
IPAddressStats <master> <inFile> <GeoIPFile>");
107
System.err.println("
Example: org.shirdrn.spark.job.IPAddressStatsspark://m1:7077 hdfs://m1:9000/user/shirdrn/wwwlog20140222.log/home/shirdrn/cloud/programs/spark-0.9.0-incubating-bin-hadoop1/java-examples/GeoIP_DATABASE.dat");
108
System.exit(1);
109
}
110
111
String
geoIPFile = args[2];
112
IPAddressStats
stats = new IPAddressStats(geoIPFile);
113
stats.stat(args);
114
115
System.exit(0);
116
117
}
118
119
}
⑦ 科普Spark,Spark是什么,如何使用Spark
科普Spark,Spark是什么,如何使用Spark
1.Spark基于什么算法的分布式计算(很简单)
2.Spark与MapRece不同在什么地方
3.Spark为什么比Hadoop灵活
4.Spark局限是什么
5.什么情况下适合使用Spark
Spark与Hadoop的对比
Spark的中间数据放到内存中,对于迭代运算效率更高。
Spark更适合于迭代运算比较多的ML和DM运算。因为在Spark里面,有RDD的抽象概念。
Spark比Hadoop更通用
Spark提供的数据集操作类型有很多种,不像Hadoop只提供了Map和Rece两种操作。比如map, filter, flatMap, sample, groupByKey, receByKey, union, join, cogroup, mapValues, sort,partionBy等多种操作类型,Spark把这些操作称为Transformations。同时还提供Count, collect, rece, lookup, save等多种actions操作。
这些多种多样的数据集操作类型,给给开发上层应用的用户提供了方便。各个处理节点之间的通信模型不再像Hadoop那样就是唯一的Data Shuffle一种模式。用户可以命名,物化,控制中间结果的存储、分区等。可以说编程模型比Hadoop更灵活。
不过由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合。
容错性
在分布式数据集计算时通过checkpoint来实现容错,而checkpoint有两种方式,一个是checkpoint data,一个是logging the updates。用户可以控制采用哪种方式来实现容错。
可用性
Spark通过提供丰富的Scala, Java,Python API及交互式Shell来提高可用性。
Spark与Hadoop的结合
Spark可以直接对HDFS进行数据的读写,同样支持Spark on YARN。Spark可以与MapRece运行于同集群中,共享存储资源与计算,数据仓库Shark实现上借用Hive,几乎与Hive完全兼容。
Spark的适用场景
Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小(大数据库架构中这是是否考虑使用Spark的重要因素)
由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合。总的来说Spark的适用面比较广泛且比较通用。
运行模式
本地模式
Standalone模式
Mesoes模式
yarn模式
Spark生态系统
Shark ( Hive on Spark): Shark基本上就是在Spark的框架基础上提供和Hive一样的H iveQL命令接口,为了最大程度的保持和Hive的兼容性,Shark使用了Hive的API来实现query Parsing和 Logic Plan generation,最后的PhysicalPlan execution阶段用Spark代替Hadoop MapRece。通过配置Shark参数,Shark可以自动在内存中缓存特定的RDD,实现数据重用,进而加快特定数据集的检索。同时,Shark通过UDF用户自定义函数实现特定的数据分析学习算法,使得SQL数据查询和运算分析能结合在一起,最大化RDD的重复使用。
Spark streaming: 构建在Spark上处理Stream数据的框架,基本的原理是将Stream数据分成小的时间片断(几秒),以类似batch批量处理的方式来处理这小部分数据。Spark Streaming构建在Spark上,一方面是因为Spark的低延迟执行引擎(100ms+)可以用于实时计算,另一方面相比基于Record的其它处理框架(如Storm),RDD数据集更容易做高效的容错处理。此外小批量处理的方式使得它可以同时兼容批量和实时数据处理的逻辑和算法。方便了一些需要历史数据和实时数据联合分析的特定应用场合。
Bagel: Pregel on Spark,可以用Spark进行图计算,这是个非常有用的小项目。Bagel自带了一个例子,实现了Google的PageRank算法。
End.
⑧ Java大数据需要学习哪些内容
首先明确,java大数据通常指的是采用Java语言来完成一些大数据领域的开发任务,整体的学习内容涉及到三大块,其一是Java语言基础,其二是大数据平台基础,其三是场景开发基础。
Java开发包括了Java基础,JavaWeb和JavaEE三大块。java可以说是大数据最基础的编程语言,一是因为大数据的本质无非就是海量数据的计算,查询与存储,后台开发很容易接触到大数据量存取的应用场景。java语言基础部分的学习内容相对比较明确,由于Java语言本身的技术体系已经比较成熟了,所以学习过程也会相对比较顺利。JavaWeb开发不仅涉及到后端开发知识,还涉及到前端开发知识,整体的知识量还是比较大的,而且在学习的过程中,需要完成大量的实验。
大数据开发包括Java基础,MySQL基础,Hadoop(HDFS,MapRece,Yarn,Hive,Hbase,Zookeeper,Flume,Sqoop等),Scala语言(类似于Java,Spark阶段使用),Spark(SparkSQL,SparkStreaming,SparkCore等)。
学习Java大数据一定离不开具体的场景,这里面的场景不仅指硬件场景(数据中心),还需要有行业场景支持,所以学习Java大数据通常都会选择一个行业作为切入点,比如金融行业、医疗行业、教育行业等等。初学者可以考虑在实习岗位上来完成这个阶段的学习任务
总体上来说,Java大数据的学习内容是比较多的,而且也具有一定的难度。