学习之前没搞清楚的知识
1.
传统的web应用(LAMP、JavaEE、NODE系等)与大数据什么关系?
2.
之前一直以为大数据的东西就是来取代传统的Web应用的,其实并不是这样;即使是大数据的架构,应用层依然会是传统的web应用,但是会根据数据特点对数据存储(结构化数据依然会保存在传统的关系型数据库——如MySql,日志等非结构数据会保存在分布式文件系统——如Hadoop的HDFS)。
3.
大数据的东西不是取代传统的web应用,而是对web应用的增强。基于分布式存储和分布式计算,以前单机或者小规模集群无法解决的问题,使用了大数据技术之后就可以解决了,比如日志等数据当数据量非常大的时候(TB甚至PB),对这些数据的分析在传统架构上是不可能或者是非常慢的,使用了大数据技术之后就是可能的了——主要是将数据处理通过MapReduce等拆分到不同的节点(电脑)上执行,然后将节点上的结果合并,最后生成分析结果。
4.
5.
云计算和大数据
6.
这个话题在林子雨老师的教程——“第一讲 大数据概述”里介绍的非常好,感兴趣的朋友可以自己去看看,这里概括总结为:“云计算为大数据提供了技术基础,大数据为云计算提供了用物之地”。
7.
现在几乎所有的公司都把自己的产品吹成“云”...但是真的都是“云”么?其实很多都是传统的web应用部署到阿里云这些第三方云平台吧;还有一部分有自己服务器(一般配置),然后搞个公网ip,部署上去也说自己是“云”。
8.
Hadoop结构(更新)
参照厦门大学林子雨-大数据技术原理与应用-教材配套讲课视频-第2讲-大数据处理架构Hadoop
这部分内容请观看林子雨老师的视频,讲得比较透彻。下面的内容是在看视频之前(那会儿只看了林子雨老师的教材和博客,如林子雨老师在视频中说得,教材上的内容都是基于Hadoop1.0的,在视频中已经更新到了2.0)写的,作为一些参考吧。
学习历程
1. 了解Hadoop生态系统,了解一下生态系统中各模块的作用,文章后面对各模块有一些简单的总结
1. HDFS
2. YARN
3. HBase
4. MapReduce
5. Hive
6. Pig
7. Mahout
8. Zookeeper
9. Sqoop
10. Flume
11. Kafka等
1.
了解Spark,了解Spark比MapReduce的优势,学习RDD编程
2.
1. Spark SQL
2. Spark Streaming
3. Spark Mlib
4. ...
3.
找两台电脑搭个Hadoop、Spark集群,配置Spark开发环境(SBT),运行一些demo例程,典型如WordCount
4.
5.
研究一下MapReduce的WordCount和Spark的WorkCount的代码,通过对比加深理解
6.
7.
参考如下案例,了解大数据应用,熟悉HBase,Hive,Sqoop等
8.
1. 网站用户行为分析
3. Spark课程实验案例:Spark+Kafka构建实时分析Dashboard
整理一些知识(来自厦门大学林子雨老师)
HBase
HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,是谷歌BigTable的开源实现,主要用来存储非结构化和半结构化的松散数据。HBase的目标是处理非常庞大的表,可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和数百万列元素组成的数据表
HBase可以直接使用本地文件系统或者Hadoop作为数据存储方式,不过为了提高数据可靠性和系统的健壮性,发挥HBase处理大数据量等功能,需要使用Hadoop作为文件系统。与Hadoop一样,HBase目标主要依靠横向扩展,通过不断增加廉价的商用服务器来增加计算和存储能力。
HIVE
Hive是一个构建于Hadoop顶层的数据仓库工具,由Facebook公司开发,并在2008年8月开源。Hive在某种程度上可以看作是用户编程接口,其本身并不存储和处理数据,而是依赖HDFS来存储数据,依赖MapReduce来处理数据。Hive定义了简单的类似SQL的查询语言——HiveQL,它与大部分SQL语法兼容,但是,并不完全支持SQL标准,比如,HiveSQL不支持更新操作,也不支持索引和事务,它的子查询和连接操作也存在很多局限。
HiveQL语句可以快速实现简单的MapReduce任务,这样用户通过编写的HiveQL语句就可以运行MapReduce任务,不必编写复杂的MapReduce应用程序。对于Java开发工程师而言,就不必花费大量精力在记忆常见的数据运算与底层的MapReduce Java API的对应关系上;对于DBA来说,可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到Hadoop平台上。所以说,Hive是一个可以有效、合理、直观地组织和使用数据的分析工具。
Impala
Hive 作为现有比较流行的数据仓库分析工具之一,得到了广泛的应用,但是由于Hive采用MapReduce 来完成批量数据处理,因此,实时性不好,查询延迟较高。Impala 作为新一代开源大数据分析引擎,支持实时计算,它提供了与Hive 类似的功能,并在性能上比Hive高出3~30 倍。Impala 发展势头迅猛,甚至有可能会超过Hive 的使用率而成为Hadoop 上最流行的实时计算平台。
Hive 与Impala 的不同点总结如下:
· 第一,Hive 比较适合进行长时间的批处理查询分析,而Impala 适合进行实时交互式SQL 查询。
· 第二,Hive 依赖于MapReduce 计算框架,执行计划组合成管道型的MapReduce 任务模式进行执行,而Impala 则把执行计划表现为一棵完整的执行计划树,可以更自然地分发执行计划到各个Impalad执行查询。
· 第三,Hive在执行过程中,如果内存放不下所有数据,则会使用外存,以保证查询能顺序执行完成,而Impala在遇到内存放不下数据时,不会利用外存,所以,Impala目前处理查询时会受到一定的限制。
Hive与Impala的相同点总结如下:
· 第一,Hive与Impala使用相同的存储数据池,都支持把数据存储于HDFS和HBase中,其中,HDFS支持存储TEXT、RCFILE、PARQUET、AVRO、ETC等格式的数据,HBase存储表中记录。
· 第二,Hive与Impala使用相同的元数据。
· 第三,Hive与Impala中对SQL的解释处理比较相似,都是通过词法分析生成执行计划。
总的来说,Impala的目的不在于替换现有的MapReduce工具,把Hive与Impala配合使用效果最佳,可以先使用Hive进行数据转换处理,之后再使用Impala在Hive处理后的结果数据集上进行快速的数据分析。
PIG
Pig 是Hadoop 生态系统的一个组件,提供了类似SQL 的Pig Latin 语言(包含Filter、GroupBy、Join、OrderBy 等操作,同时也支持用户自定义函数),允许用户通过编写简单的脚本来实现复杂的数据分析,而不需要编写复杂的MapReduce 应用程序,Pig 会自动把用户编写的脚本转换成MapReduce 作业在Hadoop 集群上运行,而且具备对生成的MapReduce程序进行自动优化的功能,所以,用户在编写Pig 程序的时候,不需要关心程序的运行效率,这就大大减少了用户编程时间。因此,通过配合使用Pig 和Hadoop,在处理海量数据时就可以实现事半功倍的效果,比使用Java、C++等语言编写MapReduce 程序的难度要小很多,并且用更少的代码量实现了相同的数据处理分析功能。Pig 可以加载数据、表达转换数据以及存储最终结果,因此,在企业实际应用中,Pig通常用于ETL(Extraction、Transformation、Loading)过程,即来自各个不同数据源的数据被收集过来以后,采用Pig 进行统一加工处理,然后加载到数据仓库Hive 中,由Hive 实现对海量数据的分析。需要特别指出的是,每种数据分析工具都有一定的局限性,Pig 的设计和MapReduce 一样,都是面向批处理的,因此,Pig 并不适合所有的数据处理任务,特别是当需要查询大数据集中的一小部分数据时,Pig 仍然需要对整个或绝大部分数据集进行扫描,因此,实现性能不会很好。
Tez
Tez 是Apache 开源的支持DAG 作业的计算框架,通过DAG 作业的方式运行MapReduce 作业,提供了程序运行的整体处理逻辑,就可以去除工作流当中多余的Map 阶段,减少不必要的操作,提升数据处理的性能。Hortonworks把Tez 应用到数据仓库Hive 的优化中,使得性能提升了约100 倍。如图15-13 所示,可以让Tez 框架运行在YARN 框架之上,然后让MapReduce、Pig 和Hive 等计算框架运行在Tez框架之上,从而借助于Tez 框架实现对MapReduce、Pig 和Hive 等的性能优化,更好地解决现有MapReduce 框架在迭代计算(如PageRank 计算)和交互式计算方面存在的问题。
Tez在解决Hive、Pig延迟大、性能低等问题的思路,是和那些支持实时交互式查询分析的产品(如Impala、Dremel和Drill等)是不同的。Impala、Dremel和Drill的解决问题思路是抛弃MapReduce计算框架,不再将类似SQL语句的HiveQL或者Pig语句翻译成MapReduce程序,而是采用与商用并行关系数据库类似的分布式查询引擎,可以直接从HDFS或者HBase中用SQL语句查询数据,而不需要把SQL语句转化成MapReduce任务来执行,从而大大降低了延迟,很好地满足了实时查询的要求。但是,Tez则不同,比如,针对Hive数据仓库进行优化的“Tez+Hive”解决方案,仍采用MapReduce计算框架,但是对DAG的作业依赖关系进行了裁剪,并将多个小作业合并成一个大作业,这样,不仅计算量减少了,而且写HDFS次数也会大大减少。
Kafka
Kafka是由LinkedIn公司开发的一种高吞吐量的分布式发布订阅消息系统,用户通过Kafka系统可以发布大量的消息,同时也能实时订阅消费消息。
在大数据时代涌现的新的日志收集处理系统(Flume、Scribe等)往往更擅长批量离线处理,而不能较好地支持实时在线处理。相对而言,Kafka可以同时满足在线实时处理和批量离线处理。
Kafka设计的初衷是构建一个可以处理海量日志、用户行为和网站运营统计等的数据处理框架
最近几年,Kafka在大数据生态系统中开始扮演越来越重要的作用,在Uber、Twitter、Netflix、LinkedIn、Yahoo、Cisco、Goldman Sachs等公司得到了大量的应用。目前,在很多公司的大数据平台中,Kafka通常扮演数据交换枢纽的角色。
在公司的大数据生态系统中,可以把Kafka作为数据交换枢纽,不同类型的分布式系统(关系数据库、NoSQL数据库、流处理系统、批处理系统等),可以统一接入到Kafka,实现和Hadoop各个组件之间的不同类型数据的实时高效交换,较好地满足各种企业应用需求。
Sqoop
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。