传统的方式用的是spark+RDD
新的方式是用DataFrame做新的案例,python与spark相结合,做分析范式已经普及开来了
架构详解:
最底层的是数据的导入,导入之前是各种形态的,一类是orcale,mysql...,另一类是csv,txt...
SQOOP是导入结构化数据的,FLUME,KAFKA是导入流式数据的
数据导入后,紧接着就是存储,目前存储有三个模块,HDFS是基于文件方式进行存储的,HBase是基于键值对的方式进行存储的,KUDU落地的并不多
基于HDFS,可以拿什么方法进行数据的访问呢,传统的是MR,后期有HIVE,HIVE实际上就是把MR通过SQL转换了下,HIVE就是负责把我们写的SQL转换为MR,然后再去执行HDFS,所以说HIVE本身并没有存储功能,其实就是个转码器。
现在spark发展起来了,可以用spark去进行操作 ,可以把spark看作是Hive的替代产品,以上说的都是批处理的,流处理可以用spark streaming。也可以达到毫秒级别的,实际上是微批处理。
建模这块主要用的spark比较多了 spark是建模中的利器,通过把HDFS数据或外部数据导入到spark,可以享用内存级的运算速度,尤其是RDD在设计上满足多次迭代的分析需求的。
RDD分布式处理环境,与HDFS形成对应,一个在内存里,一个是在硬盘上的,下图是spark的一个架构
RDD:弹性分布式数据集,只读的,可分区的分布式数据集,这个数据集存放在内存或缓存中,可在计算中重复读取。
RDD有5个特点:
1、RDD是Spark提供的核心抽象,全称为Resillient Distributed Dataset,即弹性分布式数据集。
2、RDD在抽象上来说是一种元素集合,包含了数据。它是被分区的,分为多个分区,每个分区分布在集群中的不同节点上,从而让RDD中的数据可以被并行操作。(分布式数据集)
3、RDD通常通过Hadoop上的文件,即HDFS文件或者Hive表,来进行创建;有时也可以通过应用程序中的集合来创建。
4、RDD最重要的特性就是,提供了容错性,可以自动从节点失败中恢复过来。即如果某个节点上的RDD partition,因为节点故障,导致数据丢了,那么RDD会自动通过自己的数据来源重新计算该partition。这一切对使用者是透明的。
5、RDD的数据默认情况下存放在内存中的,但是在内存资源不足时,Spark会自动将RDD数据写入磁盘。(弹性)
RDD的转换和行动API