首先搞清楚几个概念

Hadoop:Hadoop是一个由Apache基金会所开发的分布式系统基础架构。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。

HDFS:Hadoop分布式文件系统(HDFS),它被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。【用来储存】

MapReduce:MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

Spark:拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。跟spark并行的概念是MapReduce,两个都属于Hadoop的一个组成部分,MapReduce算是第一代,spark算是第二代。

RDD:弹性分布式数据集。spark的核心三理念之一(另外两个是转化和行动)。

从spark取出的任何的一条数据就是RDD,这是一个抽象的概念。

DataFrame:为了更好的查询,将RDD转化为DataFrame结构(实化)。

#只通过转化为DataFrame进行查询
/只查询name
//personDF.select("name").show()

//filter
//personDF.filter(personDF.col("id")>2).show()


#通过SQL进行查询
//用sparkSQL的方式来查询数据
personDF.createTempView("person")
spark.sql("show tables").show()

spark.sql("select * from person").show()

总之,在什么时候该选用RDD、DataFrame或Dataset看起来好像挺明显。前者可以提供底层的功能和控制,后者支持定制的视图和结构,可以提供高级和特定领域的操作,节约空间并快速运行。

 

Shark:shark 将SQL查询结果,直接转换成RDD传给spark。SparkSQL的前身是Shark,给熟悉RDBMS但又不理解MapReduce的技术人员提供快速上手的工具,hive应运而生,它是当时唯一运行在Hadoop上的SQL-on-hadoop工具。但是MapReduce计算过程中大量的中间磁盘落地过程消耗了大量的I/O,降低的运行效率,为了提高SQL-on-Hadoop的效率,Shark应运而生,但又因为Shark对于Hive的太多依赖(如采用Hive的语法解析器、查询优化器等等),2014年spark团队停止对Shark的开发,将所有资源放SparkSQL项目上。

注:Spark SQL的前身是Shark,而Shark的前身是HIVE.

Hive on Spark:hive在spark上的运用。Hive on Spark是由Cloudera发起,由Intel、MapR等公司共同参与的开源项目,其目的是把Spark作为Hive的一个计算引擎,将Hive的查询作为Spark的任务提交到Spark集群上进行计算。

Hive on Spark是从Hive on MapReduce演进而来,Hive的整体解决方案很不错,但是从查询提交到结果返回需要相当长的时间,查询耗时太长,这个主要原因就是由于Hive原生是基于MapReduce的,那么如果我们不生成MapReduce Job,而是生成Spark Job,就可以充分利用Spark的快速执行能力来缩短HiveQL的响应时间。

Spark SQL :比Shark支持更过的查询表达式。摆脱Hive的限制,SSQL的性能也很优秀。Spark项目本身主推的SQL实现。Hive On Spark比SparkSQL稍晚。

注:需要理解的是,Hive和SparkSQL都不负责计算,它们只是告诉Spark,你需要这样算那样算,但是本身并不直接参与计算。

简述Hfbs和mapreduce在hadoop的作用 mapreduce和hadoop的概念分别是什么_spark

 

在了解这些的基础之上,再来看Hadoop和spark的区别:

1、目的:首先需要明确一点,hadoophe spark 这二者都是大数据框架,即便如此二者各自存在的目的是不同的。Hadoop是一个分布式的数据基础设施,它是将庞大的数据集分派到由若干台计算机组成的集群中的多个节点进行存储。Spark是一个专门用来对那些分布式存储的大数据进行处理的工具,spark本身并不会进行分布式数据的存储。

2、两者的部署:Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。所以使用Hadoop则可以抛开spark,而直接使用Hadoop自身的mapreduce完成数据的处理。Spark是不提供文件管理系统的,但也不是只能依附在Hadoop上,它同样可以选择其他的基于云的数据系统平台,但spark默认的一般选择的还是hadoop。

3、数据处理速度:Spark,拥有Hadoop、 MapReduce所具有能更好地适用于数据挖掘与机器学习等需要迭代的的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,

Spark 是一种与hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。

4、数据安全恢复:Hadoop每次处理的后的数据是写入到磁盘上,所以其天生就能很有弹性的对系统错误进行处理;spark的数据对象存储在分布于数据集群中的叫做弹性分布式数据集中,这些数据对象既可以放在内存,也可以放在磁盘,所以spark同样可以完成数据的安全恢复。

 

impala和hive

impala:实时数据查询;

hive:批数据处理分析。

区别

hive代码编译器,需要经过底层的Mapreduce;impala属于自己自带可以接触到HDFS的数据,进行io读取,所以速度会快一些。

联系

impala需要依赖hive的metadata(元数据)

hive的数据分为两部分,一部分是真实的数据文件,存放在hdfs上,另一份是真实数据的元数据(即数据的描述信息,比如说存储位置、时间、大小之类的),一般存放在mysql中。

Hive自己维护了一套元数据,用户通过HQL查询时候,Hive首先需要结合元数据,将HQL翻译成MapReduce去执行。由于HDFS支持的文件格式很多,而建Hive表时候也可以指定各种文件格式,Hive在将HQL解析成MapReduce时候,需要知道去哪里,使用哪种格式去读写HDFS文件,而这些信息就保存在这几张表中。()

 

HDFS单点故障:

因为MapReduce和HDFS设计的原因,即MR的JobTracker和HDFS的NameNode两个核心服务均存在单点问题。

所有的进程都会存在NameNode,一旦NameNode产生故障,会影响到后面的进程。