快手大数据架构工程师钟靓近日在 A2M 人工智能与机器学习创新峰会分享了题为《SQL on Hadoop 在快手大数据平台的实践与优化》的演讲,主要从 SQL on Hadoop 介绍、快手 SQL on Hadoop 平台概述、SQL on Hadoop 在快手的使用经验和改进分析、快手 SQL on Hadoop 的未来计划四方面介绍了 SQL on Hadoop 架构。
SQL on Hadoop,顾名思义它是基于 Hadoop 生态的一个 SQL 引擎架构,我们其实常常听到 Hive、SparkSQL、Presto、Impala 架构。接下来,我会简单的描述一下常用的架构情况。
HIVE,一个数据仓库系统。它将数据结构映射到存储的数据中,通过 SQL 对大规模的分布式存储数据进行读、写、管理。
根据定义的数据模式,以及输出 Storage,它会对输入的 SQL 经过编译、优化,生成对应引擎的任务,然后调度执行生成的任务。
HIVE 当前支持的引擎类型有:MR、SPARK、TEZ。
基于 HIVE 本身的架构,还有一些额外的服务提供方式,比如 HiveServer2 与 MetaStoreServer 都是 Thrift 架构。
此外,HiveServer2 提供远程客户端提交 SQL 任务的功能,MetaStoreServer 则提供远程客户端 *** 作元数据的功能。
Spark,一个快速、易用,以 DAG 作为执行模式的大规模数据处理的统一分析引擎,主要模块分为 SQL 引擎、流式处理 、机器学习、图处理。
SPARKSQL 基于 SPARK 的计算引擎,做到了统一数据访问,集成 Hive,支持标准 JDBC 连接。SPARKSQL 常用于数据交互分析的场景。
SPARKSQL 的主要执行逻辑,首先是将 SQL 解析为语法树,然后语义分析生成逻辑执行计划,接着与元数据交互,进行逻辑执行计划的优化,最后,将逻辑执行翻译为物理执行计划,即 RDD lineage,并执行任务。
PRESTO,一个交互式分析查询的开源分布式 SQL 查询引擎。
因为基于内存计算,PRESTO 的计算性能大于有大量 IO *** 作的 MR 和 SPARK 引擎。它有易于d性扩展,支持可插拔连接的特点。
业内的使用案例很多,包括 FaceBook、AirBnb、美团等都有大规模的使用。
我们看到这么多的 SQL on Hadoop 架构,它侧面地说明了这种架构比较实用且成熟。利用 SQL on Hadoop 架构,我们可以实现支持海量数据处理的需求。
查询平台每日 SQL 总量在 70 万左右,DQL 的总量在 18 万左右。AdHoc 集群主要用于交互分析及机器查询,DQL 平均耗时为 300s;AdHoc 在内部有 Loacl 任务及加速引擎应用,所以查询要求耗时较低。
ETL 集群主要用于 ETL 处理以及报表的生成。DQL 平均耗时为 1000s,DQL P50 耗时为 100s,DQL P90 耗时为 4000s,除上述两大集群外,其它小的集群主要用于提供给单独的业务来使用。
服务层是对上层进行应用的。在上层有四个模块,这其中包括同步服务、ETL 平台、AdHoc 平台以及用户程序。在调度上层,同样也有四方面的数据,例如服务端日志,对它进行处理后,它会直接接入到 HDFS 里,我们后续会再对它进行清洗处理;服务打点的数据以及数据库信息,则会通过同步服务入到对应的数据源里,且我们会将元数据信息存在后端元数据系统中。
网页爬取的数据会存入 hbase,后续也会进行清洗与处理。
HUE、NoteBook 主要提供的是交互式查询的系统。报表系统、BI 系统主要是 ETL 处理以及常见的报表生成,额外的元数据系统是对外进行服务的。快手现在的引擎支持 MR、Presto 及 Spark。
管理系统主要用于管理我们当前的集群。HiveServer2 集群路由系统,主要用于引擎的选择。监控系统以及运维系统,主要是对于 HiveServer2 引擎进行运维。
我们在使用 HiveServer2 过程中,遇到过很多问题。接下来,我会详细的为大家阐述快手是如何进行优化及实践的。
当前有多个 HiveServer2 集群,分别是 AdHoc 与 ETL 两大集群,以及其他小集群。不同集群有对应的连接 ZK,客户端可通过 ZK 连接 HiveServer2 集群。
为了保证核心任务的稳定性,将 ETL 集群进行了分级,分为核心集群和一般集群。在客户端连接 HS2 的时候,我们会对任务优先级判定,高优先级的任务会被路由到核心集群,低优先级的任务会被路由到一般集群。
BeaconServer 服务为后端 Hook Server 服务,配合 HS2 中的 Hook,在 HS2 服务之外实现了所需的功能。当前支持的模块包括路由、审计、SQL 重写、任务控制、错误分析、优化建议等。
•无状态,BeaconServer 服务支持水平扩展。基于请求量的大小,可d性调整服务的规模。
•配置动态加载,BeaconServer 服务支持动态配置加载。各个模块支持开关,服务可动态加载配置实现上下线。比如路由模块,可根据后端加速引擎集群资源情况,进行路由比率调整甚至熔断。
•无缝升级,BeaconServer 服务的后端模块可单独进行下线升级 *** 作,不会影响 Hook 端 HS2 服务。
•Hive 支持 SPARK 与 TEZ 引擎,但不适用于生产环境。
•SQL on Hadoop 的 SQL 引擎各有优缺点,用户学习和使用的门槛较高。
•不同 SQL 引擎之间的语法和功能支持上存在差异,需要大量的测试和兼容工作,完全兼容的成本较高。
•不同 SQL 引擎各自提供服务会给数仓的血缘管理、权限控制、运维管理、资源利用都带来不便。
•在 Hive 中,自定义实现引擎。
•自动路由功能,不需要设置引擎,自动选择适合的加速引擎。
•根绝规则匹配 SQL,只将兼容的 SQL 推给加速引擎。
•复用 HiveServer2 集群架构。
基于 HiveServer2,有两种实现方式。JDBC 方式是通过 JDBC 接口,将 SQL 发送至后端加速引擎启动的集群上。PROXY 方式是将 SQL 下推给本地的加速引擎启动的 Client。
JDBC 方式启动的后端集群,均是基于 YARN,可以实现资源的分时复用。比如 AdHoc 集群的资源在夜间会自动回收,作为报表系统的资源进行复用。
路由方案基于 HS2 的 Hook 架构,在 HS2 端实现对应 Hook,用于引擎切换;后端 BeaconServer 服务中实现路由 服务,用于 SQL 的路由规则的匹配处理。不同集群可配置不同的路由规则。
为了保证后算路由服务的稳定性,团队还设计了 Rewrite Hook,用于重写 AdHoc 集群中的 SQL,自动添加 LIMIT 上限,防止大数据量的 SCAN。
•易于集成,当前主流的 SQL 引擎都可以方便的实现 JDBC 与 PROXY 方式。再通过配置,能简单的集成新的查询引擎,比如 impala、drill 等。
•自动选择引擎,减少了用户的引擎使用成本,同时也让迁移变得更简单。并且在加速引擎过载 的情况下,可以动态调整比例,防止因过载 对加速性能的影响。
•自动降级,保证了运行的可靠性。SQL 路由支持 failback 模块,可以根据配置选择是否再路由引擎执行失败后,回滚到 MR 运行。
•模块复用,对于新增的引擎,都可以复用 HiveServer2 定制的血缘采集、权限认证、并发锁控制等方案,大大降低了使用成本。
•资源复用,对于 adhoc 查询占用资源可以分时动态调整,有效保证集群资源的利用率。
当查询完成后,本地会轮询结果文件,一直获取到 LIMIT 大小,然后返回。这种情况下,当有大量的小文件存在,而大文件在后端的时候,会导致 Bad Case,不停与 HDFS 交互,获取文件信息以及文件数据,大大拉长运行时间。
在 Fetch 之前,对结果文件的大小进行预排序,可以有数百倍的性能提升。
示例:当前有 200 个文件。199 个小文件一条记录 a,1 个大文件混合记录 a 与 test 共 200 条,大文件名 index 在小文件之后。
Hive 中有一个 SimpleFetchOptimizer 优化器,会直接生成 FetchTask,减小资源申请时间与调度时间。但这个优化会出现瓶颈。如果数据量小,但是文件数多,需要返回的条数多,存在能大量筛掉结果数据的 Filter 条件。这时候串行读取输入文件,导致查询延迟大,反而没起到加速效果。
在 SimpleFetchOptimizer 优化器中,新增文件数的判断条件,最后将任务提交到集群环境,通过提高并发来实现加速。
示例:读取当前 500 个文件的分区。优化后的文件数阈值为 100。
一个表有大量的子分区,它的 DESC 过程会与元数据交互,获取所有的分区。但最后返回的结果,只有跟表相关的信息。
与元数据交互的时候,延迟了整个 DESC 的查询,当元数据压力大的时候甚至无法返回结果。
针对于 TABLE 的 DESC 过程,直接去掉了跟元数据交互获取分区的过程,加速时间跟子分区数量成正比。
示例:desc 十万分区的大表。
•复用 split 计算的数据,跳过 reduce 估算重复统计输入过程。输入数据量大的任务,调度速率提升 50%。
•parquetSerde init 加速,跳过同一表的重复列剪枝优化,防止 map task op init 时间超时。
•新增 LazyOutputFormat,有 record 输出再创建文件,避免空文件的产生,导致下游读取大量空文件消耗时间。
•statsTask 支持多线程聚合统计信息,防止中间文件过多导致聚合过慢,增大运行时间。
•AdHoc 需要打开并行编译,防止 SQL 串行编译导致整体延迟时间增大的问题。
HS2 启动时会对物化视图功能进行初始化,轮询整个元数据库,导致 HS2 的启动时间非常长,从下线状态到重新上线间隔过大,可用性很差。
将物化视图功能修改为延迟懒加载,单独线程加载,不影响 HS2 的服务启动。物化视图支持加载中获取已缓存信息,保证功能的可用性。
HS2 启动时间从 5min+提升至<5s。
HS2 本身上下线成本较高,需要保证服务上的任务全部执行完成才能进行 *** 作。配置的修改可作为较高频率的 *** 作,且需要做到热加载。
在 HS2 的 ThriftServer 层我们增加了接口,与运维系统打通后,配置下推更新的时候自动调用,可实现配置的热加载生效。
HiveServer2 的 scratchdir 主要用于运行过程中的临时文件存储。当 HS2 中的会话创建时,便会创建 scratchdir。在 HDFS 压力大的时候,大量的会话会阻塞在创建 scratchdir 过程,导致连接数堆积至上限,最终 HS2 服务无法再连入新连接,影响服务可用性。
对此,我们先分离了一般查询与 create temporay table 查询的 scratch 目录,并支持 create temporay table 查询的 scratch 的懒创建。当 create temporay table 大量创建临时文件,便会影响 HDFS NameNode 延迟时间的时候,一般查询的 scratchdir HDFS NameNode 可以正常响应。
此外,HS2 还支持配置多 scratch,不同的 scratch 能设置加载比率,从而实现 HDFS 的均衡负载。
Hive 调度其中存在两个问题。
一、子 Task 非执行状态为完成情况的时候,若有多轮父 Task 包含子 Task,导致子 Task 被重复加入调度队列。这种 Case,需要将非执行状态修改成初始化状态。
二、当判断子 Task 是否可执行的过程中,会因为状态检测异常,无法正常加入需要调度的子 Task,从而致使查询丢失 Stage。而这种 Case,我们的做法是在执行完成后,加入一轮 Stage 的执行结果状态检查,一旦发现有下游 Stage 没有完成,直接抛出错误,实现查询结果状态的完备性检查。
•HS2 实现了接口终止查询 SQL。利用这个功能,可以及时终止异常 SQL。
•metastore JDOQuery 查询优化,关键字异常跳过,防止元数据长时间卡顿或者部分异常查询影响元数据。
•增加开关控制,强制覆盖外表目录,解决 insert overwrite 外表,文件 rename 报错的问题。
•hive parquet 下推增加关闭配置,避免 parquet 异常地下推 OR 条件,导致结果不正确。
•executeForArray 函数 join 超大字符串导致 OOM,增加限制优化。
•增加根据 table 的 schema 读取分区数据的功能,避免未级联修改分区 schema 导致读取数据异常。
•部分用户并没有开发经验,无法处理处理引擎返回的报错。
•有些错误的报错信息不明确,用户无法正确了解错误原因。
•失败的任务排查成本高,需要对 Hadoop 整套系统非常熟悉。
•用户的错误 SQL、以及需要优化的 SQL,大量具有共通性。人力维护成本高,但系统分析成本低。
SQL 专家系统基于 HS2 的 Hook 架构,在 BeaconServer 后端实现了三个主要的模块,分别是 SQL 规则控制模块、SQL 错误分析模块,与 SQL 优化建议模块。SQL 专家系统的知识库,包含关键字、原因说明、处理方案等几项主要信息,存于后端数据库中,并一直积累。
通过 SQL 专家系统,后端可以进行查询 SQL 的异常控制,避免异常 SQL 的资源浪费或者影响集群稳定。用户在遇到问题时,能直接获取问题的处理方案,减少了使用成本。
示例:空分区查询控制。
SQL 专家系统能解决一部分 HS2 的任务执行的错误诊断需求,但是比如作业 健康 度、任务执行异常等问题原因的判断,需要专门的系统来解决,为此我们设计了作业诊断系统。
作业诊断系统在 YARN 的层面,针对不同的执行引擎,对搜集的 Counter 和配置进行分析。在执行层面,提出相关的优化建议。
作业诊断系统的数据也能通过 API 提供给 SQL 专家系统,补充用于分析的问题原因。
作业诊断系统提供了查询页面来查询运行的任务。以下是命中 map 输入过多规则的任务查询过程:
亲身参与,作为主力完成了一个信息大数据分析平台。中间经历了很多问题,算是有些经验,因而作答。
整体而言,大数据平台从平台部署和数据分析过程可分为如下几步:
1、linux系统安装
一般使用开源版的Redhat系统--CentOS作为底层平台。为了提供稳定的硬件基础,在给硬盘做RAID和挂载数据存储节点的时,需要按情况配置。例如,可以选择给HDFS的namenode做RAID2以提高其稳定性,将数据存储与 *** 作系统分别放置在不同硬盘上,以确保 *** 作系统的正常运行。
2、分布式计算平台/组件安装
目前国内外的分布式系统的大多使用的是Hadoop系列开源系统。Hadoop的核心是HDFS,一个分布式的文件系统。在其基础上常用的组件有Yarn、Zookeeper、Hive、Hbase、Sqoop、Impala、ElasticSearch、Spark等。
先说下使用开源组件的优点:1)使用者众多,很多bug可以在网上找的答案(这往往是开发中最耗时的地方)。2)开源组件一般免费,学习和维护相对方便。3)开源组件一般会持续更新,提供必要的更新服务『当然还需要手动做更新 *** 作』。4)因为代码开源,若出bug可自由对源码作修改维护。
再简略讲讲各组件的功能。分布式集群的资源管理器一般用Yarn,『全名是Yet Another Resource Negotiator』。常用的分布式数据数据『仓』库有Hive、Hbase。Hive可以用SQL查询『但效率略低』,Hbase可以快速『近实时』读取行。外部数据库导入导出需要用到Sqoop。Sqoop将数据从Oracle、MySQL等传统数据库导入Hive或Hbase。Zookeeper是提供数据同步服务,Yarn和Hbase需要它的支持。Impala是对hive的一个补充,可以实现高效的SQL查询。ElasticSearch是一个分布式的搜索引擎。针对分析,目前最火的是Spark『此处忽略其他,如基础的MapReduce 和 Flink』。Spark在core上面有ML lib,Spark Streaming、Spark QL和GraphX等库,可以满足几乎所有常见数据分析需求。
值得一提的是,上面提到的组件,如何将其有机结合起来,完成某个任务,不是一个简单的工作,可能会非常耗时。
3、数据导入
前面提到,数据导入的工具是Sqoop。用它可以将数据从文件或者传统数据库导入到分布式平台『一般主要导入到Hive,也可将数据导入到Hbase』。
4、数据分析
数据分析一般包括两个阶段:数据预处理和数据建模分析。
数据预处理是为后面的建模分析做准备,主要工作时从海量数据中提取可用特征,建立大宽表。这个过程可能会用到Hive SQL,Spark QL和Impala。
数据建模分析是针对预处理提取的特征/数据建模,得到想要的结果。如前面所提到的,这一块最好用的是Spark。常用的机器学习算法,如朴素贝叶斯、逻辑回归、决策树、神经网络、TFIDF、协同过滤等,都已经在ML lib里面,调用比较方便。
5、结果可视化及输出API
可视化一般式对结果或部分原始数据做展示。一般有两种情况,行数据展示,和列查找展示。在这里,要基于大数据平台做展示,会需要用到ElasticSearch和Hbase。Hbase提供快速『ms级别』的行查找。 ElasticSearch可以实现列索引,提供快速列查找。
平台搭建主要问题:
1、稳定性 Stability
理论上来说,稳定性是分布式系统最大的优势,因为它可以通过多台机器做数据及程序运行备份以确保系统稳定。但也由于大数据平台部署于多台机器上,配置不合适,也可能成为最大的问题。 曾经遇到的一个问题是Hbase经常挂掉,主要原因是采购的硬盘质量较差。硬盘损坏有时会到导致Hbase同步出现问题,因而导致Hbase服务停止。由于硬盘质量较差,隔三差五会出现服务停止现象,耗费大量时间。结论:大数据平台相对于超算确实廉价,但是配置还是必须高于家用电脑的。
2、可扩展性 Scalability
如何快速扩展已有大数据平台,在其基础上扩充新的机器是云计算等领域应用的关键问题。在实际2B的应用中,有时需要增减机器来满足新的需求。如何在保留原有功能的情况下,快速扩充平台是实际应用中的常见问题。
上述是自己项目实践的总结。整个平台搭建过程耗时耗力,非一两个人可以完成。一个小团队要真正做到这些也需要耗费很长时间。
目前国内和国际上已有多家公司提供大数据平台搭建服务,国外有名的公司有Cloudera,Hortonworks,MapR等,国内也有华为、明略数据、星环等。另外有些公司如明略数据等还提供一体化的解决方案,寻求这些公司合作对 于入门级的大数据企业或没有大数据分析能力的企业来说是最好的解决途径。
对于一些本身体量较小或者目前数据量积累较少的公司,个人认为没有必要搭建这一套系统,暂时先租用AWS和阿里云就够了。对于数据量大,但数据分析需求较简单的公司,可以直接买Tableau,Splunk,HP Vertica,或者IBM DB2等软件或服务即可。
以上是我从事大数据以来的一些认识。管见所及,可能有所疏漏,欢迎补充。
1、数学知识
数学知识是数据分析师的基础知识。对于初级数据分析师,了解一些描述统计相关的基础内容,有一定的公式计算能力即可,了解常用统计模型算法则是加分。
对于高级数据分析师,统计模型相关知识是必备能力,线性代数(主要是矩阵计算相关知识)最好也有一定的了解。
2、分析工具
对于初级数据分析师,玩转Excel是必须的,数据透视表和公式使用必须熟练,VBA是加分。另外,还要学会一个统计分析工具,SPSS作为入门是比较好的。
对于高级数据分析师,使用分析工具是核心能力,VBA基本必备,SPSS/SAS/R至少要熟练使用其中之一,其他分析工具(如Matlab)视情况而定。
3、分析思维
比如结构化思维、思维导图、或百度脑图、麦肯锡式分析,了解一些smart、5W2H、SWOT等等那就更好了。不一定要掌握多深多全,但一定要了解一些。
4、数据库知识
大数据大数据,就是数据量很多,Excel就解决不了这么大数据量的时候,就得使用数据库。如果是关系型数据库,比如Oracle、mysql、sqlserver等等,你还得要学习使用SQL语句,筛选排序,汇总等等。非关系型数据库也得要学习,比如:Cassandra、Mongodb、CouchDB、Redis、 Riak、Membase、Neo4j 和 HBase等等,起码常用的了解一两个,比如Hbase,Mongodb,redis等。
5、开发工具及环境
比如:Linux OS、Hadoop(存储HDFS,计算Yarn)、Spark、或另外一些中间件。目前用得多的开发工具Java、python等等语言工具。
数据分析师就业前景
在被视为“数据元年”的今天,数据分析师以待遇优厚和地位尊崇而闻名国际,曾被Times时代杂志誉为“21世纪最热门五大新兴行业”。今天,国内数据分析行业专业人才每年以千位数非速增长着,同期各行业领域空缺岗位已达近二十万,未来中国对数据分析师的需求更是呈井喷之势。
在数据分析人才培养上,国外已经将数据分析师人才作为国家战略。据统计,目前世界 500 强企业中,有90% 以上建立了数据分析部门。大数据时代对数据分析师的巨大需求也大大刺激了高等院校的培养热情。
首先我们要了解Java语言和Linux *** 作系统,这两个是学习大数据的基础,学习的顺序不分前后。
大数据
Java :只要了解一些基础即可,做大数据不需要很深的Java 技术,学java SE 就相当于有学习大数据基础。
Linux:因为大数据相关软件都是在Linux上运行的,所以Linux要学习的扎实一些,学好Linux对你快速掌握大数据相关技术会有很大的帮助,能让你更好的理解hadoop、hive、hbase、spark等大数据软件的运行环境和网络环境配置,能少踩很多坑,学会shell就能看懂脚本这样能更容易理解和配置大数据集群。还能让你对以后新出的大数据技术学习起来更快。
Hadoop:这是现在流行的大数据处理平台几乎已经成为大数据的代名词,所以这个是必学的。Hadoop里面包括几个组件HDFS、MapReduce和YARN,HDFS是存储数据的地方就像我们电脑的硬盘一样文件都存储在这个上面,MapReduce是对数据进行处理计算的,它有个特点就是不管多大的数据只要给它时间它就能把数据跑完,但是时间可能不是很快所以它叫数据的批处理。
Zookeeper:这是个万金油,安装Hadoop的HA的时候就会用到它,以后的Hbase也会用到它。它一般用来存放一些相互协作的信息,这些信息比较小一般不会超过1M,都是使用它的软件对它有依赖,对于我们个人来讲只需要把它安装正确,让它正常的run起来就可以了。
Mysql:我们学习完大数据的处理了,接下来学习学习小数据的处理工具mysql数据库,因为一会装hive的时候要用到,mysql需要掌握到什么层度那你能在Linux上把它安装好,运行起来,会配置简单的权限,修改root的密码,创建数据库。这里主要的是学习SQL的语法,因为hive的语法和这个非常相似。
Sqoop:这个是用于把Mysql里的数据导入到Hadoop里的。当然你也可以不用这个,直接把Mysql数据表导出成文件再放到HDFS上也是一样的,当然生产环境中使用要注意Mysql的压力。
Hive:这个东西对于会SQL语法的来说就是神器,它能让你处理大数据变的很简单,不会再费劲的编写MapReduce程序。有的人说Pig那它和Pig差不多掌握一个就可以了。
Oozie:既然学会Hive了,我相信你一定需要这个东西,它可以帮你管理你的Hive或者MapReduce、Spark脚本,还能检查你的程序是否执行正确,出错了给你发报警并能帮你重试程序,最重要的是还能帮你配置任务的依赖关系。我相信你一定会喜欢上它的,不然你看着那一大堆脚本,和密密麻麻的crond是不是有种想屎的感觉。
Hbase:这是Hadoop生态体系中的NOSQL数据库,他的数据是按照key和value的形式存储的并且key是唯一的,所以它能用来做数据的排重,它与MYSQL相比能存储的数据量大很多。所以他常被用于大数据处理完成之后的存储目的地。
Kafka:这是个比较好用的队列工具,队列是干吗的排队买票你知道不数据多了同样也需要排队处理,这样与你协作的其它同学不会叫起来,你干吗给我这么多的数据(比如好几百G的文件)我怎么处理得过来,你别怪他因为他不是搞大数据的,你可以跟他讲我把数据放在队列里你使用的时候一个个拿,这样他就不在抱怨了马上灰流流的去优化他的程序去了,因为处理不过来就是他的事情。而不是你给的问题。当然我们也可以利用这个工具来做线上实时数据的入库或入HDFS,这时你可以与一个叫Flume的工具配合使用,它是专门用来提供对数据进行简单处理,并写到各种数据接受方(比如Kafka)的。
Spark:它是用来弥补基于MapReduce处理数据速度上的缺点,它的特点是把数据装载到内存中计算而不是去读慢的要死进化还特别慢的硬盘。特别适合做迭代运算,所以算法流们特别稀饭它。它是用scala编写的。Java语言或者Scala都可以 *** 作它,因为它们都是用JVM的。
想要都进入大数据行业的第一步,是先搞清楚大数据究竟有哪些就业方向。
大数据就业岗位
随着大数据技术在企业界如火如荼的实践,企业对组建大数据团队的迫切程度也也来越高,对与大数据相关高端人才的需求也越来越紧迫,但企业对大数据团队的组建和角色分配方面缺一直有不小的困惑,到底大数据团队里应该拥有哪些几类角色,如何设置岗位?同一类别的角色的专业方向又有哪些分化,不同专业的岗位对技能应该有哪些要求?如何管理大数据团队成员的职业发展路径?为此,ChinaHadoop花费了一年时间调研了先进企业内部设立的大数据部门或团队的组织结构和职能划分,在此基础上,首次提出了企业大数据团队的岗位划分,专业分类及定义,以及每个岗位所需的技能及培训,技能考核对应的能力级别,我们将之统称为”企业大数据人才岗位技能认证体系“。
通过对企业大数据人才岗位进行专业细分,岗位技能认证等级与企业现有技术专业通道形成对应关系,打通员工的职业发展通道,帮助企业逐步完善大数据团队的组织结构,不断提高团队技能,为各岗位及时储备人才。
大数据团队的角色分类企业大数据团队的角色分类主要有三个大类别:大数据开发工程师、大数据运维工程师、大数据架构师。总体而言,我们大数据人才划分为三个大类:
一、 大数据开发工程师:围绕大数据系平台系统级的研发人员, 熟练Hadoop、Spark、Storm等主流大数据平台的核心框架。深入掌握如何编写MapReduce的作业及作业流的管理完成对数据的计算,并能够使用Hadoop提供的通用算法,
熟练掌握Hadoop整个生态系统的组件如: Yarn,HBase、Hive、Pig等重要组件,能够实现对平台监控、辅助运维系统的开发。通过学习一系列面向开发者的Hadoop、Spark等大数据平台开发技术,掌握设计开发大数据系统或平台的工具和技能,能够从事分布式计算框架如Hadoop、Spark群集环境的部署、开发和管理工作,如性能改进、功能扩展、故障分析等。
二、 大数据运维工程师:了解Hadoop、Spark、Storm等主流大数据平台的核心框架,熟悉Hadoop的核心组件:HDFS、MapReduce、Yarn;具备大数据集群环境的资源配置,如网络要求、硬件配置、系统搭建。熟悉各种大数据平台的部署方式,集群搭建,故障诊断、日常维护、性能优化,同时负责平台上的数据采集、数据清洗、数据存储,数据维护及优化。熟练使用Flume、Sqoop等工具将外部数据加载进入大数据平台,通过管理工具分配集群资源实现多用户协同使用集群资源。
三、 大数据架构师:这一角色的要求是综合型的,对各种开源和商用的大数据系统平台和产品的特点非常熟悉,能基于Hadoop、Spark、 NoSQL、 Storm流式计算、分布式存储等主流大数据技术进行平台架构设计,负责企业选用软件产品的技术选型,具体项目中的数据库设计及实现工作,协助开发人员完成数据库部分的程序 ,能解决公司软件产品或者项目开发和运维中与数据库相关的问题; 及时解决项目开发或产品研发中的技术难题,对设计系统的最终性能和稳定性负责。
岗位能力级别定义:1 初级:具备基本的大数据技术的基础知识,可以将其视为大数据认证的初学或者入门等级。2 高级:大数据认证的高级或者熟练等级,表明该人才具备大数据某一专业方向的基本知识和熟练技能。3 专家:具有业界公认的专业大数据技术知识和丰富工作经验。
这里简单介绍几种我认为用的比较多的技术
一、Hadoop
可以说,hadoop几乎已经是大数据代名词。无论是是否赞成,hadoop已经是大部分企业的大数据标准。得益于Hadoop生态圈,从现在来看,还没有什么技术能够动摇hadoop的地位。
这一块可以按照一下内容来学习:
1、Hadoop产生背景 2、Hadoop在大数据、云计算中的位置和关系 3、国内外Hadoop应用案例介绍 4、国内Hadoop的就业情况分析及课程大纲介绍 5、分布式系统概述 6、Hadoop生态圈以及各组成部分的简介
二、分布式文件系统HDFS
HDFS全称 Hadoop Distributed File System ,它是一个高度容错性的系统,适合部署在廉价的机器上,同时能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。为了实现流式读取文件系统数据的目的,HDFS放宽了一部分POSIX约束。
1、分布式文件系统HDFS简介 2、HDFS的系统组成介绍 3、HDFS的组成部分详解 4、副本存放策略及路由规则 5、NameNode Federation 6、命令行接口 7、Java接口 8、客户端与HDFS的数据流讲解 9、HDFS的可用性(HA)
三、初级MapReduce
这是你成为Hadoop开发人员的基础课程。
MapReduce提供了以下的主要功能:
1)数据划分和计算任务调度:
2)数据/代码互定位:
3)系统优化:
4)出错检测和恢复:
这种编程模型主要用于大规模数据集(大于1TB)的并行运算。
1、如何理解map、reduce计算模型 2、剖析伪分布式下MapReduce作业的执行过程 3、Yarn模型 4、序列化 5、MapReduce的类型与格式 6、MapReduce开发环境搭建 7、MapReduce应用开发 8、熟悉MapReduce算法原理
四、高级MapReduce
这一块主要是高级Hadoop开发的技能,都是MapReduce为什么我要分开写呢?因为我真的不觉得谁能直接上手就把MapReduce搞得清清楚楚。
1、使用压缩分隔减少输入规模 2、利用Combiner减少中间数据 3、编写Partitioner优化负载均衡 4、如何自定义排序规则 5、如何自定义分组规则 6、MapReduce优化
五、Hadoop集群与管理
这里会涉及到一些比较高级的数据库管理知识,乍看之下都是 *** 作性的内容,但是做成容易,做好非常难。
1、Hadoop集群的搭建 2、Hadoop集群的监控 3、Hadoop集群的管理 4、集群下运行MapReduce程序
六、ZooKeeper基础知识
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
1、ZooKeeper体现结构 2、ZooKeeper集群的安装 3、 *** 作ZooKeeper
七、HBase基础知识
HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
与FUJITSU Cliq等商用大数据产品不同,HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。
1、HBase定义 2、HBase与RDBMS的对比 3、数据模型 4、系统架构 5、HBase上的MapReduce 6、表的设计
八、HBase集群及其管理
1、集群的搭建过程 2、集群的监控 3、集群的管理
十、Pig基础知识
Pig是进行Hadoop计算的另一种框架,是一个高级过程语言,适合于使用 Hadoop 和 MapReduce 平台来查询大型半结构化数据集。通过允许对分布式数据集进行类似 SQL 的查询,Pig 可以简化 Hadoop 的使用。
1、Pig概述 2、安装Pig 3、使用Pig完成手机流量统计业务
十一、Hive
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用。
1、数据仓库基础知识 2、Hive定义 3、Hive体系结构简介 4、Hive集群 5、客户端简介 6、HiveQL定义 7、HiveQL与SQL的比较 8、数据类型 9、表与表分区概念 10、表的 *** 作与CLI客户端 11、数据导入与CLI客户端 12、查询数据与CLI客户端 13、数据的连接与CLI客户端 14、用户自定义函数(UDF)
十二、Sqoop
Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
1、配置Sqoop 2、使用Sqoop把数据从MySQL导入到HDFS中 3、使用Sqoop把数据从HDFS导出到MySQL中
十三、Storm
Storm为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。这是管理队列及工作者集群的另一种方式。 Storm也可被用于“连续计算”(continuous computation),对数据流做连续查询,在计算时就将结果以流的形式输出给用户。它还可被用于“分布式RPC”,以并行的方式运行昂贵的运算。
1、Storm基础知识:包括Storm的基本概念和Storm应用 场景,体系结构与基本原理,Storm和Hadoop的对比 2、Storm集群搭建:详细讲述Storm集群的安装和安装时常见问题 3、Storm组件介绍: spout、bolt、stream groupings等 4、Storm消息可靠性:消息失败的重发 5、Hadoop 20和Storm的整合:Storm on YARN 6、Storm编程实战
数据分析需要掌握的知识:
1、数学知识
数学知识是数据分析师的基础知识。对于初级数据分析师,了解一些描述统计相关的基础内容,有一定的公式计算能力即可,了解常用统计模型算法则是加分。
对于高级数据分析师,统计模型相关知识是必备能力,线性代数(主要是矩阵计算相关知识)最好也有一定的了解。
2、分析工具
对于初级数据分析师,玩转Excel是必须的,数据透视表和公式使用必须熟练,VBA是加分。另外,还要学会一个统计分析工具,SPSS作为入门是比较好的。
对于高级数据分析师,使用分析工具是核心能力,VBA基本必备,SPSS/SAS/R至少要熟练使用其中之一,其他分析工具(如Matlab)视情况而定。
3、分析思维
比如结构化思维、思维导图、或百度脑图、麦肯锡式分析,了解一些smart、5W2H、SWOT等等那就更好了。不一定要掌握多深多全,但一定要了解一些。
4、数据库知识
大数据大数据,就是数据量很多,Excel就解决不了这么大数据量的时候,就得使用数据库。如果是关系型数据库,比如Oracle、mysql、sqlserver等等,你还得要学习使用SQL语句,筛选排序,汇总等等。非关系型数据库也得要学习,比如:Cassandra、Mongodb、CouchDB、Redis、 Riak、Membase、Neo4j 和 HBase等等,起码常用的了解一两个,比如Hbase,Mongodb,redis等。
5、开发工具及环境
比如:Linux OS、Hadoop(存储HDFS,计算Yarn)、Spark、或另外一些中间件。目前用得多的开发工具Java、python等等语言工具。
大数据技术专业属于交叉学科:以统计学、数学、计算机为三大支撑性学科;生物、医学、环境科学、经济学、社会学、管理学为应用拓展性学科。
此外还需学习数据采集、分析、处理软件,学习数学建模软件及计算机编程语言等,知识结构是二专多能复合的跨界人才(有专业知识、有数据思维)。
以中国人民大学为例:
基础课程:数学分析、高等代数、普通物理数学与信息科学概论、数据结构、数据科学导论、程序设计导论、程序设计实践。
必修课:离散数学、概率与统计、算法分析与设计、数据计算智能、数据库系统概论、计算机系统基础、并行体系结构与编程、非结构化大数据分析。
选修课:数据科学算法导论、数据科学专题、数据科学实践、互联网实用开发技术、抽样技术、统计学习、回归分析、随机过程。
大数据岗位:
1、大数据系统架构师
大数据平台搭建、系统设计、基础设施。技能:计算机体系结构、网络架构、编程范式、文件系统、分布并行处理等。
2、大数据系统分析师
面向实际行业领域,利用大数据技术进行数据安全生命周期管理、分析和应用。技能:人工智能、机器学习、数理统计、矩阵计算、优化方法。
3、hadoop开发工程师。解决大数据存储问题。
4、数据分析师
不同行业中,专门从事行业数据搜集、整理、分析,并依据数据做出行业研究、评估和预测的专业人员。在工作中通过运用工具,提取、分析、呈现数据,实现数据的商业意义。
5、数据挖掘工程师
做数据挖掘要从海量数据中发现规律,这就需要一定的数学知识,最基本的比如线性代数、高等代数、凸优化、概率论等。经常会用到的语言包括Python、Java、C或者C++,我自己用Python或者Java比较多。有时用MapReduce写程序,再用Hadoop或者Hyp来处理数据,如果用Python的话会和Spark相结合。
以上就是关于技术干货:SQL on Hadoop在快手大数据平台的实践与优化全部的内容,包括:技术干货:SQL on Hadoop在快手大数据平台的实践与优化、怎样搭建平台、数据分析需要学哪些等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)