hadoop和Spark是两种不同的大数据生态系统,Hadoop框架比较侧重离线大批量计算,而spark框架则侧重于内存和实时计算。
在这些基础上,衍生出了一些常用的附属组件,比如Hadoop生态下的HBASE、hive、HDFS等,HDFS可用于数据存储,MR可用于分布式计算框架。同样,在spark的基础上也衍生出了很多组件,比如spark streaming、spark SQL、mllib等。其中spark score完全可以代替MR,spark中不仅可以有reduce操作,同时也提供了其他诸如filter sortby等操作,要比MR方便很多,同时,spark SQL可以直接把hive上的文件映射成一张表,来进行表操作。
各自的组件都非常丰富,往往也不容易学。
Hadoop
大数据是一个概念,hadoop是来实现这个概念的工具、技术,它们之间并没有绝对的联系。Hadoop作为一代分布式系统的基础,特别是第二代Hadoop YARN推出以后,这个位置更加牢固。目前在市面上并没有可以与之相匹敌的系统存在。
具体的学习
1.编程基础,比如Java,C,python,linux,有这些基础学起来就会很快上手。
2.详细研究,现在大型网站包括Sina,腾讯网(门户),Weibo(微博),天猫,京东(电商)的架构与实现,先从自己的角度去理解,然后去跟实际情况做比对,提升自己对数据和技术的敏感程度。
3.熟悉并理解,目前阿里,腾讯,百度内部的系统或多或少都是借鉴于Hadoop的。运用Hadoop对于你以后在大型计算机公司任职非常重要。
4.理解分布式系统设计中的原则以及方法,例如负载均衡,故障恢复,并发程序设计,并发数据结构,等等。理解这些设计原理,并走入底层读懂每一行Hadoop的源码更加的重要。
Spark
Spark只是分布式计算平台,而hadoop已经是分布式计算、存储、管理的生态系统。与Spark相对应的是Hadoop MapReduce。
Spark相对于Hadoop的优势,分布式计算仅仅是hadoop的一部分。从内容上来说,还是有些对比:
1、更快
2、更加容易使用
配置起来超级方便。除支持JAVA外,支持scala、python、R。特别是scala,简直是太适合写数据分析的程序了,mapreduce用JAVA实在是太蛋疼了。而且RDD自带的函数
3、巨好用的库能解决90%问题的四大组件,无论是SQL、还是流数据处理、机器学习库、图计算,相当好用。当然,hadoop相关的库也不少,不过spark是原生包含,用起来方便点。 4、运行方便
Spark是可以脱离hadoop运行的,比如数据可以从数据库或者本地文件里面抽取。不过毕竟大数据时代,大家都习惯于将Spark和hadoop通过mesos或者yarn结合起来用;主要用Hadoop的HDFS,当然HBASE或者HIVE这种HDFS之上的组件,Spark也支持。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
ull base=131;
ull a[10010];
char s[1010];
ull Hash(char *s)
{
int len=strlen(s);
ull ans=0;
for(int i=0;i<len;i++)
ans=ans*base+(ull)s[i];
return ans;
}
int main()
{
/*srand(NULL);
freopen("data.in","r",stdin);
freopen("data.out","w"www.yongshiyule178.com,stdout);*/
/*printf("1000\n");
for(int i=1;i<=1000;i++)
{
int len=rand()%1000+1;
for(int i=0;i<len;i++)
{
int t=rand()%3;
if(t==0)
s[i]='0'+rand()%10;
else if(t==1)
s[i]='A'+rand(www.taohuayuan178.com)%26;
else
s[www.bomaoyule.cn]='a'+rand()%26;
}
s[len]='\0';
cout<<s<<endl;
}*/
int N,i=1,ans=1;
scanf("%d",&N);
for(int i=1;i<=N;i++)
{
scanf("%s",&s);
a[i]=Hash(s);
}
sort(a+1,a+1+N);
for(int i=2;i<=N;i++)
{
if(a[i]!=a[www.chaoyueyule.com/ i-1])
ans++;
}
printf("%d\n"www.boshenyl.cn,ans);
}
具体的学习:
1、熟悉如何去写spark的程序;
2、实践到一定程度之后,逐渐的通过spark运行日志对spark的运行机制和原理有了解。
看架构、源码。试试看一些解读源码的图书, Spark的相关知识就已经开始沉淀了。
3、了解spark的各个调度器如何实现,之前总是出现在眼睛里的那个宽依赖窄依赖、和stage的切分,task首选位置的确定等。随着不断深入,尝试看底层的block如何读如何写,之间如何协调通讯等等。大数据学习资料分享群119599574 不管你是小白还是大牛,小编我都挺欢迎,今天的源码已经上传到群文件,不定期分享干货,包括我自己整理的一份最新的适合2018年学习的大数据开发和零基础入门教程,欢迎初学和进阶中的小伙伴。