大数据学习 第一篇--基础知识

大数据入门

总结一下近期学习的大数据知识

学习之前没搞清楚的知识

传统的web应用(LAMP、JavaEE、NODE系等)与大数据什么关系?

之前一直以为大数据的东西就是来取代传统的Web应用的,其实并不是这样;即使是大数据的架构,应用层依然会是传统的web应用,但是会根据数据特点对数据存储(结构化数据依然会保存在传统的关系型数据库--如MySql,日志等非结构数据会保存在分布式文件系统--如Hadoop的HDFS)。

大数据的东西不是取代传统的web应用,而是对web应用的增强。基于分布式存储和分布式计算,以前单机或者小规模集群无法解决的问题,使用了大数据技术之后就可以解决了,比如日志等数据当数据量非常大的时候(TB甚至PB),对这些数据的分析在传统架构上是不可能或者是非常慢的,使用了大数据技术之后就是可能的了--主要是将数据处理通过MapReduce等拆分到不同的节点(电脑)上执行,然后将节点上的结果合并,最后生成分析结果。

云计算和大数据

这个话题在林子雨老师的教程--“第一讲 大数据概述”里介绍的非常好,感兴趣的朋友可以自己去看看,这里概括总结为:“云计算为大数据提供了技术基础,大数据为云计算提供了用物之地”。

现在几乎所有的公司都把自己的产品吹成“云”...但是真的都是“云”么?其实很多都是传统的web应用部署到阿里云这些第三方云平台吧;还有一部分有自己服务器(一般配置),然后搞个公网ip,部署上去也说自己是“云”。

Hadoop结构(更新)

参照厦门大学林子雨-大数据技术原理与应用-教材配套讲课视频-第2讲-大数据处理架构Hadoop

这部分内容请观看林子雨老师的视频,讲得比较透彻。下面的内容是在看视频之前(那会儿只看了林子雨老师的教材和博客,如林子雨老师在视频中说得,教材上的内容都是基于Hadoop1.0的,在视频中已经更新到了2.0)写的,作为一些参考吧。

学习历程 了解Hadoop生态系统,了解一下生态系统中各模块的作用,文章后面对各模块有一些简单的总结HDFS YARN HBase MapReduce Hive Pig Mahout Zookeeper Sqoop Flume Kafka等

了解Spark,了解Spark比MapReduce的优势,学习RDD编程

Spark SQL Spark Streaming Spark Mlib ...

找两台电脑搭个Hadoop、Spark集群,配置Spark开发环境(SBT),运行一些demo例程,典型如WordCount

研究一下MapReduce的WordCount和Spark的WorkCount的代码,通过对比加深理解

参考如下案例,了解大数据应用,熟悉HBase,Hive,Sqoop等

网站用户行为分析Spark课程综合实验案例:淘宝双11数据分析与预测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的数据导进到关系型数据库中。

大数据入门,需要学习以下这些知识点:

先附上一张自己总结的学习线路图

1、Java编程技术

Java编程技术是大数据学习的基础,Java是一种强类型语言,拥有极高的跨平台能力,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等,是大数据工程师最喜欢的编程工具,因此,想学好大数据,掌握Java基础是必不可少的。

2、Linux命令

对于大数据开发通常是在Linux环境下进行的,相比Linux操作系统,Windows操作系统是封闭的操作系统,开源的大数据软件很受限制,因此,想从事大数据开发相关工作,还需掌握Linux基础操作命令。

3、Hadoop

Hadoop是大数据开发的重要框架,其核心是HDFS和MapReduce,HDFS为海量的数据提供了存储,MapReduce为海量的数据提供了计算,因此,需要重点掌握,除此之外,还需要掌握Hadoop集群、Hadoop集群管理、YARN以及Hadoop高级管理等相关技术与操作!

4、Hive

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行,十分适合数据仓库的统计分析。对于Hive需掌握其安装、应用及高级操作等。

5、Avro与Protobuf

Avro与Protobuf均是数据序列化系统,可以提供丰富的数据结构类型,十分适合做数据存储,还可进行不同语言之间相互通信的数据交换格式,学习大数据,需掌握其具体用法。

6、ZooKeeper

ZooKeeper是Hadoop和Hbase的重要组件,是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组件服务等,在大数据开发中要掌握ZooKeeper的常用命令及功能的实现方法。

7、HBase

HBase是一个分布式的、面向列的开源数据库,它不同于一般的关系数据库,更适合于非结构化数据存储的数据库,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,大数据开发需掌握HBase基础知识、应用、架构以及高级用法等。

8、phoenix

phoenix是用Java编写的基于JDBC API操作HBase的开源SQL引擎,其具有动态列、散列加载、查询服务器、追踪、事务、用户自定义函数、二级索引、命名空间映射、数据收集、行时间戳列、分页查询、跳跃查询、视图以及多租户的特性,大数据开发需掌握其原理和使用方法。

9、Redis

Redis是一个key-value存储系统,其出现很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用,它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便,大数据开发需掌握Redis的安装、配置及相关使用方法。

10、Flume

Flume是一款高可用、高可靠、分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。大数据开发需掌握其安装、配置以及相关使用方法。

11、SSM

SSM框架是由Spring、SpringMVC、MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架。大数据开发需分别掌握Spring、SpringMVC、MyBatis三种框架的同时,再使用SSM进行整合操作。

12、Kafka

Kafka是一种高吞吐量的分布式发布订阅消息系统,其在大数据开发应用上的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。大数据开发需掌握Kafka架构原理及各组件的作用和使用方法及相关功能的实现。

13、Scala

Scala是一门多范式的编程语言,大数据开发重要框架Spark是采用Scala语言设计的,想要学好Spark框架,拥有Scala基础是必不可少的,因此,大数据开发需掌握Scala编程基础知识!

14、Spark

Spark是专为大规模数据处理而设计的快速通用的计算引擎,其提供了一个全面、统一的框架用于管理各种不同性质的数据集和数据源的大数据处理的需求,大数据开发需掌握Spark基础、SparkJob、Spark RDD、spark job部署与资源分配、Spark shuffle、Spark内存管理、Spark广播变量、Spark SQL、Spark Streaming以及Spark ML等相关知识。

15、Azkaban

Azkaban是一个批量工作流任务调度器,可用于在一个工作流内以一个特定的顺序运行一组工作和流程,可以利用Azkaban来完成大数据的任务调度,大数据开发需掌握Azkaban的相关配置及语法规则。

16、Python与数据分析

Python是面向对象的编程语言,拥有丰富的库,使用简单,应用广泛,在大数据领域也有所应用,主要可用于数据采集、数据分析以及数据可视化等,因此,大数据开发需学习一定的Python知识。

发布了83 篇原创文章 · 获赞 3 · 访问量 4284

猜你喜欢

转载自blog.csdn.net/juan333/article/details/104123631