大数据生态圈

fansichao 2021-10-23 16:25:17
Categories: Tags:

参考资源

大数据生态圈

大数据特征:

1)大量化(Volume):存储量大,增量大
TB->PB

2)多样化(Variety):

来源多:搜索引擎,社交网络,通话记录,传感器

格式多:(非)结构化数据
,文本、日志、视频、图片、地理位置等

3)快速化(Velocity):
海量数据的处理需求不再局限在离线计算当中

4)价值密度低(Value):
但是这种价值需要在海量数据之上,通过数据分析与机器学习更快速的挖掘出来

大数据带来的革命性变革:

1)成本降低

2)软件容错,硬件故障视为常态

3)简化分布式并行计算

1.1. 大数据常用技术简介

Flume-日志收集工具

Flume 数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。同时,Flume 还具备能够将日志写往各种数据目标的能力。

概念:

sqoop-数据同步传输工具

用于 hadoop(hive)与传统数据库的数据传输。 ETL

Zookeeper-分布式协作服务

一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现。

Zookeeper 解决分布环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。Hadoop 的许多组件依赖于 Zookeeper,它运行在计算集群上面,用户管理 Hadoop 操作。分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。

快速理解:

Zookeeper 的核心功能,文件系统和通信机制。

概念:

ZAB 协议:
核心算法 paxos 算法,一种基于消息传递且具有高度容错性的一致性算法。分布式系统中的节点通信存在两种模型,共享内存,消息传递。

paxos 算法解决的问题是一个可能发生上述异常的分布式系统中如何就某个值达成一致,保证不论发生以上任何异常,都不会破坏决策的一致性。

Hbase-分布式列存储数据库

hbase 是运行在 hdfs 之上的一种数据库,以键值对的形式存储数据,能够快速在主机内数十亿行数据中定位所需的数据并访问,而 HDFS 缺乏随即读写操作,不能满足实时需求。

概念:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
启动方式:
输入:habse shell
查询表:list
查询表数据信息:(1)scan '表名' (2)count '表名'
命令:(注意,复制可能报错,只能手打)

# 查看
scan '表名:列簇''条件'

# 只返回前两行记录
scan 'table_name:info',{LIMIT =>2}

# 查看具体某一行
get 'table_name:info','00123_22'

# 模糊查找某一列数据
scan 'table_name:info',FILTER=>"ColumnPrefixFilter('td_id') AND ValueFilter(=,'substring:$_08_03')"

Hive-数据仓库

Hive 是建立在 hadoop 上的数据仓库基础架构,类似一种 SQL 解析引擎,它将 SQL 语句转成 MapReduce,然后再 Hadoop 上执行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

启动方式:

hive;

show tables;

select * from table_name;

quit;

命令:

# 创建数据文件
hadoop fs -vi /home/testdata.dat

# 创建库
create database test

# 创建表
create table test(id int,name string,age string) ROW format DELIMITED FIELDS

TERMINATED BY '\t' stored as TEXTFILE;

# 加载数据
load data local inpath '/root/data/students.txt' into table test;

# 删除表
drop database if exists test;

# 大小写转换
select lower('hello world'),upper('hello world')

# 去掉前后的空格

trim





habse 和 hive 的区别

  1. habse 是基于 Haddoop 实现的数据库,不支持 SQL

  2. hive 是基于 hadoop 实现的数据仓库,适合海量全量数据,支持类 SQL 操作。

数据仓库的特性

数据仓库用称做数据立方体的多维数据结构建模,它是一个从多个数据源收集的信息存储库,存放在一致的模式下,并且通常驻留在单个站点上。

数据仓库是面向主题的、集成的、其数据是随着时间变化而变化的,其数据是不可修改的。

Facebook 领导的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 sql 查询功能,可以将 sql 语句转换为 MapReduce 任务进行运行。其优点是学习成本低,可以通过类 SQL 语句快速实现简单的 MapReduce 统计。像一些 data scientist 就可以直接查询,不需要学习其他编程接口。

Tez

支持 DAG 作业的计算框架,对 MapReduce 的进一步拆分

Hortonworks 主推的优化 MapReduce 执行引擎,与 MapReduce 相比较,Tez 在性能方面更加出色。

OOzie-工作流调度系统

用来管理 hadoop 任务,工作流调度:工作流程的编排、调整,安排事件的触发执行。OOzie 是一个可扩展的工作体系,集成于 Hadoop 的堆栈,用于协调多个 MapReduce 作业的执行。OOzie 的工作流是放置在控制依赖 DAG(有向无环图 Direct Acyclic Graph)的一组动作(例如,hadoop 的 Map/Reduce 作业,Pig 作业等),其中指定了动作执行的顺序。OOzie 使用 hPDL(一种 XML 流程定义语言)来描述这个图。

一个基于工作流引擎的开源框架。由 Cloudera 公司贡献给 Apache 的,它能够提供对 Hadoop MapReduce 和 Pig Jobs 的任务调度与协调。

Hue (Hadoop user Experience)大数据协作框架,web 访问

访问端口:8889

使用 Hue 我们可以在浏览器端的 Web 控制台上与 Hadoop 集群进行交互来分析处理数据,例如操作 HDFS 上的数据,运行 MapReduce Job,执行 Hive 的 SQL 语句,浏览 Hbase 数据库。

Impala (数据查询系统)

提供 SQL 语义,能查询存储在 Hadoop 的 HDFS 和 HBASE 的 PB 级的大数据。Impala 没有使用 MapReduce 进行并行运算,所以 Hive 适合于长时间的批处理查询分析,而 Impala 适合于实时交互式 SQL 查询。

Sentry(事件日志记录和汇集的平台)【哨兵】

Sentry 是一个开源的实时错误报告工具,支持 Web 前后端、移动应用以及游戏。通常我们所说的 Sentry 是指后端,有 Django 编写。

Solr(全文搜索服务器,基于 lucene)

Sentry 是一个独立的企业其搜索应用服务器,它是一个高性能,采用 JAVA5 开发,它对外提供类似于 Web-service 的 API 接口。用户可以通过 HTTP 请求,向搜索引擎提交一定格式的 XML 文件,生成索引。

Lucene

它是一套用于全文检索和搜索的开发源代码程序库。Lucene 提供了一个简单却强大的应用接口程序,能够做全文索引和搜索,它是最受欢迎的免费 Java 信息检索程序库。

pig

Yahoo 开发的,并行地执行数据流处理的引擎,它包含了一种脚本语言,称为 Pig Latin,用来描述这些数据流。Pig Latin 本身提供了许多传统的数据操作,同时允许用户自己开发一些自定义函数用来读取、处理和写数据。在 LinkedIn 也是大量使用

为大型数据集的处理提供抽象,与 MapReduce 相比,Pig 提供了更丰富的数据结构,一般都是多值和嵌套的数据结构。它提供强大的数据变换,包括在 MapReduce 中被忽视的连接 Join 操作。

Ambari

一种基于 web 的工具,支持 hadoop 集群的供应、管理和监控。

Storm(实时处理框架)【暴风雨】

类似于 Hadoop 的实时处理框架,毫秒级。随着越来越多的场景对 Hadoop 的 MapReduce 高延迟无法容忍,比如网站统计、推荐系统、预警系统、金融系统(高频交易)等等,大数据实时处理解决方法的应用日趋广泛,其中 Strom 成为流计算技术中的佼佼者。

基本概念:

Storm 的主从架构由 Nimbus(主结点)、zookeeper(协作框架)、supervisor(从节点)和 worker(各个机器)组成。

1)Nimbus 的作用:接收客户端代码,拆分成多个 task,将 task 信息存入 zookeper;将 task 分配给 supervisor,将映射关系存入 zookeeper;故障检测

2)supervisor 的作用:从 Nimbus 目录读取代码,从 zk 上读取分配的 task;启动工作进程 worker 执行任务;检测运行的工作进度 worker.

  1. worker 的作用:从 zk 上去读取分配的 task,并计算出 task 需要给哪些 task 分布消息;启动一个或多个 Executor 线程执行任务 Task.

4)zookeeper 的作用:协调 Nimbus 与 supervisor 进行通信;协调 supervisor 与 worker 进行通信;保证 Nimbus 的高可用性。

Kylin【麒麟】

一个开源的分布式分析引擎,为 Hadoop 等大型分布式数据平台之上的超大规模数据集提供通过标准 SQL 查询及多维分析(OLAP)的功能,提供亚秒级的交互分析能力。

Tips:ETL(数据仓库技术)

extract,transform,load(抽取)(转换)(加载)

Kibana

它是一个开源的分析和可视化平台,设计用于和 ElasticSearch 一起工作,你用 Kibana 来搜索,查看并存在 ES 索引中的数据进行交互。

常用端口(ES):5601
参考链接:https://blog.csdn.net/u011262847/article/details/78007119

同时附 es-java-api:

https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search.html

Kafka(分布式消息队列)

端口号:9092

主要用于处理活跃的流式数据,这些数据包括网站的 pv,uv。

概念:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
手动导入数据到 Kafka 命令

#创建主题,replication-factor 表示该 topic 需要在不同的 broker 中保存几份,partions 为几个分区

./kafka-topics.sh --create --zookeeper cdh-node04:2111 --replication-factor 3 -- partitions 1 --topic test01

#描述主题

./kafka-topic.sh --zookeeper cdh-node04:2111 --describe --topic test01

#生产者发送数据

./kafka-console-producer.sh --broker-list cdh-node04:2111,cdh-node05:3111 --topic test01 +(复制黏贴的数据【固定格式:一般为 JSON 】)

#消费者消费数据

./kafaka-console-consumer.sh --zookeeper cdh-node04:2111 --topic test01 (--from-beginning 从头开始查看数据)

Azkaban(批量工作流任务调度器)

主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的 key:value 键值对的方式,通过配置中的 dependencies 来设置依赖关系,这个依赖关系是无环的,否则会被视为无效的工作流。相比于 OOzie 的配置复杂度高,Azkaban 有如下有点:

1)通过 job 配置文件快速建立任务和任务之间的依赖关系。

2)提供功能清晰,简单易用的 web UI 界面。

3)提供模块化和可插拔的插件机制,原生支持 command,java,pig,hadoop。

  1. 基于 java 开发,代码结构清晰,易于二次开发。

跟上面很像,Linkedin 开源的面向 Hadoop 的开源工作流系统,提供了类似于 cron 的管理任务。

Nginx(反向代理服务器)

它是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。Nginx 是一款轻量级的 Web 服务器/反向代理服务器以及电子邮件代理服务器,并在一个 BSD-like 协议下发型,其特点是占有内存小,并发能力强。事实上 nginx 的并发能力确实在同类型的网络服务器中表现较好,中国大陆使用 nginx 网站的有:百度,京东,腾讯,淘宝,网易。

应用:

Nginx 实现负载均衡,链接:https://www.cnblogs.com/JimBo-Wang/p/6556360.html

spark 和 spark2(大数据处理的计算引擎)

Spark 是 UC Berkeley AMP lab 开发的一个集群计算的框架,类似于 Hadoop,但有很多的区别。最大的优化是让计算任务的中间结果可以存储在内存中,不需要每次都写入 HDFS,更适用于需要迭代的 MapReduce 算法场景中,可以获得更好的性能提升。例如一次排序测试中,对 100TB 数据进行排序,Spark 比 Hadoop 快三倍,并且只需要十分之一的机器。Spark 集群目前最大的可以达到 8000 节点,处理的数据达到 PB 级别,在互联网企业中应用非常广泛.

链接:https://www.cnblogs.com/smuxiaolei/p/7663744.html

相关概念:

1)在 spark 中,所有计算都是通过 RDDS 的创建、转化和操作完成的。RDDS(Resilent Distributed datasets,弹性分布式数据集)是并行分布在整个数据集中,是 spark 分发数据和计算的基础抽象类。

2)Spark 运行架构包括集群资源管理器(Cluster Manager),运行作业任务的工作节点(worker Node),每个应用的任务控制节点(Driver)和每个工作节点上负责任务的执行进程(Executor).

Spark 程序的执行过程:

1)创建 SparkContext 对象

2)从外部数据源读取数据,创建 fileRDD 对象

3)构建依赖关系,fileRDD->filterRDD,形成 DAG

4)Cache()缓存,对 filterRDD 进行持久化

5)Count()执行。

spark 基础:http://dblab.xmu.edu.cn/blog/spark/

与 Hadoop MapReduce 比较:

1)spark 采用多线程来执行任务,而 MapReduce 采用多进程,优点是减少了任务开销。

2)Excutor 中有一个 BlockManager 存储模块,会将内存和磁盘共同作为存储设备,当需要多轮时,可将中间结果存储到这个模块中,下次需要时,可以直接读取,不需要读写到 HDFS 等文件系统中,减少 IO 开销。

3)实例:100T 的数据量,spark 206 个节点,只需 23 分钟;MapReduce 2000 个节点,需要 72 分钟。

链接:http://dblab.xmu.edu.cn/blog/985-2/

RDD 在 Spark 架构中的运行过程(如图所示):
(1)创建 RDD 对象;

(2)SparkContext 负责计算 RDD 之间的依赖关系,构建 DAG;

(3)DAGScheduler 负责把 DAG 图分解成多个阶段,每个阶段中包含了多个任务,每个任务会被任务调度器分发给各个工作节点(Worker Node)上的 Executor 去执行。

DAGScheduler

大数据相关技术简介

数据搜索引擎

平台/基础设施

数据基础设施

垂直领域应用/数据挖掘

提取、转换和加载(ETL)

参考资源