一、大数据岗位方向分类

(1)基础平台开发:

Java 为主。主要做统一数据开发平台、大数据源码级别扩展优化、提供提升开发效率的工具、元数据管理、数据质量管理等。技能要求:Java,Zookeeper,Hadoop,Hive,Spark,Kafka等。

(2)数据产品开发:

服务端 Java 为主,全部容器化管理服务。主要是数据报表平台、数据分析平台等。

(3)数据仓库:

如果数据开发平台比较完善,一般以 sql 为主,不管是离线计算,还是实时计算,都只需要在数据开发平台上提交 sql 任务即可。更专注数据模型的建设,能够快速实现用户的数据分析需求。如果平台不够完善,实时计算可能还是需要写代码,scala 为主。

技能要求:数据建模、报表开发、理解业务

(4)数据分析:

sql为主。分析数据趋势,挖掘潜在价值。要求:数据分析技能+Hadoop+Hive+部分Java

(5)算法:

Scala,Python,R 。特征提取、算法模型的优化。要求:算法

二、大数据工具之间的关系

如业界最流行的分布式计算平台Spark,学习三部曲:
(1)可以通过这篇文章(如何用形象的比喻描述大数据的技术生态?Hadoop、Hive、Spark 之间是什么关系?)来了解一下大数据的生态。
(2)可以通过 Spark 的官方教程尝试写一个 Spark Hello World 程序(在之前的 SparrowRecSys 里面新建一个 Scala 文件就可以)。
(3)使用了 Spark 的机器学习库 Spark MLlib,所可以通过这个官方教程来做一些初步的了解。
在这里插入图片描述
Hadoop生态圈(或者泛生态圈)即为大数据服务。

之前在sparrow项目中也用到过大数据的工具,如pyspark等,在58同城的推荐系统中,策略层的计算工具也是用到了Hive、MapReduce等:
在这里插入图片描述

图源:58同城推荐系统架构

(1)怎么存下大数据

传统的文件系统是单机的,不能横跨不同的机器。HDFS(Hadoop Distributed FileSystem)的设计本质上是为了大量的数据能横跨成百上千台机器,但是你看到的是一个文件系统而不是很多文件系统。比如你说我要获取/hdfs/tmp/file1的数据,你引用的是一个文件路径,但是实际的数据存放在很多不同的机器上。

你作为用户,不需要知道这些,就好比在单机上你不关心文件分散在什么磁道什么扇区一样。HDFS为你管理这些数据。

(2)怎么处理数据

虽然HDFS可以为你整体管理不同机器上的数据,但是这些数据太大了。一台机器读取成T上P的数据,一台机器慢慢跑也许需要好几天甚至好几周。对于很多公司来说,单机处理是不可忍受的,比如微博要更新24小时热博,它必须在24小时之内跑完这些处理。

如果要用很多台机器处理,就面临了如何分配工作,如果一台机器挂了如何重新启动相应的任务,机器之间如何互相通信交换数据以完成复杂的计算等等。这就是MapReduce / Tez / Spark的功能:

  • MapReduce是第一代计算引擎。MapReduce的设计,采用了很简化的计算模型,只有MapReduce两个计算过程(中间用Shuffle串联),用这个模型,已经可以处理大数据领域很大一部分问题了。
  • Tez和Spark是第二代计算引擎。

(3)什么是Map,什么是Reduce?

  • 场景需求:要统计一个巨大的文本文件存储在类似HDFS上,你想要知道这个文本里各个词的出现频率。
  • 步骤:
    • 启动了一个MapReduce程序。Map阶段,几百台机器同时读取这个文件的各个部分,分别把各自读到的部分分别统计出词频,产生类似(hello, 12100次),(world,15214次)等等这样的Pair(我这里把Map和Combine放在一起说以便简化);
    • 这几百台机器各自都产生了如上的集合,然后又有几百台机器启动Reduce处理。Reducer机器A将从Mapper机器收到所有以A开头的统计结果,机器B将收到B开头的词汇统计结果(当然实际上不会真的以字母开头做依据,而是用函数产生Hash值以避免数据串化。因为类似X开头的词肯定比其他要少得多,而你不希望数据处理各个机器的工作量相差悬殊)。然后这些Reducer将再次汇总,(hello,12100)+(hello,12311)+(hello,345881)= (hello,370292)。每个Reducer都如上处理,你就得到了整个文件的词频结果。

MapReduce的简单模型很黄很暴力,虽然好用,但是很笨重。第二代的Tez和Spark除了内存Cache之类的新feature,本质上来说,是让Map/Reduce模型更通用,让Map和Reduce之间的界限更模糊,数据交换更灵活,更少的磁盘读写,以便更方便地描述复杂算法,取得更高的吞吐量

(4)更高层描述算法和数据处理

有了MapReduce,Tez和Spark之后,程序员发现,MapReduce的程序写起来真麻烦。他们希望简化这个过程。这就好比你有了汇编语言,虽然你几乎什么都能干了,但是你还是觉得繁琐。你希望有个更高层更抽象的语言层来描述算法和数据处理流程。于是就有了PigHive

  • Pig是接近脚本方式去描述MapReduce,
  • Hive则用的是SQL。

它们把脚本和SQL语言翻译成MapReduce程序,丢给计算引擎去计算,而你就从繁琐的MapReduce程序中解脱出来,用更简单更直观的语言去写程序了。有了Hive之后,人们发现SQL对比Java有巨大的优势:

  • 一个是它太容易写了。刚才词频的东西,用SQL描述就只有一两行,MapReduce写起来大约要几十上百行。
  • 数据分析师不再乞求工程师帮忙,工程师也不用写奇怪的处理程序。Hive逐渐成为大数据仓库的核心组件,很多公司的流水线作业集完全是用SQL描述,易写易改易维护。

自从数据分析人员开始用Hive分析数据之后,发现Hive在MapReduce上跑,非常慢。流水线作业集也许没啥关系,比如24小时更新的推荐,反正24小时内跑完就算了。但是数据分析师总希望跑更快点,如查多少人在过去一小时内看了A商品和B商品。于是Impala,Presto,Drill诞生了(当然还有无数非著名的交互SQL引擎,就不一一列举了)。三个系统的核心理念是,MapReduce引擎太慢,因为它太通用,太强壮,太保守,我们SQL需要更轻量,更激进地获取资源,更专门地对SQL做优化,而且不需要那么多容错性保证(因为系统出错了大不了重新启动任务,如果整个处理时间更短的话,比如几分钟之内)。这些系统让用户更快速地处理SQL任务,牺牲了通用性稳定性等特性。如果说MapReduce是大砍刀,砍啥都不怕,那上面三个就是剔骨刀,灵巧锋利,但是不能搞太大太硬的东西。

这些这些系统,说实话,一直没有达到人们期望的流行度。因为这时候又两个异类被造出来了。他们是Hive on Tez / Spark和SparkSQL。它们的设计理念是,MapReduce慢,但是如果我用新一代通用计算引擎Tez或者Spark来跑SQL,那我就能跑的更快。而且用户不需要维护两套系统。这就好比如果你厨房小,人又懒,对吃的精细程度要求有限,那你可以买个电饭煲,能蒸能煲能烧,省了好多厨具。

上面的介绍,基本就是一个数据仓库的构架了。底层HDFS,上面跑MapReduce/Tez/Spark,在上面跑Hive,Pig。或者HDFS上直接跑Impala,Drill,Presto。这解决了中低速数据处理的要求。
在这里插入图片描述

(5)流计算

那如果我要更高速的处理呢?如果我是一个类似微博的公司,我希望显示不是24小时热博,我想看一个不断变化的热播榜,更新延迟在一分钟之内,上面的手段都将无法胜任。于是又一种计算模型被开发出来,这就是Streaming(流)计算。
Storm是最流行的流计算平台。

流计算的思路是,如果要达到更实时的更新,我何不在数据流进来的时候就处理了?比如还是词频统计的例子,我的数据流是一个一个的词,我就让他们一边流过我就一边开始统计了。流计算很牛逼,基本无延迟,但是它的短处是,不灵活,你想要统计的东西必须预先知道,毕竟数据流过就没了,你没算的东西就无法补算了。因此它是个很好的东西,但是无法替代上面数据仓库和批处理系统。

(6)KV Store

还有一个有些独立的模块是KV Store,比如Cassandra,HBase,MongoDB以及很多很多很多很多其他的(多到无法想象)。所以KV Store就是说,我有一堆键值,我能很快速滴获取与这个Key绑定的数据。比如我用身份证号,能取到你的身份数据。这个动作用MapReduce也能完成,但是很可能要扫描整个数据集。

而KV Store专用来处理这个操作,所有存和取都专门为此优化了。从几个P的数据中查找一个身份证号,也许只要零点几秒。这让大数据公司的一些专门操作被大大优化了。比如我网页上有个根据订单号查找订单内容的页面,而整个网站的订单数量无法单机数据库存储,我就会考虑用KV Store来存。KV Store的理念是,基本无法处理复杂的计算,大多没法JOIN,也许没法聚合,没有强一致性保证(不同数据分布在不同机器上,你每次读取也许会读到不同的结果,也无法处理类似银行转账那样的强一致性要求的操作)。但是就是极快。

每个不同的KV Store设计都有不同取舍,有些更快,有些容量更高,有些可以支持更复杂的操作。必有一款适合你。

除此之外,还有一些更特制的系统/组件,比如Mahout是分布式机器学习库,Protobuf是数据交换的编码和库,ZooKeeper是高一致性的分布存取协同系统,等等。

(7)调度系统Yarn

有了这么多乱七八糟的工具,都在同一个集群上运转,大家需要互相尊重有序工作。所以另外一个重要组件是,调度系统。现在最流行的是Yarn。你可以把他看作中央管理,好比你妈在厨房监工,哎,你妹妹切菜切完了,你可以把刀拿去杀鸡了。只要大家都服从你妈分配,那大家都能愉快滴烧菜。

三、大数据学习路线

在这里插入图片描述

(1)基础部分

linux基础和javase基础【包含mysql】 这些是基本功,刚开始也不可能学的很精通,最起码要对linux中的一些基本的命令混个脸熟,后面学习各种框架的时候都会用到,用多了就熟悉了。

(2)javase

javase的话建议主要看面向对象,集合,io,多线程,以及jdbc操作即可。

(3)zookeeper

zookeeper是很多大数据框架的基础,中文名称是动物园的意思,因为目前的大数据框架的图标很多都是动物的形状,所以zookeeper其 实就是可以管理很多大数据框架的。针对这个框架,主要掌握如何搭建单节点和集群,以及掌握如何在zkcli客户端下对zookeeper的节点进行增删改 查操作即可。

(4)hadoop

目前企业中一般都是用hadoop2.x的版本了,所以就没有必要再去学hadoop1.x版本了,hadoop2.x主要包含三大块 hdfs 前期,主要学习hdfs的一些命令即可,上传,下载,删除,移动,查看等命令… mapreduce 这个需要重点学习下,要理解mr的原理以及代码实现,虽然现在工作中真正写mr的代码次数很少了,但是原理还是要理解的。 yarn 前期了解即可,只需要知道yarn是一个资源调度平台,主要负责给任务分配资源即可,yarn不仅可以给mapreduce任务调度资源,还可以为 spark任务调度资源…yarn是一个公共的资源调度平台,所有满足条件的框架都可以使用yarn来进行资源调度。

(5)hive

hive是一个数据仓库,所有的数据都是存储在hdfs上的,具体【数据仓库和数据库】的区别大家可以去网上搜索一下,有很多介绍。其实如果对 mysql的使用比较熟悉的话,使用hive也就简单很多了,使用hive主要是写hql,hql是hive的sql语言,非常类似于mysql数据库的 sql,后续学习hive的时候主要理解一些hive的语法特性即可。
在这里插入图片描述
其实hive在执行hql,底层在执行的时候还是执行的mapredce程序。 注意:其实hive本身是很强大的,数据仓库的设计在工作中也是很重要的,但是前期学习的时候,主要先学会如何使用就好了。后期可以好好研究一下hive。

(6)hbase

hbase是一个nosql 数据库,是一个key-value类型的数据库,底层的数据存储在hdfs上。在学习hbase的时候主要掌握 row-key的设计,以及列簇的设计。要注意一个特点就是,hbase基于rowkey查询效率很快,可以达到秒级查询,但是基于列簇中的列进行查询, 特别是组合查询的时候,如果数据量很大的话,查询性能会很差。

(7)redis

redis也是一个nosql 数据库和key-value类型的数据库,但是这个数据库是纯基于内存的,也就是redis数据库中的数据都是存储在内存中的,所以它的一个特点就是适用 于快速读写的应用场景,读写可以达到10W次/秒,但是不适合存储海量数据,毕竟机器的内存是有限的,当然,redis也支持集群,也可以存储大量数据。 在学习redis的时候主要掌握string,list,set,sortedset,hashmap这几种数据类型的区别以及使用,还有 pipeline管道,这个在批量入库数据的时候是非常有用的,以及transaction事务功能。 flume flume是一个日志采集工具,这个还是比较常用的,最常见的就是采集应用产生的日志文件中的数据。一般有两个流程,一个是flume采集数据存 储到kafka中,为了后面使用storm或者sparkstreaming进行实时处理。另一个流程是flume采集的数据落盘到hdfs上,为了后期 使用hadoop或者spark进行离线处理。在学习flume的时候其实主要就是学会看flume官网的文档,学习各种组建的配置参数,因为使用 flume就是写各种的配置。

(8)kafka

kafka 是一个消息队列,在工作中常用于实时处理的场景中,作为一个中间缓冲层,例如,flume->kafka->storm/sparkstreaming。学习kafka主要掌握topic,partition,replicate等的概念和原理。 storm storm是一个实时计算框架,和hadoop的区别就是,hadoop是对离线的海量数据进行处理,而storm是对实时新增的每一条数据进行 处理,是一条一条的处理,可以保证数据处理的时效性。学习storm主要学习topology的编写,storm并行度的调整,以及storm如何整合 kafka实时消费数据。

(9)spark

spark 现在也发展成了一个生态圈,spark里面包含很多技术,spark core,spark steaming,spark mlib,spark graphx。 spark生态圈里面包含的有离线处理spark core,和实时处理spark streaming,在这里需要注意一下,storm和spark streaming ,两个都是实时处理框架,但是主要区别是:storm是真正的一条一条的处理,而spark streaming 是一批一批的处理。

spark中包含很多框架,在刚开始学习的时候主要学习spark core和spark streaming即可。这个一般搞大数据的都会用到。spark mlib和spark graphx 可以等后期工作需要或者有时间了在研究即可。

(10)elasticsearch

elasticsearch是一个适合海量数据实时查询的全文搜索引擎,支持分布式集群,其实底层是基于lucene的。在查询的时候支持快速模 糊查询,求count,distinct,sum,avg等操作,但是不支持join操作。elasticsearch目前也有一个生态 圈,elk(elasticsearch logstash kibana)是一个典型的日志收集,存储,快速查询出图表的一整套解决方案。在学习elasticsearch的时候,前期主要学习如何使用es进行增 删改查,es中的index,type,document的概念,以及es中的mapping的设计。

四、databricks使用教程

databricks是基于spark的云服务,能够提供数据处理的单独空间(不受托管环境和hadoop集群管理的影响)

(1)创建账号后(注意最好在谷歌浏览器上),创建一个新集群cluster,选择“ Databricks Runtime”版本(Databricks Runtime是一组在Databricks管理的群集上运行的核心组件。 它包括Apache Spark等)。
在这里插入图片描述
创建好集群后就是这样样子:
在这里插入图片描述
(2)创建一个新的笔记本,可以发现和jupyter notebook是类似的,可以选定我们的默认语言和集群cluster:
在这里插入图片描述
此处常用的快捷键(win环境):
Shift + Enter键运行单元格
Ctrl + Enter保持运行相同的单元格,而无需移动到下一个单元格

(3)将数据上传到Databricks,如果木有数据集,可以用iris数据集测试一波,上传好数据集后:
在这里插入图片描述
(4)现在可以使用UI创建表,以便可以可视化表并在集群上预览。 可以观察表的属性。 Spark将尝试检测出每列的数据类型,使得我们能对其进行编辑。
在这里插入图片描述
在集群上可视化表:
在这里插入图片描述
这里我们可以为各列添加标题,以便可以通过其标题而不是_c0_c1等等来标识每一列。

这里可以将标题设置为“分隔长度”,“分隔宽度”,“花瓣长度”,“花瓣宽度”和“类”(Sepal Length, Sepal Width, Petal Length, Petal Width and Class)。 在这里,Spark错误地将前四列的数据类型检测为String,因此我们可以手动将其更改为所需的数据类型Float

(5)笔记本电脑访问数据:Spark是一个框架,可用于使用SQL,机器学习,图形处理或实时流分析来分析大数据。 这里使用SparkSQL和Dataframes。注意上次数据集后还要create table(左下角蓝色的,否则读不到表):
在这里插入图片描述
在notebook中可以执行语句读表:
在这里插入图片描述
(6)根据数据表画图也非常方便:
在这里插入图片描述
(7)将Spark数据框转换为Pandas数据框:

import pandas as pd
pandas_df=df.toPandas()

(8)查看Spark UI :在左侧栏的compute中,点击cluster会进入如下界面,找到spark UI,UI视图提供了有关在集群上执行的每个作业,阶段,环境和执行SQL查询的大量信息。 该UI有助于用户调试其应用程序。 此外,此UI还提供了关于Spark的良好可视化效果。具体介绍可以参考链接
在这里插入图片描述
(9)导出notebook文件,有多种文件类型可选(如HTML形式导出):
在这里插入图片描述

Reference

[1] https://www.zhihu.com/question/27974418
[2] 黑马【Python+大数据】学习路线图
[3] 2022黑马hadoop入门视频 hive部分
[4] 架构师hive视频教程
[5] 易百教程-hive教程
[6] 厦门大学大数据实验室
[7] Hive学习路线图 Hive安装和使用攻略
[8] hive有道笔记(尚硅谷)
[9] 尚硅谷hive视频教程
[10] 阿里云搭建Hadoop集群
[11] 从阿里云轻量服务器安装Hadoop及环境配置
[12] 阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建
[13] How to get started with Databricks

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐