1、BI的流程:主要是阐述一下BI的流程:第一,需求分析阶段,要搞清楚用户需求,就本例用户想要的是volte业务使用情况的月报表,必须要搞清楚月报表中包括哪些指标(包括维度指标和度量指标)等等;第二,模型设计,该阶段是BI非常重要的阶段,我们必须要熟悉详细系统架构、以及数据的一些标准(如字段的命名规则等等)、调研熟悉源业务系统,要明确知道数据口径,在考虑了以上所有资料的基础上来做数据模型设计,既包括DW(数据仓库)层的模型也包括DM(数据集市)层的模型;第三,开发阶段,包括ETL开发、模型开发、报表开发,元数据管理,权限设置等等,简单的来讲,这个阶段主要是写SQL来根据口径汇总数据以及开发报表(包括后台模型如universe设计以及前台报表设计如web intelligence);第四,测试阶段,也就是看跑出来的数据是否正确;第五,上线;第六,优化与运维。
通过我大概的介绍,想必菜鸟应该会有一点感觉,我们首先要调整我们对大数据的看法,我们不要把它看的太高大而敬畏不敢接触它,事实上,它和我们其他的技术都是一样的,对于程序员来讲,都是一样,就是明确需求敲代码。从事大数据开发的,无非是用SQL汇总数据,用Java写mapreduce或者报表可视化设计运维等等,具体的技术只有自己接触到才会熟悉,毕竟大数据太庞大了,它一整套东西我们没必要都会用,具体用到再学习就是了。
2、数据开发方向需要储备的技术:做过一些公司的笔试题,也面试过一些公司,从我自己的经验出发总结数据开发方向需要储备的技术。
首先是掌握一门编程语言,可以是Java,也可以是Python。然后掌握linux基本命令,因为hadoop,spark等集群管理一般都是在linux系统上,所以需要了解Linux的基础知识,网易数据开发方向的题目在linux知识点上考察比重相对就比较大。换句话说,单单只了解windows系统是不够的,至少我们还得了解linux系统或者unix系统。在大数据方向,面试的时候hadoop和spark基本上都会问到,所以它们两个必须要熟悉。hadoop和spark的工作机制,它们应用的场景,以及各自的优缺点等等。在流处理方面,需要弄清楚spark的流处理与storm之间的区别。谈到hadoop对数据的处理,不得不谈到hadoop生态圈中的hive和hbase。目前,数据量越来越大,要求数据的处理能力以及速度也越来越高。利用好hadoop生态圈中的hive和hbase,能起到事半功倍的效果。腾讯建立了自己的分布式数据仓库(Tencent distributed Data Warehouse,简称 TDW),它基于Hadoop、Hive、PostgreSQL之上进行研发,目前已开源,可参考链接http://code.csdn.net/news/2819892。Hbase在淘宝上的应用与优化可参考链接http://code.csdn.net/news/2819892。
因为是找实习,有时候一些公司要求不会太高,但并不意味着什么都不会。需要了解当前该方向应用较多的技术,这些技术解决了实际中的那些问题,针对这些我们需要有自己的见解。数据开发也是离不开算法的,很多时候面试官也会问一些关于算法的问题,例如学习过哪些算法,谈谈自己的理解。或者给出实际问题,根据自己的理解进行解答,例如销售衣服,针对衣服可以建立哪些特征向量,这里只是举了一个例子。不能说把算法全都掌握,但至少要熟悉一类,了解算法的原理以及该算法解决的实际问题。
3、实习3个月大数据开发的一点理解
大数据是什么呢?对于我刚进去的我来说只知道数据量大,但还不清楚数据量大有什么影响。在接下来我接手了公司的项目有了更深刻的了解。
一般的项目中,后台一般都会有增删改查,数据都是直接返回给页面的,处理的数据量也不是很大,能很快返回。但是到了大数据项目,前台的BI要求不仅仅是直接返回数据了,而是具体到实际应用。比如说我想知道成绩表中,60以下,60-70,70-80,80-90,90-100,各个成绩的人数是多少;我想知道每一个学院不及格人数对比前年的不及格人数增加了还是减少了等等实际的问题。如果在Java的逻辑层中直接返回数据库中的数据在对数据做相应的筛选和合并,结果需要非常久的时间,因为成绩表一学期大概就有80万条。如果每一种具体的实际业务都用后台来处理,页面数据加载将会非常的慢,而且对于Mysql的压力会非常的大。
在企业当中一般会使用Hive来对数据进行存储,用Hadoop来构建分布式计算。这样就能够处理快速的处理大量的数据,并且得到页面所需要的数据。
其实对于大数据项目而已,后台只是做查询和某些数据的合并返回给前台。大部分的业务逻辑都放在离线计算上。一般而言都是用SQL语句对Hive数据库进行数据的抽取和转换和计算,然后插入到Mysql当中。
其中数据转换或者叫数据清洗是最为复杂和烦恼的过程,我遇到比较多的情况是在业务系统中往往出现大量的空字段和数据的格式不符合要求。往往是经过计算后,得出的结果不正确,又要回头去寻找哪些数据为空或者出现数据不正确。
4、大数据也分为几个大的方向:
1、Hadoop大数据开发方向
2、数据挖掘、数据分析&机器学习方向
3、大数据运维&云计算方向
先看看自己对哪个方向更感兴趣,确定好方向以后就可以根据方向入门,如果直接说大数据范畴比较广。
这里再以大数据开发为例说起(以下内容也引自网络,觉得说的很有道理,加上自己的一些加工而成,怕大家喷我就匿名了)
首先我们要学习Java语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。
JAVA:Java语言能懂得一些基础操作即可,不需要了解特别多内容,主要学习java的标准版JavaSE就可以了
Linux:因为大数据相关软件都是在Linux上运行的,所以Linux要学习的扎实一些,学好Linux对你快速掌握大数据相关技术会有很大的帮助,能让你更好的理解hadoop、hive、hbase、spark等大数据软件的运行环境和网络环境配置,能少踩很多坑,学会shell就能看懂脚本这样能更容易理解和配置大数据集群。还能让你对以后新出的大数据技术学习起来更快。
好说完基础了,再说说还需要学习哪些大数据技术,可以按这个顺序学下去。
Hadoop:这是现在流行的大数据处理平台几乎已经成为大数据的代名词,所以这个是必学的。Hadoop里面包括几个组件HDFS、MapReduce和YARN,HDFS是存储数据的地方就像我们电脑的硬盘一样文件都存储在这个上面,MapReduce是对数据进行处理计算的,它有个特点就是不管多大的数据只要给它时间它就能把数据跑完,但是时间可能不是很快所以它叫数据的批处理。YARN是体现Hadoop平台概念的重要组件有了它大数据生态体系的其它软件就能在hadoop上运行了,这样就能更好的利用HDFS大存储的优势和节省更多的资源比如我们就不用再单独建一个spark的集群了,让它直接跑在现有的hadoop yarn上面就可以了。其实把Hadoop的这些组件学明白你就能做大数据的处理了,只不过你现在还可能对”大数据”到底有多大还没有个太清楚的概念,听我的别纠结这个。等以后你工作了就会有很多场景遇到几十T/几百T大规模的数据,到时候你就不会觉得数据大真好,越大越有你头疼的。当然别怕处理这么大规模的数据,因为这是你的价值所在,让那些个搞Javaee的php的html5的和DBA的羡慕去吧。
·记住学到这里可以作为你学大数据的一个节点。
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的。
·会这些东西你就成为一个专业的大数据开发工程师了,月薪2W都是小毛毛雨
后续提高:当然还是有很有可以提高的地方,比如学习下python,可以用它来编写网络爬虫。这样我们就可以自己造数据了,网络上的各种数据你高兴都可以下载到你的集群上去处理。
最后再学习下推荐、分类等算法的原理这样你能更好的与算法工程师打交通。这样你的公司就更离不开你了,大家都会对你喜欢的不要不要的。
最快的学习方法,其实跟着有经验的老师去学习,自古以来,名师出高徒。与其自己苦苦探索不如跟着老师来快速学习,打好基础,快速提升。