❶ 大数据专业主要学什么
“大数据”简单来说,就是一些把我们需要观察的对象数据化,然后把数据输入计算机,让计算机对这些大量的数据进行分析之后,给出我们一些结论。
①JavaSE核心技术
②Hadoop平台核心技术、Hive开发、HBase开发
③Spark相关技术、Scala基本编程
④掌握Python基本使用、核心库的使用、Python爬虫、简单数据分析;理解Python机器学习
⑤大数据项目开发实战,大数据系统管理优化
⑥云平台开发技术
整体来说,大数据课程知识点多,课程难度较大。虽然是0基础入门,但企业对大数据人才招聘要求高,至少需要本科学历,建议本科及以上学历同学报名。
南京北大青鸟祝你学有所成!
北大青鸟中博软件学院小班教学实拍
❷ 学习java,C++,大数据我们如何成为技术大牛
仅供参考:
0段—非程序员:
初学编程者,遇到问题,完全是懵懵懂懂,不知道该怎么编程解决问题。也就是说,还是门外汉,还不能称之为“程序员”。计算机在他面前还是一个神秘的黑匣子。
1段—基础程序员:
学习过一段时间编程后,接到任务,可以编写程序完成任务。
编写出来的代码,正常情况下是能够工作的,但在实际运行中,碰到一些特殊条件就会出现各类BUG。也就是说,具备了开发Demo软件的能力,但开发的软件真正交付给客户使用,恐怕会被客户骂死。
程序员程序是写好了,但到底为什么它有时能正常工作,有时又不行,程序员自己也不知道。
运行中遇到了bug,或者需求改变,需要修改代码或者添加代码,很快程序就变得结构混乱,代码膨胀,bug丛生。很快,就连最初的开发者自己也不愿意接手维护这个程序了。
2段—数据结构:
经过一段时间的编程实践后,程序员会认识到“数据结构+算法=程序”这一古训的含义。他们会使用算法来解决问题。进而,他们会认识到,算法本质上是依附于数据结构的,好的数据结构一旦设计出来,那么好的算法也会应运而生。
设计错误的数据结构,不可能生长出好的算法。
记得某一位外国先贤曾经说过:“给我看你的数据结构!”
3段—面向对象:
再之后,程序员就会领略面向对象程序设计的强大威力。大多数现代编程语言都是支持面向对象的。但并不是说,你使用面向对象编程语言编程,你用上了类,甚至继承了类,你就是在写面向对象的代码了。
我曾经见过很多用Java,Python,Ruby写的面向过程的代码。
只有你掌握了接口,掌握了多态,掌握了类和类,对象和对象之间的关系,你才真正掌握了面向对象编程技术。
就算你用的是传统的不支持面向对象的编程语言,只要你心中有“对象”,你依然可以开发出面向对象的程序。
如,我用C语言编程的时候,会有意识的使用面向对象的技巧来编写和设计程序。用struct来模拟类,把同一类概念的函数放在一起模拟类。如果你怀疑用C语言是否能编写出面向对象的代码,你可以看一下Linux内核,它是用C语言编写的,但你也可以看到它的源代码字里行间散发出的浓浓的“对象”的味道。
真正掌握面向对象编程技术并不容易。
在我的技术生涯中,有两个坎让我最感头疼。
一个坎是Dos向Windows开发的变迁过程中,框架的概念,很长一段时间我都理解不了。Dos时代,都是对函数库的调用,你的程序主动调用函数。Windows时代,则换成了框架。就算是你的main程序,其实也是被框架调用的。UI线程会从操作系统获取消息,然后发送给你的程序来处理。Java程序员熟悉的Spring框架,也是这样一个反向调用的框架。
现在因为“框架”这个术语显得很高大上,因此很多“类库”/“函数库”都自称为“框架”。在我看来这都是名称的滥用。
“类库”/“函数库”就是我写的代码调用它们。
“框架”就是我注册回调函数到框架,框架来调用我写的函数。
另一个坎就是面向对象。很长一段时间我都不知道应该怎么设计类和类之间的关系,不能很好的设计出类层次结构来。
我记得当时看到一本外国大牛的书,他讲了一个很简单、很实用的面向对象设计技巧:“叙述问题。然后把其中的名词找出来,用来构建类。把其中的动词找出来,用来构建类的方法”。虽然这个技巧挺管用的,但也太草根了点,没有理论依据,也不严谨。如果问题叙述的不好,那么获得的类系统就会是有问题的。
掌握面向对象思想的途径应该有很多种,我是从关系数据库中获得了灵感来理解和掌握面向对象设计思想的。
在我看来,关系数据库的表,其实就是一个类,每一行记录就是一个类的实例,也就是对象。表之间的关系,就是类之间的关系。O-Rmapping技术(如Hibernate),用于从面向对象代码到数据库表之间的映射,这也说明了类和表确实是逻辑上等价的。
既然数据库设计和类设计是等价的,那么要设计面向对象系统,只需要使用关系数据库的设计技巧即可。
关系数据库表结构设计是很简单的:
1,识别表和表之间的关系,也就是类和类之间的关系。是一对一,一对多,多对一,还是多对多。这就是类之间的关系。
2,识别表的字段。一个对象当然有无数多的属性(如,人:身高,体重,性别,年龄,姓名,身份证号,驾驶证号,银行卡号,护照号,港澳通行证号,工号,病史,婚史etc),我们写程序需要记录的只是我们关心的属性。这些关心的属性,就是表的字段,也就是类的属性。“弱水三千,我取一瓢饮”!
4段—设计模式:
曾经在网上看到这样一句话:“没有十万行代码量,就不要跟我谈什么设计模式”。深以为然。
记得第一次看Gof的设计模式那本书的时候,发现虽然以前并不知道设计模式,但在实际编程过程中,其实还是自觉使用了一些设计模式。设计模式是编程的客观规律,不是谁发明的,而是一些早期的资深程序员首先发现的。
不用设计模式,你也可以写出满足需求的程序来。但是,一旦后续需求变化,那么你的程序没有足够的柔韧性,将难以为继。而真实的程序,交付客户后,一定会有进一步的需求反馈。而后续版本的开发,也一定会增加需求。这是程序员无法回避的现实。
写UI程序,不论是Web,Desktop,Mobile,Game,一定要使用MVC设计模式。否则你的程序面对后续变化的UI需求,将无以为继。
设计模式,最重要的思想就是解耦,通过接口来解耦。这样,如果将来需求变化,那么只需要提供一个新的实现类即可。
主要的设计模式,其实都是面向对象的。因此,可以认为设计模式是面向对象的高级阶段。只有掌握了设计模式,才能认为是真正彻底掌握了面向对象设计技巧。
我学习一门新语言时(包括非面向对象语言,如函数式编程语言),总是会在了解了其语法后,看一下各类设计模式在这门语言中是如何实现的。这也是学习编程语言的一个窍门。
5段--语言专家:
经过一段时间的编程实践,程序员对某一种常用的编程语言已经相当精通了。有些人还成了“语言律师”,擅长向其他程序员讲解语言的用法和各种坑。
这一阶段的程序员,常常是自己所用语言的忠实信徒,常在社区和论坛上和其他语言的使用者争论哪一种语言是最好的编程语言。他们认为自己所用的语言是世界上最好的编程语言,没有之一。他们认为,自己所用的编程语言适用于所有场景。他们眼中,只有锤子,因此会把所有任务都当成是钉子。
6段--多语言专家:
这一个阶段的程序员,因为工作关系,或者纯粹是因为对技术的兴趣,已经学习和掌握了好几种编程语言。已经领略了不同编程语言不同的设计思路,对每种语言的长处和短处有了更多的了解。
他们现在认为,编程语言并不是最重要的,编程语言不过是基本功而已。
他们现在会根据不同的任务需求,或者不同的资源来选择不同的编程语言来解决问题,不再会因为没有使用某一种喜爱的编程语言开发而埋怨。
❸ 大数据如何入门
首先我们要了解Java语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。
大数据
Java :只要了解一些基础即可,做大数据不需要很深的Java 技术,学java SE 就相当于有学习大数据基础。
Linux:因为大数据相关软件都是在Linux上运行的,所以Linux要学习的扎实一些,学好Linux对你快速掌握大数据相关技术会有很大的帮助,能让你更好的理解hadoop、hive、hbase、spark等大数据软件的运行环境和网络环境配置,能少踩很多坑,学会shell就能看懂脚本这样能更容易理解和配置大数据集群。还能让你对以后新出的大数据技术学习起来更快。
Hadoop:这是现在流行的大数据处理平台几乎已经成为大数据的代名词,所以这个是必学的。Hadoop里面包括几个组件HDFS、MapRece和YARN,HDFS是存储数据的地方就像我们电脑的硬盘一样文件都存储在这个上面,MapRece是对数据进行处理计算的,它有个特点就是不管多大的数据只要给它时间它就能把数据跑完,但是时间可能不是很快所以它叫数据的批处理。
Zookeeper:这是个万金油,安装Hadoop的HA的时候就会用到它,以后的Hbase也会用到它。它一般用来存放一些相互协作的信息,这些信息比较小一般不会超过1M,都是使用它的软件对它有依赖,对于我们个人来讲只需要把它安装正确,让它正常的run起来就可以了。
Mysql:我们学习完大数据的处理了,接下来学习学习小数据的处理工具mysql数据库,因为一会装hive的时候要用到,mysql需要掌握到什么层度那?你能在Linux上把它安装好,运行起来,会配置简单的权限,修改root的密码,创建数据库。这里主要的是学习SQL的语法,因为hive的语法和这个非常相似。
Sqoop:这个是用于把Mysql里的数据导入到Hadoop里的。当然你也可以不用这个,直接把Mysql数据表导出成文件再放到HDFS上也是一样的,当然生产环境中使用要注意Mysql的压力。
Hive:这个东西对于会SQL语法的来说就是神器,它能让你处理大数据变的很简单,不会再费劲的编写MapRece程序。有的人说Pig那?它和Pig差不多掌握一个就可以了。
Oozie:既然学会Hive了,我相信你一定需要这个东西,它可以帮你管理你的Hive或者MapRece、Spark脚本,还能检查你的程序是否执行正确,出错了给你发报警并能帮你重试程序,最重要的是还能帮你配置任务的依赖关系。我相信你一定会喜欢上它的,不然你看着那一大堆脚本,和密密麻麻的crond是不是有种想屎的感觉。
Hbase:这是Hadoop生态体系中的NOSQL数据库,他的数据是按照key和value的形式存储的并且key是唯一的,所以它能用来做数据的排重,它与MYSQL相比能存储的数据量大很多。所以他常被用于大数据处理完成之后的存储目的地。
Kafka:这是个比较好用的队列工具,队列是干吗的?排队买票你知道不?数据多了同样也需要排队处理,这样与你协作的其它同学不会叫起来,你干吗给我这么多的数据(比如好几百G的文件)我怎么处理得过来,你别怪他因为他不是搞大数据的,你可以跟他讲我把数据放在队列里你使用的时候一个个拿,这样他就不在抱怨了马上灰流流的去优化他的程序去了,因为处理不过来就是他的事情。而不是你给的问题。当然我们也可以利用这个工具来做线上实时数据的入库或入HDFS,这时你可以与一个叫Flume的工具配合使用,它是专门用来提供对数据进行简单处理,并写到各种数据接受方(比如Kafka)的。
Spark:它是用来弥补基于MapRece处理数据速度上的缺点,它的特点是把数据装载到内存中计算而不是去读慢的要死进化还特别慢的硬盘。特别适合做迭代运算,所以算法流们特别稀饭它。它是用scala编写的。Java语言或者Scala都可以操作它,因为它们都是用JVM的。
❹ 大数据专业需要毕业后写代码吗累吗
大数据专业也属于计算机领域的。而且了,今后大数据(Big Data)还是计算机领域的必然趋势。毕业后当然需要写程序代码了。
至于说计算机软件编程到底是否累这个问题,根据我多年的编程经验就是一个字:累。
但是同时也能够从累中体会到编程的快乐。当你花费很长时间终于调试通过一个源程序,看到运行出了正确运行结果那一刻,那种喜悦是无法表达的。
最后我的亲身体会就是一句话:累并快乐着!!
❺ 大数据专业学什么编程
大数据前景是很不错的,像大数据这样的专业还是一线城市比较好,师资力量跟得上、就业的薪资也是可观的,学习大数据可以按照路线图的顺序,
0基础学习Java是没有问题的,关键是找到靠谱的Java培训机构,你可以深度了解机构的口碑情况,问问周围知道这家机构的人,除了口碑再了解机构的以下几方面:
1. 师资力量雄厚
要想有1+1>2的实际效果,很关键的一点是师资队伍,你接下来无论是找个工作还是工作中出任哪些的人物角色,都越来越爱你本身的技术专业java技术性,也许的技术专业java技术性则绝大多数来自你的技术专业java教师,一个好的java培训机构必须具备雄厚的师资力量。
2. 就业保障完善
实现1+1>2效果的关键在于能够为你提供良好的发展平台,即能够为你提供良好的就业保障,让学员能够学到实在实在的知识,并向java学员提供一对一的就业指导,确保学员找到自己的心理工作。
3. 学费性价比高
一个好的Java培训机构肯定能给你带来1+1>2的效果,如果你在一个由专业的Java教师领导并由Java培训机构自己提供的平台上工作,你将获得比以往更多的投资。
希望你早日学有所成。
❻ 大数据需要学编程吗
导读:
第一章:初识Hadoop
第二章:更高效的WordCount
第三章:把别处的数据搞到Hadoop上
第四章:把Hadoop上的数据搞到别处去
第五章:快一点吧,我的SQL
第六章:一夫多妻制
第七章:越来越多的分析任务
第八章:我的数据要实时
第九章:我的数据要对外
第十章:牛逼高大上的机器学习
经常有初学者在博客和QQ问我,自己想往大数据方向发展,该学哪些技术,学习路线是什么样的,觉得大数据很火,就业很好,薪资很高。如果自己很迷茫,为了这些原因想往大数据方向发展,也可以,那么我就想问一下,你的专业是什么,对于计算机/软件,你的兴趣是什么?是计算机专业,对操作系统、硬件、网络、服务器感兴趣?是软件专业,对软件开发、编程、写代码感兴趣?还是数学、统计学专业,对数据和数字特别感兴趣。。
其实这就是想告诉你的大数据的三个发展方向,平台搭建/优化/运维/监控、大数据开发/设计/架构、数据分析/挖掘。请不要问我哪个容易,哪个前景好,哪个钱多。
先扯一下大数据的4V特征:
数据量大,TB->PB
数据类型繁多,结构化、非结构化文本、日志、视频、图片、地理位置等;
商业价值高,但是这种价值需要在海量数据之上,通过数据分析与机器学习更快速的挖掘出来;
处理时效性高,海量数据的处理需求不再局限在离线计算当中。
现如今,正式为了应对大数据的这几个特点,开源的大数据框架越来越多,越来越强,先列举一些常见的:
文件存储:Hadoop HDFS、Tachyon、KFS
离线计算:Hadoop MapRece、Spark
流式、实时计算:Storm、Spark Streaming、S4、Heron
K-V、NOSQL数据库:HBase、Redis、MongoDB
资源管理:YARN、Mesos
日志收集:Flume、Scribe、Logstash、Kibana
消息系统:Kafka、StormMQ、ZeroMQ、RabbitMQ
查询分析:Hive、Impala、Pig、Presto、Phoenix、SparkSQL、Drill、Flink、Kylin、Druid
分布式协调服务:Zookeeper
集群管理与监控:Ambari、Ganglia、Nagios、Cloudera Manager
数据挖掘、机器学习:Mahout、Spark MLLib
数据同步:Sqoop
任务调度:Oozie
……
眼花了吧,上面的有30多种吧,别说精通了,全部都会使用的,估计也没几个。
就我个人而言,主要经验是在第二个方向(开发/设计/架构),且听听我的建议吧。
第一章:初识Hadoop
1.1 学会网络与Google
不论遇到什么问题,先试试搜索并自己解决。
Google首选,翻不过去的,就用网络吧。
1.2 参考资料首选官方文档
特别是对于入门来说,官方文档永远是首选文档。
相信搞这块的大多是文化人,英文凑合就行,实在看不下去的,请参考第一步。
1.3 先让Hadoop跑起来
Hadoop可以算是大数据存储和计算的开山鼻祖,现在大多开源的大数据框架都依赖Hadoop或者与它能很好的兼容。
关于Hadoop,你至少需要搞清楚以下是什么:
Hadoop 1.0、Hadoop 2.0
MapRece、HDFS
NameNode、DataNode
JobTracker、TaskTracker
Yarn、ResourceManager、NodeManager
自己搭建Hadoop,请使用第一步和第二步,能让它跑起来就行。
建议先使用安装包命令行安装,不要使用管理工具安装。
另外:Hadoop1.0知道它就行了,现在都用Hadoop 2.0.
1.4 试试使用Hadoop
HDFS目录操作命令;
上传、下载文件命令;
提交运行MapRece示例程序;
打开Hadoop WEB界面,查看Job运行状态,查看Job运行日志。
知道Hadoop的系统日志在哪里。
1.5 你该了解它们的原理了
MapRece:如何分而治之;
HDFS:数据到底在哪里,什么是副本;
Yarn到底是什么,它能干什么;
NameNode到底在干些什么;
ResourceManager到底在干些什么;
1.6 自己写一个MapRece程序
请仿照WordCount例子,自己写一个(照抄也行)WordCount程序,
打包并提交到Hadoop运行。
你不会Java?Shell、Python都可以,有个东西叫Hadoop Streaming。
如果你认真完成了以上几步,恭喜你,你的一只脚已经进来了。
第二章:更高效的WordCount
2.1 学点SQL吧
你知道数据库吗?你会写SQL吗?
如果不会,请学点SQL吧。
2.2 SQL版WordCount
在1.6中,你写(或者抄)的WordCount一共有几行代码?
给你看看我的:
SELECT word,COUNT(1) FROM wordcount GROUP BY word;
这便是SQL的魅力,编程需要几十行,甚至上百行代码,我这一句就搞定;使用SQL处理分析Hadoop上的数据,方便、高效、易上手、更是趋势。不论是离线计算还是实时计算,越来越多的大数据处理框架都在积极提供SQL接口。
2.3 SQL On Hadoop之Hive
什么是Hive?官方给的解释是:
The Apache Hive data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage and queried using SQL syntax.
为什么说Hive是数据仓库工具,而不是数据库工具呢?有的朋友可能不知道数据仓库,数据仓库是逻辑上的概念,底层使用的是数据库,数据仓库中的数据有这两个特点:最全的历史数据(海量)、相对稳定的;所谓相对稳定,指的是数据仓库不同于业务系统数据库,数据经常会被更新,数据一旦进入数据仓库,很少会被更新和删除,只会被大量查询。而Hive,也是具备这两个特点,因此,Hive适合做海量数据的数据仓库工具,而不是数据库工具。
2.4 安装配置Hive
请参考1.1 和 1.2 完成Hive的安装配置。可以正常进入Hive命令行。
2.5 试试使用Hive
请参考1.1 和 1.2 ,在Hive中创建wordcount表,并运行2.2中的SQL语句。
在Hadoop WEB界面中找到刚才运行的SQL任务。
看SQL查询结果是否和1.4中MapRece中的结果一致。
2.6 Hive是怎么工作的
明明写的是SQL,为什么Hadoop WEB界面中看到的是MapRece任务?
2.7 学会Hive的基本命令
创建、删除表;
加载数据到表;
下载Hive表的数据;
请参考1.2,学习更多关于Hive的语法和命令。
如果你已经按照《写给大数据开发初学者的话》中第一章和第二章的流程认真完整的走了一遍,那么你应该已经具备以下技能和知识点:
0和Hadoop2.0的区别;
MapRece的原理(还是那个经典的题目,一个10G大小的文件,给定1G大小的内存,如何使用Java程序统计出现次数最多的10个单词及次数);
HDFS读写数据的流程;向HDFS中PUT数据;从HDFS中下载数据;
自己会写简单的MapRece程序,运行出现问题,知道在哪里查看日志;
会写简单的SELECT、WHERE、GROUP BY等SQL语句;
Hive SQL转换成MapRece的大致流程;
Hive中常见的语句:创建表、删除表、往表中加载数据、分区、将表中数据下载到本地;
从上面的学习,你已经了解到,HDFS是Hadoop提供的分布式存储框架,它可以用来存储海量数据,MapRece是Hadoop提供的分布式计算框架,它可以用来统计和分析HDFS上的海量数据,而Hive则是SQL On Hadoop,Hive提供了SQL接口,开发人员只需要编写简单易上手的SQL语句,Hive负责把SQL翻译成MapRece,提交运行。
此时,你的”大数据平台”是这样的:
那么问题来了,海量数据如何到HDFS上呢?
第三章:把别处的数据搞到Hadoop上
此处也可以叫做数据采集,把各个数据源的数据采集到Hadoop上。
3.1 HDFS PUT命令
这个在前面你应该已经使用过了。
put命令在实际环境中也比较常用,通常配合shell、python等脚本语言来使用。
建议熟练掌握。
3.2 HDFS API
HDFS提供了写数据的API,自己用编程语言将数据写入HDFS,put命令本身也是使用API。
实际环境中一般自己较少编写程序使用API来写数据到HDFS,通常都是使用其他框架封装好的方法。比如:Hive中的INSERT语句,Spark中的saveAsTextfile等。
建议了解原理,会写Demo。
3.3 Sqoop
Sqoop是一个主要用于Hadoop/Hive与传统关系型数据库Oracle/MySQL/SQLServer等之间进行数据交换的开源框架。
就像Hive把SQL翻译成MapRece一样,Sqoop把你指定的参数翻译成MapRece,提交到Hadoop运行,完成Hadoop与其他数据库之间的数据交换。
自己下载和配置Sqoop(建议先使用Sqoop1,Sqoop2比较复杂)。
了解Sqoop常用的配置参数和方法。
使用Sqoop完成从MySQL同步数据到HDFS;
使用Sqoop完成从MySQL同步数据到Hive表;
PS:如果后续选型确定使用Sqoop作为数据交换工具,那么建议熟练掌握,否则,了解和会用Demo即可。
3.4 Flume
Flume是一个分布式的海量日志采集和传输框架,因为“采集和传输框架”,所以它并不适合关系型数据库的数据采集和传输。
Flume可以实时的从网络协议、消息系统、文件系统采集日志,并传输到HDFS上。
因此,如果你的业务有这些数据源的数据,并且需要实时的采集,那么就应该考虑使用Flume。
下载和配置Flume。
使用Flume监控一个不断追加数据的文件,并将数据传输到HDFS;
PS:Flume的配置和使用较为复杂,如果你没有足够的兴趣和耐心,可以先跳过Flume。
3.5 阿里开源的DataX
之所以介绍这个,是因为我们公司目前使用的Hadoop与关系型数据库数据交换的工具,就是之前基于DataX开发的,非常好用。
可以参考我的博文《异构数据源海量数据交换工具-Taobao DataX 下载和使用》。
现在DataX已经是3.0版本,支持很多数据源。
你也可以在其之上做二次开发。
PS:有兴趣的可以研究和使用一下,对比一下它与Sqoop。
如果你认真完成了上面的学习和实践,此时,你的”大数据平台”应该是这样的:
第四章:把Hadoop上的数据搞到别处去
前面介绍了如何把数据源的数据采集到Hadoop上,数据到Hadoop上之后,便可以使用Hive和MapRece进行分析了。那么接下来的问题是,分析完的结果如何从Hadoop上同步到其他系统和应用中去呢?
其实,此处的方法和第三章基本一致的。
4.1 HDFS GET命令
把HDFS上的文件GET到本地。需要熟练掌握。
4.2 HDFS API
同3.2.
4.3 Sqoop
同3.3.
使用Sqoop完成将HDFS上的文件同步到MySQL;
使用Sqoop完成将Hive表中的数据同步到MySQL;
4.4 DataX
同3.5.
如果你认真完成了上面的学习和实践,此时,你的”大数据平台”应该是这样的:
如果你已经按照《写给大数据开发初学者的话2》中第三章和第四章的流程认真完整的走了一遍,那么你应该已经具备以下技能和知识点:
知道如何把已有的数据采集到HDFS上,包括离线采集和实时采集;
你已经知道sqoop(或者还有DataX)是HDFS和其他数据源之间的数据交换工具;
你已经知道flume可以用作实时的日志采集。
从前面的学习,对于大数据平台,你已经掌握的不少的知识和技能,搭建Hadoop集群,把数据采集到Hadoop上,使用Hive和MapRece来分析数据,把分析结果同步到其他数据源。
接下来的问题来了,Hive使用的越来越多,你会发现很多不爽的地方,特别是速度慢,大多情况下,明明我的数据量很小,它都要申请资源,启动MapRece来执行。
第五章:快一点吧,我的SQL
其实大家都已经发现Hive后台使用MapRece作为执行引擎,实在是有点慢。
因此SQL On Hadoop的框架越来越多,按我的了解,最常用的按照流行度依次为SparkSQL、Impala和Presto.
这三种框架基于半内存或者全内存,提供了SQL接口来快速查询分析Hadoop上的数据。关于三者的比较,请参考1.1.
我们目前使用的是SparkSQL,至于为什么用SparkSQL,原因大概有以下吧:
使用Spark还做了其他事情,不想引入过多的框架;
Impala对内存的需求太大,没有过多资源部署;
5.1 关于Spark和SparkSQL
什么是Spark,什么是SparkSQL。
Spark有的核心概念及名词解释。
SparkSQL和Spark是什么关系,SparkSQL和Hive是什么关系。
SparkSQL为什么比Hive跑的快。
5.2 如何部署和运行SparkSQL
Spark有哪些部署模式?
如何在Yarn上运行SparkSQL?
使用SparkSQL查询Hive中的表。
PS: Spark不是一门短时间内就能掌握的技术,因此建议在了解了Spark之后,可以先从SparkSQL入手,循序渐进。
关于Spark和SparkSQL,可参考http://lxw1234.com/archives/category/spark
如果你认真完成了上面的学习和实践,此时,你的”大数据平台”应该是这样的:
第六章:一夫多妻制
请不要被这个名字所诱惑。其实我想说的是数据的一次采集、多次消费。
在实际业务场景下,特别是对于一些监控日志,想即时的从日志中了解一些指标(关于实时计算,后面章节会有介绍),这时候,从HDFS上分析就太慢了,尽管是通过Flume采集的,但Flume也不能间隔很短就往HDFS上滚动文件,这样会导致小文件特别多。
为了满足数据的一次采集、多次消费的需求,这里要说的便是Kafka。
6.1 关于Kafka
什么是Kafka?
Kafka的核心概念及名词解释。
6.2 如何部署和使用Kafka
使用单机部署Kafka,并成功运行自带的生产者和消费者例子。
使用Java程序自己编写并运行生产者和消费者程序。
Flume和Kafka的集成,使用Flume监控日志,并将日志数据实时发送至Kafka。
如果你认真完成了上面的学习和实践,此时,你的”大数据平台”应该是这样的:
这时,使用Flume采集的数据,不是直接到HDFS上,而是先到Kafka,Kafka中的数据可以由多个消费者同时消费,其中一个消费者,就是将数据同步到HDFS。
如果你已经按照《写给大数据开发初学者的话3》中第五章和第六章的流程认真完整的走了一遍,那么你应该已经具备以下技能和知识点:
为什么Spark比MapRece快。
使用SparkSQL代替Hive,更快的运行SQL。
使用Kafka完成数据的一次收集,多次消费架构。
自己可以写程序完成Kafka的生产者和消费者。
从前面的学习,你已经掌握了大数据平台中的数据采集、数据存储和计算、数据交换等大部分技能,而这其中的每一步,都需要一个任务(程序)来完成,各个任务之间又存在一定的依赖性,比如,必须等数据采集任务成功完成后,数据计算任务才能开始运行。如果一个任务执行失败,需要给开发运维人员发送告警,同时需要提供完整的日志来方便查错。
第七章:越来越多的分析任务
不仅仅是分析任务,数据采集、数据交换同样是一个个的任务。这些任务中,有的是定时触发,有点则需要依赖其他任务来触发。当平台中有几百上千个任务需要维护和运行时候,仅仅靠crontab远远不够了,这时便需要一个调度监控系统来完成这件事。调度监控系统是整个数据平台的中枢系统,类似于AppMaster,负责分配和监控任务。
7.1 Apache Oozie
1. Oozie是什么?有哪些功能?
2. Oozie可以调度哪些类型的任务(程序)?
3. Oozie可以支持哪些任务触发方式?
4. 安装配置Oozie。
第八章:我的数据要实时
在第六章介绍Kafka的时候提到了一些需要实时指标的业务场景,实时基本可以分为绝对实时和准实时,绝对实时的延迟要求一般在毫秒级,准实时的延迟要求一般在秒、分钟级。对于需要绝对实时的业务场景,用的比较多的是Storm,对于其他准实时的业务场景,可以是Storm,也可以是Spark Streaming。当然,如果可以的话,也可以自己写程序来做。
8.1 Storm
1. 什么是Storm?有哪些可能的应用场景?
2. Storm由哪些核心组件构成,各自担任什么角色?
3. Storm的简单安装和部署。
4. 自己编写Demo程序,使用Storm完成实时数据流计算。
8.2 Spark Streaming
1. 什么是Spark Streaming,它和Spark是什么关系?
2. Spark Streaming和Storm比较,各有什么优缺点?
3. 使用Kafka + Spark Streaming,完成实时计算的Demo程序。
如果你认真完成了上面的学习和实践,此时,你的”大数据平台”应该是这样的:
至此,你的大数据平台底层架构已经成型了,其中包括了数据采集、数据存储与计算(离线和实时)、数据同步、任务调度与监控这几大模块。接下来是时候考虑如何更好的对外提供数据了。
第九章:我的数据要对外
通常对外(业务)提供数据访问,大体上包含以下方面:
离线:比如,每天将前一天的数据提供到指定的数据源(DB、FILE、FTP)等;离线数据的提供可以采用Sqoop、DataX等离线数据交换工具。
实时:比如,在线网站的推荐系统,需要实时从数据平台中获取给用户的推荐数据,这种要求延时非常低(50毫秒以内)。
根据延时要求和实时数据的查询需要,可能的方案有:HBase、Redis、MongoDB、ElasticSearch等。
OLAP分析:OLAP除了要求底层的数据模型比较规范,另外,对查询的响应速度要求也越来越高,可能的方案有:Impala、Presto、SparkSQL、Kylin。如果你的数据模型比较规模,那么Kylin是最好的选择。
即席查询:即席查询的数据比较随意,一般很难建立通用的数据模型,因此可能的方案有:Impala、Presto、SparkSQL。
这么多比较成熟的框架和方案,需要结合自己的业务需求及数据平台技术架构,选择合适的。原则只有一个:越简单越稳定的,就是最好的。
如果你已经掌握了如何很好的对外(业务)提供数据,那么你的“大数据平台”应该是这样的:
第十章:牛逼高大上的机器学习
关于这块,我这个门外汉也只能是简单介绍一下了。数学专业毕业的我非常惭愧,很后悔当时没有好好学数学。
在我们的业务中,遇到的能用机器学习解决的问题大概这么三类:
分类问题:包括二分类和多分类,二分类就是解决了预测的问题,就像预测一封邮件是否垃圾邮件;多分类解决的是文本的分类;
聚类问题:从用户搜索过的关键词,对用户进行大概的归类。
推荐问题:根据用户的历史浏览和点击行为进行相关推荐。
大多数行业,使用机器学习解决的,也就是这几类问题
❼ 大数据专业学什么编程
大数据需要的语言
Java
java可以说是大数据最基础的编程语言,据我这些年的经验,我接触的很大一部分的大数据开发都是从Jave Web开发转岗过来的(当然也不是绝对我甚至见过产品转岗大数据开发的,逆了个天)。
一是因为大数据的本质无非就是海量数据的计算,查询与存储,后台开发很容易接触到大数据量存取的应用场景
二就是java语言本事了,天然的优势,因为大数据的组件很多都是用java开发的像HDFS,Yarn,Hbase,MR,Zookeeper等等,想要深入学习,填上生产环境中踩到的各种坑,必须得先学会java然后去啃源码。
说到啃源码顺便说一句,开始的时候肯定是会很难,需要对组件本身和开发语言都有比较深入的理解,熟能生巧慢慢来,等你过了这个阶段,习惯了看源码解决问题的时候你会发现源码真香。
Scala
scala和java很相似都是在jvm运行的语言,在开发过程中是可以无缝互相调用的。Scala在大数据领域的影响力大部分都是来自社区中的明星Spark和kafka,这两个东西大家应该都知道(后面我会有文章多维度介绍它们),它们的强势发展直接带动了Scala在这个领域的流行。
Python和Shell
shell应该不用过多的介绍非常的常用,属于程序猿必备的通用技能。python更多的是用在数据挖掘领域以及写一些复杂的且shell难以实现的日常脚本。
❽ 如何选择大数据应用程序
如何选择大数据应用程序
选择大数据软件对于组织来说是一个复杂的过程,组织需要仔细评估其目标和供应商提供的解决方案。
如今可以确定的是,组织对大数据解决方案需求量很大。组织的管理者知道他们的大数据是不可忽视的最宝贵的资源之一。因此,他们正在寻找可帮助存储、管理和分析其大数据的硬件和软件。
根据调研机构IDC公司的调查,2017年组织在大数据和数据分析方面的支出为1508亿美元,比去年增长12.4%。到2020年,这一支出可能会以每年11.9%的速度增长,2020年的收入可能高达2100亿美元。
大部分收入都用于大数据应用。据IDC公司预测,到2020年,仅软件开支就可能超过700亿美元。非关系分析数据存储(如NoSQL数据库)的支出增长尤其迅速,每年可能增长38.6%,认知软件平台(如人工智能和机器学习能力的分析工具)每年可能增长23.3%。
为了充分利用大量的数据支出,供应商在各种不同的产品和服务上打上了“大数据”标签。这种产品的扩散会使组织很难找到合适的大数据应用程序来满足他们的需求。专家建议,企业开始选择大数据应用程序的一个好方法是精确地确定自己所需要什么类型的应用程序。
大数据应用的类型
企业软件供应商提供了大量不同类型的大数据应用程序。适合企业的大数据应用将取决于其目标。
例如,如果企业只想更加详细和深入地扩展现有的财务报告功能,那么数据仓库和商业智能解决方案可能已足以满足其需求;如果企业的销售和营销团队希望利用其大数据的发现增加收入和利润的新机会,则可以考虑创建数据湖和/或投资数据挖掘解决方案;如果企业想创建一个数据驱动的文化,组织中的每个人都在使用数据来指导他们的决策,那么企业可能需要数据湖和预测分析,内存数据库,也可能是流分析。
这样的事情将会变得更复杂,因为不同类型的工具之间的界限可能会有些模糊。一些商业智能工具具有数据挖掘和预测分析功能。一些预测分析工具包括流媒体功能。
最好的办法是组织一开始就清楚地确定自己的目标,然后去寻找能够帮助其实现这些目标的产品。
选择大数据应用程序时的关键决策
无论企业选择哪种类型的大数据应用程序,都需要做出一些关键决策,以帮助企业缩小选择范围。以下是一些最重要的考虑事项:
(1)内部部署数据中心与基于云计算的大数据应用程序
企业需要做出的第一个重大决策是要在自己的数据中心托管大数据软件,还是希望采用基于云计算的解决方案。
目前,更多的组织似乎正在选择云计算。分析机构Forrester公司副总裁兼首席分析师BrianHopkins在2017年8月的一篇博客文章中写道:“通过云订阅在大数据解决方案上的全球支出将增长快近7.5倍。此外,根据数据分析专业人员的2016和2017调查,公有云是大数据的头号技术优先事项。”
基于云计算的大数据应用受到欢迎有多种原因,其中包括可扩展性和易管理性。主要的云计算供应商也在人工智能和机器学习研究方面处于领先地位,这使得他们可以在解决方案中添加高级功能。
但是,云计算对于组织来说并不总是最好的选择。对合规性或安全性要求较高的组织有时会发现他们需要将敏感数据保留在内部部署的数据中心。此外,一些组织已经在现有的本地数据解决方案上进行投资,并且他们发现继续在本地部署数据中心运行大数据应用程序或使用混合方法会更具成本效益。
(2)私有vs开源的大数据应用程序
一些最流行的大数据工具(包括Hadoop生态系统)可以在开源许可下获得。 Forrester公司指出,“2017年,企业将在Hadoop软件和相关服务上投入8亿美元。”
Hadoop和其他开源软件最大的吸引力之一是降低总体拥有成本。尽管专有解决方案需要支付高昂的许可费,并且可能需要昂贵的专用硬件,但Hadoop没有许可费,并且可以在标准的硬件上运行。
然而,企业有时发现很难获得开源的解决方案,以满足他们的需要。他们可能需要购买支持或咨询服务,组织在计算总拥有成本时需要考虑这些费用。
(3)批处理vs流式传输大数据应用程序
最早的大数据解决方案(如Hadoop)只是处理批量数据,但企业越来越多地发现他们希望实时分析数据。这引发了对Spark、Storm、Samza等流媒体解决方案的更多兴趣。
许多分析师表示,即使组织认为他们现在不需要处理流式数据,流媒体功能也可能在不久的将来成为标准操作流程。出于这个原因,许多组织正在向Lambda体系结构迈进,这是一种既能处理实时数据又能批处理数据的数据处理体系结构。
在大数据应用中寻找特性
一旦企业缩小了选项范围,就需要评估其正在考虑的大数据应用程序。以下包括一些最重要的需要考察的因素。
与传统技术集成 - 大多数组织已经在数据管理和分析技术方面进行现有投资。完全替代该技术可能代价高昂并且具有破坏性,因此组织通常会选择寻找可以与现有工具一起使用的解决方案,或者可以增加现有软件。
绩效 - 2017年Talend研究发现,实时分析功能是商业领袖的首要IT优先事项之一。如果要从这些洞察中获益,管理人员和工作人员需要能够及时获取见解。这意味着投资可以提供他们所需速度的技术。
可扩展性 - 大数据存储的规模每天都会变得更大。组织需要快速执行的大数据应用程序,随着数据存储量以指数级增长,这些应用程序可以继续快速执行。这种对可扩展性的需求是基于云计算的大数据应用变得非常流行的主要原因之一。
可用性 - 组织还应该考虑他们打算购买的任何大数据应用程序的“学习曲线”。易于部署、易于配置、界面直观和/或与组织已经使用的工具相似或集成的工具可以提供巨大的价值。
可视化 - BI-Survey.com表示,“针对商业用户的可视化和探索性数据分析(称为数据发现)已经演变成当今市场上最热门的商业智能和分析主题。”在图表中呈现数据可以使人类的大脑更容易发现趋势和异常值,加快识别可操作见解的过程。
灵活性 – 企业如今所需要的大数据可能与其在一两年前的需求大不相同。这就是为什么许多企业选择寻找能够满足各种不同目标的工具,而不是很好地执行单一功能的原因。
安全性 - 这些大数据存储中包含的大部分数据都是敏感信息,这对于竞争对手、国家机构或黑客都是非常有价值的。组织需要确保他们的大数据具有足够的保护,以防止成为头条新闻报道的大量数据泄露事件。这意味着组织需要寻找具有内置安全功能(如加密和强身份验证)的工具,或者寻找与现有安全解决方案集成的工具。
支持 - 即使有经验的IT专业人员有时也会发现难以部署、维护和使用复杂的大数据应用程序。不要忘记考虑各供应商提供的支持的质量和成本。
生态系统 - 大多数组织需要多种不同的应用程序来满足他们所有的大数据需求。这意味着要寻找一个大数据平台,与其他许多流行工具以及与其他提供商有强大合作关系的供应商进行整合。
自助服务能力 - 2017年毕马威公司针对组织的CIO调查发现,60%的CIO持续报告指出数据分析人才短缺,而大数据和分析是最需要的技能组合。由于没有足够的数据科学家去解决,组织正在寻找其他商业专业人士可以独立使用的工具。调研机构Gartner公司最近的博客文章指出,通常在一个组织中,大约32%的员工正在使用商业智能和分析。
总体拥有成本 - 大数据应用的前期成本只是其中的一小部分。组织需要确保他们考虑相关硬件成本,正在采用的许可或订购费用、员工时间、支持成本,以及与本地部署应用程序的物理空间相关的任何费用。不要忘记要考虑到云计算成本随着时间的推移普遍下降的事实。
预计价值的时间 - 另一个重要的财务考虑因素是企业能够以多快的速度启动并运行特定的解决方案。大多数公司都希望在几天或几周内,而不是几个月或几年内从他们的大数据项目中受益。
人工智能和机器学习 - 最后,考虑各种大数据应用供应商的创新。人工智能和机器学习的研究正在以惊人的速度发展,并成为大数据分析的主流部分。据Forrester公司预测,“企业在2017年对于人工智能的投资增加了三倍,因为企业需要将客户数据转换为个性化体验。”如果企业选择的供应商在这项研究没有处于行业前沿,那么可能会发现自己落后于竞争对手。
选择大数据应用程序的提示
很明显,选择正确的大数据应用程序是一个复杂的过程,这涉及诸多因素。已成功部署大数据软件的专家和组织提供以下建议:
理解自己的目标–企业在选择大数据应用程序时,需要知道自己想完成什么是至关重要的。如果不确定为什么要投资某项技术,那么其项目不太可能成功。
从小规模开始-如果企业可以通过小规模的大数据分析项目取得成功,那么企业对使用该工具将会产生更多的兴趣。
采取整体方法-尽管小规模项目可以帮助企业获得技术方面的经验和专业知识,但选择最终可用于整个业务的应用程序非常重要。Gartner公司建议:“为了支持无处不在的数据和分析世界,IT专业人员需要创建一个新的端到端体系结构,为敏捷、规模和实验而构建。如今,技术学科正在融合,数据和分析的方法正在变得更加整体化,涵盖整个业务。”
协同工作–Gartner公司的这篇博客文章还指出:“建议数据和分析领导者积极主动地在他们的组织中传播分析,以便从启用数据驱动业务操作中获得最大的收益。”许多组织正试图构建数据驱动文化,这需要业务和IT领导者之间的大量合作。
病毒式传播–前面提到的自助服务功能还可以帮助创建数据驱动的文化。Gartner公司建议:“让分析在企业内部和外部真正发挥作用。通过培养实用的自助服务方法,并通过在交互和流程中的数据摄入点上嵌入分析功能,使更多的业务用户能够执行分析。”
❾ 大数据专业主要都要学哪些知识
1、Java基础
JAVA开发简介 基本语法、运算符 流程控制语句 数组 函数 面向对象 常用类库 异常 io系统 集合泛型 线程 网络编程 阶段测试
2、JavaWeb
html+css; html5+css3; javascript; jquery; 数据库; JDBC; WEB服务器、开发工具-MyEclipse; HTTP协议; (数据库连接池)数据源; JavaWeb开发之Servlet、Servlet3.0; 请求与响应; JSP; MVC; 会话管理; 过滤和监听; 异步请求; 阶段测试
3、JavaEE高级+Linux课程+分布式计算JavaWeb
Jspring框架、mybatis框架、nio、JVM、maven框架、LINUX、MYSQL分库分表、读写分离、JAVA搜索引擎、Redis、消息队列、分布式计算框架、项目实战
4、离线数据分析平台Hadoop
初识Hadoop以及Hadoop生态系统、;Hadoop分布式文件系统HDFS、Hadoop的设计目标;分布式计算框架MapRece;MapRece应用程序的开发;数据仓库Hive的安装和使用、分桶作用、创建点击流数据数据仓库、点击流数据分析(HiveSql)。
5、实时数据分析平台Storm
python介绍、安装、基本操作、基本语法、数据结构、内建函数、异常、模块;Storm介绍、Storm应用场景及行业案例、Storm特点、Storm编程模型部署;Storm集群搭建、配置集群、通信机制;消息队列Kafka、使用Flume收集数据到Kafka、Mahout的离线计算数据、Kafka基础与常用API。
6、Scala语言与Spark
Scala;SparkStreaming、 SparkGraphX、Spark内核解析、Spark优化解析;Spark-Mllib机器学习、回归算法、决策树、推荐系统、分类算法等;升级Hive执行引擎为Spark、使用Spark Sql完成点击流日志业务需求、打通Spark数据收集、存储、计算、展示流程。
❿ 大数据专业需要毕业后写代码吗累吗
大数据专业也属于计算机领域的。而且了,今后大数据(Big
Data)还是计算机领域的必然趋势。毕业后当然需要写程序代码了。
至于说计算机软件编程到底是否累这个问题,根据我多年的编程经验就是一个字:累。
但是同时也能够从累中体会到编程的快乐。当你花费很长时间终于调试通过一个源程序,看到运行出了正确运行结果那一刻,那种喜悦是无法表达的。
最后我的亲身体会就是一句话:累并快乐着!!