大数据与云计算基础知识(二)

来源:互联网 发布:企业淘宝开店费用 编辑:程序博客网 时间:2024/05/29 07:07

一、Scala语言
1.将Java脚本化的语言,基于JVM虚拟机,面向函数的对象语言。类似于Java的编译直接执行过程,有Scala解释器。
2.Scala也可被称为REPL。概念:读取=>求职=>打印=>循环。
3.声明中:val是常量声明,var是变量声明。推荐使用常量。
4.数据类型与赋值方式和Java存在联系,算术与操作符,函数调用,类,对象,集合,xml处理等等。
5.Scaladoc是文档标注,可以了解类与指令。
二、Avro语言
1.独立于编程语言的数据序列化系统,可解决Writable类型不足的问题。
2.Avro与Apache Thrift和Google的Protocol Buffers是同类产品。
3.Avro用语言无关模式定义,代码生成可选,用JSON来写模式,采取二进制格式。
4.数据类型和模式与其它语言(C、C++、JAVA、Phthon)兼容。
5.用DatumWriter和Encoder对数据序列化处理。
6.Avro的作用即对其他语言做解析重定义,运行MR程序。
三、R语言
1.用于数据处理和统计分析的脚本语言。前身是S语言(统计学)。面向对象语言和函数式编程语言。
2.两种模式:交互模式和批处理模式。常用交互模式。
3.运算符是<-,C表示连接,角标从1开始,“+”是提示符。
4.用hist弹出直方图,或其他图修饰、编辑等。
5.R语言的核心是向量,由三源数据构成。
6.矩阵、列表、数据框、类是其衍生操作的主要成分。
7.优势是大量的函数、良好的可编程性能、强大的绘图功能。
四、Pig语言
1.描述数据流的语言,全称为Pig Latin。有本地环境与分布式环境,可将语言转换为MR任务执行,Hive是将数据库作为MR任务。
2.Pig的外壳(shell)环境是Grunt。Pig Latin的编辑器是PigPen,提供Pig开发环境的Eclipse插件。
3.Pig与SQL不同,Pig是数据流编程,SQL是声明式编程。
4.类似于RDBMS中查询规则器对数据的操作:处理批量、流式操作。
5.Pig脚本的两种运行:exec和run。
6.四种函数:计算函数、过滤函数、加载函数、存储函数。
五、Hive
1.基于类似SQL的语言,完成对HDFS数据的查询分析。支持各种命令,解析编译简单,查询结果即时。
2.表操作:create database;数据库操作:create table 表名。
3.数据操作:查询(普通查询、带条件、限制、表连接)。
4.函数:普通函数UDF,聚合函数UDAF,自定义扩展。
5.存储:文本格式,SequenceFile切分压缩,RCFile列式存储。
6.分区:以目录存储,数据库名:db/表名/字段名等。
7.索引:将替换部分字段为包名类名,查询快,但增加了存储负担。
8.数据库仓库工具,将SQL语句=>MapReduce任务。(HQL)语言。
9.Hive组件:CLI JDBC/ODBC Thrift Server WEBGUI metastore Driver
服务端:Driver,Metastore,Thrift服务;
客户端:CLI,WEBGUI,Thrift客户端
10.Driver:Compllier,Optimizer,Executor,编译解析,优化执行。
11.Metastore:元数据服务,数据存储管理,类数据库存储。
12.Thrift服务:可扩展跨语言开发,接口调用。
13.CLI:命令行接口,command line interface。
14.Thrift客户端,即JDBC/ODBC,接口调用。
15.WEBGUI:网页访问,hwi组件。
六、Impala
1.交互式查询引擎,基于MPP的SQL查询系统,类似于Hive。
2.区别:借鉴分布式数据库MPP,不再依赖MR。
3.shell工具,Impalad引擎(Planner,Coordinator,Exec Engine)。
4.StateStore位置,Catalog Service操作追踪。
5.主要组件:Impalad,StateStore,Catalog。
6.Hive适合长时间批处理,Impala适合实时交互式查询。
7.Impala用拉式获取结果,减少磁盘写入,降低开销,加快效率。
8.应用:查询结果集不大,短查询,不容错,可与Hive配合。
七、Flume
1.分布式、可靠、可用、大量收集数据及日志。聚合、简单、基于流技术。
2.stream计算(流计算),storm流。(数据流模型)
3.web server=>Agent(source,channel,sink) =>Hbase。
4.优点:存储数据到中央数据库;可启用缓存,保证流平衡;提供文本式路由;支持事务机制。
5.跳跃:链式操作 sink=>source=>channel=>sink=>source。循环
6.HDFS上传的缺点:一次上传一个,不满足文件高速生成场景(实时性);操作文件固定,不可追加,实时更新。
7.类似的如Facebook的Scribe,Apache的KafKa和Flume。
8.架构(水槽):Agent节点《flume event,flume agent》(扇入,扇出)。
Source:从数据生成器接收数据,转移给一个或多个channel。
Channel:缓存作用,保存到sink消费为止,过度桥梁。
Sink:存储数据到HDFS或者Hbase,分发至目的地。
9.interceptor:拦截器,在source与channel之间。
10.channel选择器:在多channel下选择相应channel(可复用)。
11.sink processor:沉槽处理器,从sink组中选择一个调用。
12.Collector:聚合Agent的信息,统一递交至中央数据库。
13.Creater:生成器,与web server连接,传递至Agent。
八、KafKa
1.解决离线和在线应用,日志收集处理,订阅广播,类似于Flume。
2.显式分布式的系统,producer,broker,cousumer可以有多个。
3.类似于缓存,即活跃的数据和离线处理之间的缓存。
4.特征:磁盘存取代价为0,高吞吐率,显式分布式,支持并行加载。
5.producer=>topic(message)<=consumer(广播message模式)
九、ChuKwa
1.开源,用于监控分布式系统的数据收集系统。
2.工具集=>展示、监控,分析已收集数据。
十、Oozie
1.工作流调度引擎,属于web应用程序,起源于雅虎,是有向无环图。称之为训象者。
2.组件:Oozie client和Oozie server。Server运行于Tomcat容器中。
3.执行多关联MR任务时,可写入workflow,xml,Oozie托管任务流。
4.用来配置多个MR工作流,各种程序夹杂在一起间隙执行(如Java,shell,Hive等)。
5.作用:把多个任务组成一个工作流,自动完成任务调用,受一个调度器控制。解决在内部MR任务有依赖关系,执行效率慢的问题。
6.特点:弹性大,容错高,高性能,多处理,可扩展,支持自定义。
7.原理:通过HPDL定义(xml流程定义语言),进行回调通知任务结束,再操作。
8.工作流:控制流节点(定义开始结束并控制路径),操作节点(工作流触发计算、处理任务执行)。
9.核心:工作流(定义任务的拓扑和执行逻辑),协调器(负责工作流的依赖和触发)。
十一、Sqoop
1.主要用于数据库与HDFS之间的数据传导,是一款开源工具。用于框架下的导入和导出操作。
2.inport工具运行MR任务,并行使用4个map任务加速执行过程。
3.导出格式:文本(默认),SequenceFile(Java),Avro(多种)。
4.codegen工具:简单生成代码,不执行完整导入。
5.利用JDBC可方便Sqoop对于数据库的访问,利于MR作业执行。
6.SequenceFile指序列化文件,过程中需要序列化与反序列化。
7.需要处理数据、分隔符处理、表名列名处理等等。利于Hadoop数据分析处理。
十二、Storm
1.开源实时分布式计算系统,实时流处理引擎。Master-Slave结构。
2.特点:容错性,水平扩展,易于安装和维护。
3.Topology任务,控制节点,Nimbus 节点,工作节点Supervisor。
4.Topology=>Nimbus=>task/Supervisor=>ZooKeeper=>Supervisor=>Worker。
5.每个流由ID定义,用于构建数据源和接收器(sink)的拓扑结构。
6.流起源于喷嘴Spout,计算处理器成为螺栓Bolt,实现业务逻辑处理。
7.Bolt是处理数据的核心,进行很多数据处理工作。
8.Storm提供流分组,用来控制之间元组处理的负载分发策略。
9.应用:信息流处理,连续计算,分布式RPC,ETL处理,在线机器学习。
十三、NOSQL概要
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。NoSQL数据库的四大分类。
键值(Key-Value)存储数据库
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。 举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.
列存储数据库
这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.
文档型数据库
文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDb。国内也有文档型数据库SequoiaDB,已经开源。
图形(Graph)数据库
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J, InfoGrid, Infinite Graph。
NoSQL数据库在以下的这几种情况下比较适用:1、数据模型比较简单;2、需要灵活性更强的IT系统;3、对数据库性能要求较高;4、不需要高度的数据一致性;5、对于给定key,比较容易映射复杂值的环境。