数据学习教程:五⼤核⼼技术有哪些?
⼤数据技术的体系庞⼤且复杂,基础的技术包含数据的采集、数据预处理、分布式存储、NoSQL数据库、数据仓库、机器学习、并⾏计算、可视化等各种技术范畴和不同的技术层⾯。⾸先给出⼀个通⽤化的⼤数据处理框架,主要分为下⾯⼏个⽅⾯:数据采集与预处理、数据存储、数据清洗、数据查询分析和数据可视化。
⼀、数据采集与预处理
对于各种来源的数据,包括移动互联⽹数据、社交⽹络的数据等,这些结构化和⾮结构化的海量数据是零散的,也就是所谓的数据孤岛,此时的这些数据并没有什么意义,数据采集就是将这些数据写⼊数据仓库中,把零散的数据整合在⼀起,对这些数据综合起来进⾏分析。数据采集包括⽂件⽇志的采集、数据库⽇志的采集、关系型数据库的接⼊和应⽤程序的接⼊等。在数据量⽐较⼩的时候,可以写个定时的脚本将⽇志写⼊存储系统,但随着数据量的增长,这些⽅法⽆法提供数据安全保障,并且运维困难,需要更强壮的解决⽅案。张咪事件
吴毅将Flume NG作为实时⽇志收集系统,⽀持在⽇志系统中定制各类数据发送⽅,⽤于收集数据,同时,对数据进⾏简单处理,并写到各种数据接收⽅(⽐如⽂本,HDFS,Hbase等)。Flume NG采⽤的是三层架构:Agent层,Collector层和Store层,每⼀层均可⽔平拓展。其中Agent包含Source,Channel和 Sink,
source⽤来消费(收集)数据源到channel组件中,channel作为中间临时存储,保存所有source的组件信息,sink从channel中读取数据,读取成功之后会删除channel中的信息。
NDC,Netease Data Canal,直译为⽹易数据运河系统,是⽹易针对结构化数据库的数据实时迁移、同步和订阅的平台化解决⽅案。它整合了⽹易过去在数据传输领域的各种⼯具和经验,将单机数据库、分布式数据库、OLAP系统以及下游应⽤通过数据链路串在⼀起。除了保障⾼效的数据传输外,NDC的设计遵循了单元化和平台化的设计哲学。Logstash是开源的服务器端数据处理管道,能够同时从多个来源采集数据、转换数据,然后将数据发送到您最喜欢的“存储库” 中。⼀般常⽤的存储库是Elasticsearch。Logstash ⽀持各种输⼊选择,可以在同⼀时间从众多常⽤的数据来源捕捉事件,能够以连续的流式传输⽅式,轻松地从您的⽇志、指标、Web 应⽤、数据存储以及各种 AWS 服务采集数据。
Sqoop,⽤来将关系型数据库和Hadoop中的数据进⾏相互转移的⼯具,可以将⼀个关系型数据库(例如Mysql、Oracle)中的数据导⼊到Hadoop(例如HDFS、Hive、Hbase)中,也可以将Hadoop(例如HDFS、Hive、Hbase)中的数据导⼊到关系型数据库(例如Mysql、Oracle)中。Sqoop 启⽤了⼀个 MapReduce 作业(极其容错的分布式并⾏计算)来执⾏任务。Sqoop 的另⼀⼤优势是其传输⼤量结构化或半结构化数据的过程是完全⾃动化的。
流式计算是⾏业研究的⼀个热点,流式计算对多个⾼吞吐量的数据源进⾏实时的清洗、聚合和分析,可以对存在于社交⽹站、新闻等的数据信息流进⾏快速的处理并反馈,⽬前⼤数据流分析⼯具有很多,⽐如开源的strom,spark streaming等。
Strom集结构是有⼀个主节点(nimbus)和多个⼯作节点(supervisor)组成的主从结构,主节点通过配置静态指定或者在运⾏时动态选举,nimbus与supervisor都是Storm提供的后台守护进程,之间的通信是结合Zookeeper的状态变更通知和监控通知来处理。nimbus进程的主要职责是管理、协调和监控集上运⾏的topology(包括topology的发布、任务指派、事件处理时重新指派任务等)。supervisor进程等待nimbus分配任务后⽣成并监控worker(jvm进程)执⾏任务。
派、事件处理时重新指派任务等)。supervisor进程等待nimbus分配任务后⽣成并监控worker(jvm进程)执⾏任务。supervisor与worker运⾏在不同的jvm上,如果由supervisor启动的某个worker因为错误异常退出(或被kill
网络竞技游戏排行榜掉),supervisor会尝试重新⽣成新的worker进程。
当使⽤上游模块的数据进⾏计算、统计、分析时,就可以使⽤消息系统,尤其是分布式消息系统。Kafka使⽤Scala进⾏编写,是⼀种分布式的、基于发布/订阅的消息系统。Kafka的设计理念之⼀就是同时提供离线处理和实时处理,以及将数据实时备份到另⼀个数据中⼼,Kafka可以有许多的⽣产者
和消费者分享多个主题,将消息以topic为单位进⾏归
纳;Kafka发布消息的程序称为producer,也叫⽣产者,预订topics并消费消息的程序称为consumer,也叫消费者;当Kafka以集的⽅式运⾏时,可以由⼀个服务或者多个服务组成,每个服务叫做⼀个broker,运⾏过程中producer通过⽹络将消息发送到Kafka集,集向消费者提供消息。Kafka通过Zookeeper管理集配置,选举leader,以及在Consumer Group发⽣变化时进⾏rebalance。Producer使⽤push模式将消息发布到broker,Consumer使⽤pull模式从broker订阅并消费消息。⼤数据技术学习交流kou裙,数字515数字269数字485 ,Kafka可以和Flume⼀起⼯作,如果需要将流式数据从Kafka转移到hadoop,可以使⽤Flume代理agent,将Kafka当做⼀个来源source,这样可以从Kafka读取数据到Hadoop。
Zookeeper是⼀个分布式的,开放源码的分布式应⽤程序协调服务,提供数据同步服务。它的作⽤主要有配置管理、名字服务、分布式锁和集管理。配置管理指的是在⼀个地⽅修改了配置,那么对这个地⽅的配置感兴趣的所有的都可以获得变更,省去了⼿动拷贝配置的繁琐,还很好的保证了数据的可靠和⼀致性,同时它可以通过名字来获取资源或者服务的地址等信息,可以监控集中机器的变化,实现了类似于⼼跳机制的功能。
⼆、数据存储
Hadoop作为⼀个开源的框架,专为离线和⼤规模数据分析⽽设计,HDFS作为其核⼼的存储引擎,已被⼴泛⽤于数据存储。
HBase,是⼀个分布式的、⾯向列的开源数据库,可以认为是hdfs的封装,本质是数据存储、NoSQL数据库。HBase 是⼀种Key/Value系统,部署在hdfs上,克服了hdfs在随机读写这个⽅⾯的缺点,与hadoop⼀样,Hbase⽬标主要依靠横向扩展,通过不断增加廉价的商⽤服务器,来增加计算和存储能⼒。
Phoenix,相当于⼀个Java中间件,帮助开发⼯程师能够像使⽤JDBC访问关系型数据库⼀样访问NoSQL数据库HBase。
Yarn是⼀种Hadoop资源管理器,可为上层应⽤提供统⼀的资源管理和调度,它的引⼊为集在利⽤率、资源统⼀管理和数据共享等⽅⾯带来了巨⼤好处。Yarn由下⾯的⼏⼤组件构成:⼀个全局的资源管理器ResourceManager、ResourceManager的每个节点代理NodeManager、表⽰每个应⽤的Application以及每⼀个ApplicationMaster拥有多个Container在NodeManager上运⾏。
Mesos是⼀款开源的集管理软件,⽀持Hadoop、ElasticSearch、Spark、Storm 和Kafka等应⽤架构。
Redis是⼀种速度⾮常快的⾮关系数据库,可以存储键与5种不同类型的值之间的映射,可以将存储在内存的键值对数据持久化到硬盘中,使⽤复制特性来扩展性能,还可以使⽤客户端分⽚来扩展写性能。
Atlas是⼀个位于应⽤程序与MySQL之间的中间件。在后端DB看来,Atlas相当于连接它的客户端,在前端应⽤看
来,Atlas相当于⼀个DB。Atlas作为服务端与应⽤程序通讯,它实现了MySQL的客户端和服务端协议,同时作为客户端与MySQL通讯。它对应⽤程序屏蔽了DB的细节,同时为了降低MySQL负担,它还维护了连接池。Atlas启动后会创建多个线程,其中⼀个为主线程,其余为⼯作线程。主线程负责监听所有的客户端连接请求,⼯作线程只监听主线程的命令请求。
Kudu是围绕Hadoop⽣态圈建⽴的存储引擎,Kudu拥有和Hadoop⽣态圈共同的设计理念,它运⾏在普通的服务器上、可分布式规模化部署、并且满⾜⼯业界的⾼可⽤要求。其设计理念为fast analytics on fast data。作为⼀个开源的存储引擎,可以同时提供低延迟的随机读写和⾼效的数据分析能⼒。Kudu不但提供了⾏级的插⼊、更新、删除API,同时也提供了接近Parquet性能的批量扫描操作。使⽤同⼀份存储,既可以进⾏随机读写,也可以满⾜数据分析的要求。Kudu的应⽤场景很⼴泛,⽐如可以进⾏实时的数据分析,⽤于数据可能会存在变化的时序数据应⽤等。
在数据存储过程中,涉及到的数据表都是成千上百列,包含各种复杂的Query,推荐使⽤列式存储⽅法,⽐如parquent,ORC等对数据进⾏压缩。Parquet 可以⽀持灵活的压缩选项,显著减少磁盘上的存储。
三、数据清洗
相宜本草眼霜好用吗MapReduce作为Hadoop的查询引擎,⽤于⼤规模数据集的并⾏计算,”Map(映射)”和”Reduce(归约)”,是它的主要思想。它极⼤的⽅便了编程⼈员在不会分布式并⾏编程的情况下,将⾃⼰的程序运⾏在分布式系统中。
随着业务数据量的增多,需要进⾏训练和清洗的数据会变得越来越复杂,这个时候就需要任务调度系统,⽐如oozie或者azkaban,对关键任务进⾏调度和监控。
Oozie是⽤于Hadoop平台的⼀种⼯作流调度引擎,提供了RESTful API接⼝来接受⽤户的提交请求(提交⼯作流作业),当提交了workflow后,由⼯作流引擎负责workflow的执⾏以及状态的转换。⽤户在HDFS上部署好作业(MR作业),然后向Oozie提交Workflow,Oozie以异步⽅式将作业(MR作业)提交给Hadoop。这也是为什么当调⽤Oozie 的RESTful接⼝提交作业之后能⽴即返回⼀个JobId的原因,⽤户程序不必等待作业执⾏完成(因为有些⼤作业可能会执⾏很久(⼏个⼩时甚⾄⼏天))。Oozie在后台以异步⽅式,再将workflow对应的Action提交给hadoop执⾏。
Azkaban也是⼀种⼯作流的控制引擎,可以⽤来解决有多个hadoop或者spark等离线计算任务之间的依赖关系问题。azkaban主要是由三部分构成:Relational Database,Azkaban Web Server和Azkaban Executor Server。azkaban将⼤多数的状态信息都保存在MySQL中,Azkaban Web Server提供了Web UI,是azkaban主要的管理者,包括project的管理、认证、调度以及对⼯作流执⾏过程中的监控等;Azkaban Executor Server⽤来调度⼯作流和任务,记录⼯作流或者任务的⽇志。
流计算任务的处理平台Sloth,是⽹易⾸个⾃研流计算平台,旨在解决公司内各产品⽇益增长的流计算需求。作为⼀个计算服务平台,其特点是易⽤、实时、可靠,为⽤户节省技术⽅⾯(开发、运维)的投⼊,帮助⽤户专注于解决产品本⾝的流计算需求。
四、数据查询分析
Hive的核⼼⼯作就是把SQL语句翻译成MR程序,可以将结构化的数据映射为⼀张数据库表,并提供 HQL(Hive SQL)查询功能。Hive本⾝不存储和计算数据,它完全依赖于HDFS和MapReduce。可以将Hive理解为⼀个客户端⼯具,将SQL操作转换为相应的MapReduce jobs,然后在hadoop上⾯运⾏。Hive⽀持标准的SQL语法,免去了⽤户编写MapReduce程序的过程,它的出现可以让那些精通SQL技能、但是不熟悉MapReduce 、编程能⼒较弱与不擅长Java语⾔的⽤户能够在HDFS⼤规模数据集上很⽅便地利⽤SQL 语⾔查询、汇总、分析数据。
Hive是为⼤数据批量处理⽽⽣的,Hive的出现解决了传统的关系型数据库(MySql、Oracle)在⼤数据处理上的瓶颈。Hive 将执⾏计划分成map-shuffle-reduce-map-shuffle-reduce…的模型。如果⼀个Query会被编译成多轮MapReduce,则会有更多的写中间结果。由于MapReduce执⾏框架本⾝的特点,过多的中间过程会增加整个Query的执⾏时间。在Hive的运⾏过程中,⽤户只需要创建表,导⼊数据,编写SQL分析语句即可。剩下的过程由Hive框架⾃动的完成。Impala是对Hive的⼀个补充,可以实现⾼效的SQL查询。使⽤Impala来实现SQL on Hadoop,⽤来进⾏⼤数据实时查询分析。通过熟悉的传统关系型数据库的SQL风格来操作⼤数据,同时数据也是可以存储到HDFS和HBase中的。Impala 没有再使⽤缓慢的Hive+MapReduce批处理,⽽是通过使⽤与商⽤并⾏关系数据库中类似的分布式查询引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分组成),可以直接从HDFS或HBase中⽤SELECT、JOIN和统计函数查询数据,从⽽⼤⼤降低了延迟。Impala将整个查询分成⼀执⾏计划树,⽽不是⼀连串的MapReduce任务,相⽐Hive没了MapReduce启动时间。
Hive 适合于长时间的批处理查询分析,⽽Impala适合于实时交互式SQL查询,Impala给数据⼈员提供了快速实验,验证想法的⼤数据分析⼯具,可以先使⽤Hive进⾏数据转换处理,之后使⽤Impala在Hive处理好后的数据集上进⾏快速的数据分析。总的来说:Impala把执⾏计划表现为⼀棵完整的执⾏计划树,可以更⾃然地分发执⾏计划到各个Impalad执⾏查询,⽽不⽤像Hive那样把它组合成管道型的map-reduce模式,以此保证Impala有更好的并发性和避免不必要的中间sort与shuffle。但是Impala不⽀持UDF,能处理的问题有⼀定的限制。
北国的春风
Spark拥有Hadoop MapReduce所具有的特点,它将Job中间输出结果保存在内存中,从⽽不需要读取HDFS。Spark 启⽤了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代⼯作负载。Spark 是在 Scala 语⾔中实现的,它将 Scala ⽤作其应⽤程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象⼀样轻松地操作分布式数据集。
Nutch 是⼀个开源Java 实现的搜索引擎。它提供了我们运⾏⾃⼰的搜索引擎所需的全部⼯具,包括全⽂搜索和Web爬⾍。
Solr⽤Java编写、运⾏在Servlet容器(如Apache Tomcat或Jetty)的⼀个独⽴的企业级搜索应⽤的全⽂搜索服务器。它对外提供类似于Web-service的API接⼝,⽤户可以通过http请求,向搜索引擎服务器提交⼀定格式的XML⽂件,⽣成索引;
外提供类似于Web-service的API接⼝,⽤户可以通过http请求,向搜索引擎服务器提交⼀定格式的XML⽂件,⽣成索引;也可以通过Http Get操作提出查请求,并得到XML格式的返回结果。
Elasticsearch是⼀个开源的全⽂搜索引擎,基于Lucene的搜索服务器,可以快速的储存、搜索和分析海量的数据。设计⽤于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使⽤⽅便。
还涉及到⼀些机器学习语⾔,⽐如,Mahout主要⽬标是创建⼀些可伸缩的机器学习算法,供开发⼈员
在Apache的许可下免费使⽤;深度学习框架Caffe以及使⽤数据流图进⾏数值计算的开源软件库TensorFlow等,常⽤的机器学习算法⽐如,贝叶斯、逻辑回归、决策树、神经⽹络、协同过滤等。
五、数据可视化
对接⼀些BI平台,将分析得到的数据进⾏可视化,⽤于指导决策服务。主流的BI平台⽐如,国外的敏捷BI Tableau、Qlikview、PowrerBI等,国内的SmallBI和新兴的⽹易有数等。
在上⾯的每⼀个阶段,保障数据的安全是不可忽视的问题。
基于⽹络⾝份认证的协议Kerberos,⽤来在⾮安全⽹络中,对个⼈通信以安全的⼿段进⾏⾝份认证,它允许某实体在⾮安全⽹络环境下通信,向另⼀个实体以⼀种安全的⽅式证明⾃⼰的⾝份。
控制权限的ranger是⼀个Hadoop集权限框架,提供操作、监控、管理复杂的数据权限,它提供⼀个集中的管理机制,管理基于yarn的Hadoop⽣态圈的所有数据权限。可以对Hadoop⽣态的组件如Hive,Hbase进⾏细粒度的数据访问控制。通过操作Ranger控制台,管理员可以轻松的通过配置策略来控制⽤户访问HDFS⽂件夹、HDFS⽂件、数据库、表、字段权限。这些策略可以为不同的⽤户和组来设置,同时权限可与hadoop⽆缝对接。
简单说有三⼤核⼼技术:拿数据,算数据,卖数据。
⾸先做为⼤数据,拿不到⼤量数据都⽩扯。现在由于机器学习的兴起,以及万⾦油算法的崛起,导致算法地位下降,数据地位提⾼了。举个通俗的例⼦,就好⽐由于教育的发展,导致个⼈智⼒重要性降低,教育背景变重要了,因为⼀般⼈按标准流程读个书,就能⽐⽜顿懂得多了。⾕歌就说:拿⽜逼的数据喂给⼀个⼀般的算法,很多情况下好于拿傻傻的数据喂给⽜逼的算法。⽽且知不知道弄个⽜逼算法有多困难?⼀般⼈连这个困难度都搞不清楚好不好……拿数据很重要,⼤数据技术学习交流kou裙,数字515数字269数字485,巧妇难为⽆⽶之炊呀!所以为什么好多公司要烧钱抢⼊⼝,抢⽤户,是为了争夺数据源呀!不过运营,和产品更关注这个,我是程序员,我不管……
其次就是算数据,如果数据拿到直接就有价值地话,那也就不需要公司了,政府直接赚外快就好了。苹果落地都能看到,⼈家⽜顿能整个万有引⼒,我就只能捡来吃掉,差距呀……所以数据在那⾥摆着,能挖出啥就各凭本事了。算数据就需要计算平台了,数据怎么存(HDFS, S3, HBase, Cassandra),怎么算(Hadoop, Spark)就靠咱们程序猿了……
再次就是卖得出去才能变现,否则就是搞公益了,⽐如《疑犯追踪》⾥⾯的李四和⼤锤他们……见⼈所未见,预测未来并趋利避害才是智能的终极⽬标以及存在意义,对吧?这个得靠⼤家⼀块⼉琢磨。
孙神州其实我觉得最后那个才是“核⼼技术”,什么Spark,Storm,Deep-Learning,都是第⼆梯队的……当然,没有强⼤的算⼒做⽀撑,智能应该也⽆从说起吧。