大数据入门介绍和学习路线

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Java 为主。主要做统一数据开发平台、大数据源码级别扩展优化、提供提升开发效率的工具、元数据管理、数据质量管理等。技能要求:Java,Zookeeper,Hadoop,Hive,Spark,Kafka等。

一、大数据岗位方向分类

(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,所可以通过这个官方教程来做一些初步的了解。

image.png

Hadoop生态圈(或者泛生态圈)即为大数据服务。

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

image.png

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

(1)怎么存下大数据

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

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

(2)怎么处理数据

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

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

MapReduce是第一代计算引擎。MapReduce的设计,采用了很简化的计算模型,只有Map和Reduce两个计算过程(中间用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都如上处理,你就得到了整个文件的词频结果。

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

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

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

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。这解决了中低速数据处理的要求。

image.png

(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。你可以把他看作中央管理,好比你妈在厨房监工,哎,你妹妹切菜切完了,你可以把刀拿去杀鸡了。只要大家都服从你妈分配,那大家都能愉快滴烧菜。

三、大数据学习路线

image.png

(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的语法特性即可。

image.png

其实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等)。

image.png

创建好集群后就是这样样子:

image.png

(2)创建一个新的笔记本,可以发现和jupyter notebook是类似的,可以选定我们的默认语言和集群cluster:

image.png

此处常用的快捷键(win环境):

Shift + Enter键运行单元格

Ctrl + Enter保持运行相同的单元格,而无需移动到下一个单元格

(3)将数据上传到Databricks,如果木有数据集,可以用iris数据集测试一波,上传好数据集后:

image.png

(4)现在可以使用UI创建表,以便可以可视化表并在集群上预览。 可以观察表的属性。 Spark将尝试检测出每列的数据类型,使得我们能对其进行编辑。

image.png

在集群上可视化表:

image.png

这里我们可以为各列添加标题,以便可以通过其标题而不是_c0 , _c1等等来标识每一列。

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

(5)笔记本电脑访问数据:Spark是一个框架,可用于使用SQL,机器学习,图形处理或实时流分析来分析大数据。 这里使用SparkSQL和Dataframes。注意上次数据集后还要create table(左下角蓝色的,否则读不到表):

image.png

在notebook中可以执行语句读表:

image.png

(6)根据数据表画图也非常方便:

image.png

(7)将Spark数据框转换为Pandas数据框:

import pandas as pd
pandas_df=df.toPandas()

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

image.png

(9)导出notebook文件,有多种文件类型可选(如HTML形式导出):

image.png

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
5月前
|
SQL 存储 分布式计算
ODPS开发大全:入门篇(3)
ODPS开发大全:入门篇
219 19
|
5月前
|
SQL 存储 分布式计算
ODPS开发大全:入门篇(1)
ODPS开发大全:入门篇
515 14
|
6月前
|
分布式计算 Hadoop 分布式数据库
Hadoop生态系统介绍(二)大数据技术Hadoop入门理论系列之一----hadoop生态圈介绍
Hadoop生态系统介绍(二)大数据技术Hadoop入门理论系列之一----hadoop生态圈介绍
176 2
|
4月前
|
分布式计算 资源调度 Hadoop
Hadoop入门基础(五):Hadoop 常用 Shell 命令一网打尽,提升你的大数据技能!
Hadoop入门基础(五):Hadoop 常用 Shell 命令一网打尽,提升你的大数据技能!
|
4月前
|
SQL 存储 分布式计算
MaxCompute 入门:大数据处理的第一步
【8月更文第31天】在当今数字化转型的时代,企业和组织每天都在产生大量的数据。有效地管理和分析这些数据变得至关重要。阿里云的 MaxCompute(原名 ODPS)是一个用于处理海量数据的大规模分布式计算服务。它提供了强大的存储能力以及丰富的数据处理功能,让开发者能够快速构建数据仓库、实时报表系统、数据挖掘等应用。本文将介绍 MaxCompute 的基本概念、架构,并演示如何开始使用这一大数据处理平台。
674 0
|
5月前
|
SQL 分布式计算 MaxCompute
ODPS开发大全:入门篇(2)
ODPS开发大全:入门篇
142 14
|
4月前
|
分布式计算 大数据 Java
Scala 入门指南:从零开始的大数据开发
Scala 入门指南:从零开始的大数据开发
|
5月前
|
存储 SQL 机器学习/深度学习
阿里云数加大数据计算服务MaxCompute学习路线图:从入门到精通
将所学知识应用于实际工作中并不断进行实践和创新是提升技术能力的关键所在。用户可以结合业务需求和技术发展趋势积极探索新的应用场景和解决方案,并在实践中不断总结经验和教训以提升自己的技术水平和实践能力。
|
5月前
|
分布式计算 大数据 Java
大数据开发语言Scala入门
大数据开发语言Scala入门
|
5月前
|
IDE 大数据 Java
「AIGC」大数据开发语言Scala入门
Scala,融合OOP和FP的多范式语言,在JVM上运行,常用于大数据处理,尤其与Apache Spark配合。要开始学习,安装Scala,选择IDE如IntelliJ。基础包括变量、数据类型、控制结构、函数。Scala支持类、对象、不可变数据结构、模式匹配和强大的并发工具。利用官方文档、教程、社区资源进行学习,并通过实践提升技能。
67 0