开发者俱乐部

标题: 大数据跨界,从这里开始 [打印本页]

作者: xman    时间: 2017-2-9 06:13
标题: 大数据跨界,从这里开始


  首先,如题,这篇依然是写给那些从其他领域跨界到大数据领域的朋友的,当然,初入大数据领域,或者对大数据领域有所兴趣的朋友,也可一观。
  想起要写这个话题,已经很久了,直到最近私密群建立起来,才发现这个话题应该是更急切需要被讨论一下的。
  虽然我对于大数据培训市场一直不算太感冒,但是,如果说对于那些想要跨界进入大数据领域的朋友来说,不可否认,全面的培训是最快的方式,最少比自学来的快、更系统。
  但我一直对于大部分培训课程体系的设计不敢苟同,这是重点。
  这两年来,鉴于种种原因,也帮不少初入门或者说初入大数据培训机构的跨界朋友参考过培训课程。
  基本上课程套路都一样一样的:
  首先基本的语言基础来一套,接着是hadoop、mapreduce、hive、hbase、spark、flume、kafka、mahout给来一套,再接着上一系列的算法课程,最后来点套路的所谓项目实战。
  三四个月的课程,好几万的投入,然后就上岗开干了,细微的区别的在于可能不同课程的课时设置不同,但基本上都得来一个如上全家桶套餐。
  先不说其他的,三四个月,得把这个整个"全家桶"给咽下去,还得消化了,简直了。。。
  而在实际的工作中,你能用上其中一到两种算是正常的,能用上三四种的算是少见的,能碰过过半的说明你可以升级为数据架构师了。
  那么,这样子培训的意义在哪呢?不求精而求广?
  关键是很多人培训完了,依然一脸懵逼,感觉自己不知道能干啥,不知道要干啥,又或者说不知道企业到底需要什么人,而自己到底适不适合。
  好了,吐槽完毕,正文来了。
  我个人认为,给初入大数据领域或者跨界进入大数据领域的朋友灌输大数据相关的知识,第一件事不是说各种组件框架生态相关的东西,也不是各种编程语言基础。
  而是,了解清除以下几个问题:
  1 大数据领域到底包含了哪些东西,解决了哪些问题?
  2 自己的实际基础是什么,如何结合自己的基础以及兴趣爱好,在整个大数据领域链路中,找到最好的切入点。
  只有解决了上面两个问题,才能给自己最精确的定位,找准方向深入下去。
  一个人的精力是有限的,在短短的几个月时间内,你不可能把所有的东西都学的精通,哪怕连熟练都难做到,仅仅是皮毛而已。
  所以,有的放矢,把有限的时间放到该定位的地方上去。
  第一个问题,大数据领域的范围
  现在一说起大数据,简单起来就是一个词,但其实这个方向已经可以形成一个技术领域了,包含了方方面面的技术点,也提供了各种不同的技术岗位。
  所以,不同的岗位,对应的需求,工作内容都是不同的。
  我们可以根据数据从下到上,从无到有,到产生价值整个数据业务流程来拆解,并且与此同时,来看看每个环节我们需要的技术储备以及能做的事有哪些。
  数据的几大基本业务流程:
  收集 - 传输 - 转换/清洗 -存储 - 再加工 - 挖掘/统计 - 上层应用输出
  总的来说,可以分以下几个大块。
  第一环:数据的收集
  在收集阶段,我们来看看数据主要有哪几种存在方式:
  1 第三方开放数据集
  2 业务数据
  3 服务日志
  4 行为上报数据
  首先针对于第三方开放数据,目前爬取第三方开放数据的形式已经逐渐被认可,并且将会越来越多的人以及企业从互联网开放数据集中获取原始数据。
  所以,针对于开放数据的获取,爬虫已经可以单独形成一个体系了,包括不同的爬虫框架,以及近年来对于分布式爬虫的技术需求等,在语言方面主要还是python以及java为主,辅助其他相关脚本知识。
  如果数据是业务数据,那么通常在传统的路子中,业务数据一般存储在传统的数据库中,那么,对于传统数据库相关的技术知识不可避免的需要有所了解,最起码简单的数据库操作得会吧。
  其次,我们需要对数据进行统一化处理,又不可避免的涉及到数据的迁移,即从传统数据存储介质中迁移到诸如hadoop生态中,那么涉及的迁移框架诸如sqoop之类的,又是不能不懂一些。
  在语言以及基础要求上,对SQL相关的知识需要补充,以及linux操作,简单的java需要掌握。
  如果数据是记录在服务日志中,那么,我们需要对linux很熟悉,各种脚本的使用,日志文件的各种操作,熟悉各种sed、awk工具等,如果体量大,我们还需要把这些日志文件丢到分布式框架中进行处理、清洗,诸如mr,spark中等。
  所以,对于这种数据的处理,我们需要掌握的一方面是linux的熟悉操作、另一方面是一些诸如离线数据处理框架的使用,语言方面还是以java、脚本类语言为主。
  最后,如果是数据上报的形式,你需要对整个数据上报的流程熟悉,怎么进行埋点、怎么收集上报的数据,上报过来怎么进行传输接受落地,这里就不多说,最终这种上报过来的数据反倒相对规整。
  再来看第二环:数据的传输
  数据的传输到底在什么时候会涉及到呢?
  诸如上面说到的数据上报,在大数据模式下,通常上报过来的数据我们都不会马上进行落地的,因为涉及到不同部分其效率不一样,在峰值波动的情况下,直接落地十有八九都会导致系统宕机。
  所以,数据的传输在大数据领域中有着不可替代的左右,会出现在各种系统耦合之间,一方面用作数据的传输,另一方面用作数据的缓冲、系统解耦。
  在hadoop生态中,最有名的莫过于kafka与flume的组合搭配了,收集数据,并进行数据传输,此外还有不少类似的消息队列存在,诸如ActiveMQ、阿里的RocketMQ等等。
  在这里,我们需要理解的就是,为什么要引入这么一层组件,因为在过去的数据处理模式中,因为数据量的缘故,这一层相对次要。
  第三环:数据的存储
  Hadoop生态中最最核心的存储组件莫过于HDFS了,这是支撑hadoop能够做大批量数据处理的基础支撑,便捷而强悍的横向扩展能力。
  除此之外,还有各种基于此之上不同形式的数据存储方式,诸如hive、HBase、甚至ES、Solr勉强都算,以及不可忽略的传统类型的SQL存储方式。
  我们需要理解的是,不同的存储方式应对于实际的应用场景是不同的,HDFS作为最基础的分布式文件系统,我们就不多说。
  诸如,Hive其更作用更多用于类传统式的SQL查询操作,其对于效应效率要求并不高,但对于数据规模的支撑性良好;而HBase则更偏向于即席查询,要求有更高的响应效率,但对于查询的复杂性支持上则相对较弱。
  而我们说诸如ES、Solr都也勉强算是一种数据存储的组织方式,其实也是有一定道理的,因为他们本身也支持这种分布式的数据存储,只不过他们是为了应对于自己框架的检索需求而设计的数据存储组织。
  此外,还有例如Redis,也算是目前大数据生态中不可缺少的数据存储方式之一,基于内容,应对于高效的数据存储与读取,在很多的实际应用场景中都用的到。
  第四环:数据的再加工
  其实这一层主要要说就是基于Hadoop的MR框架以及Spark,当然,也有其他的一些分布式数据处理框架。
  大规模的数据清洗转换、再加工,都离不开分布式处理框架的支持。
  我们需要对杂乱的数据进行标准化、对残缺的数据进行补全、对原始的数据进行深度加工提取高级属性等等。
  简单的,我们可以通过一些处理脚本来做,但针对于大规模的数据量级,我们依然需要依赖MR或者spark这种框架来处理。
  而针对于一些实时的场景,我们也不可避免的需要掌握诸如storm以及spark streaming之类的实时框架。
  所以,在这一环,我们不止需要了解不同的大数据处理框架,我们还需要在基于框架的基础上,做数据应用开发,进行数据处理。
  通常,在这个环节中,我们需要对于Linux比较熟练,最起码能够熟练的操作服务器,操作不同的框架系统,其次,我们在此基础上做应用开发,脚本以及java语言是必须精通的,如果使用spark等框架,对于scala还是有一定要求的。
  最后一环:数据应用价值输出
  前面我们做了很多事,包括数据的收集、传输、处理、存储等等,但这些都是手段,都不是我们的目的。
  我们的目的是让数据产生价值,这也是企业做大数据的核心目的。
  我们可以用数据来做什么:
  1 基于统计分析、数据预测,做数据化运营、决策,提升效率、效果,这是最常见的应用场景。
  2 做推荐,在主体之外产生衍生价值,提升单位价值转换。
  3 画像体系,至于说画像能做什么,只要能做的准,能做的事可多了。
  4 基于数据化、智能化的搜索。
  5 实现业务的数据化、自动化、智能化。
  6
  在这一环中,包括的东西太多太多,包括大数据培训市场中主流方向:数据分析师,基本属于偏业务分析的路子。
  还有那些培训的算法之类的,也是为这一环服务的(但是,单纯了解算法是什么,个人认为是没啥卵用的)。
  我们先来分析一下关于大数据分析这个方向。
  我一直不认同很多大数据培训机构一直玩命给跨界的朋友培训python、R,认为那就是数据分析师的最最核心的技能了。
  其实不然,在大数据模式下,诸如R这种工具其实本身的局限性已经很大了,我们需要更多能够容纳全量数据分析挖掘的工具,而不是抽样。
  哪怕是你把Hive用的很溜,对于统计分析的理论,以及对于业务的理解能力很强,我认为可以完爆那些传统分析工具用的溜的人,最起码在这个领域中,这种需求会更多。
  所以,假设大数据培训机构想要培训数据分析师,尽量还是往大数据模式下的数据分析路子去走,及时培训R之类的工具,可以结合Hadoop-R、Spark-R之类的来做培训,而Hive这种工具更是不可缺少的,此外,对于统计原理之类的理论知识也需要进行额外的补充。
  最后,对于算法来说,单纯的培训算法其实没啥卵用,一方面本身算法这东西基础要求略高,单纯的从培训的角度来说,了解一个算法是什么是次要的,更重要的是要贯穿实际的业务场景与算法模型的映射,以及各种分布式机器学习库的使用,这就够了。
  单纯的去研究算法,别扯了,太不切实际,学完了妥妥的还是一脸懵逼,如果不把实际业务场景结合起来。
  解决第二个问题,如何做选择
  其实如果你对第一个问题,整个流程有足够熟悉的情况下,这事就好办多了。
  清楚每个节点需要哪些技术储备,这个节点到底负责哪些事务,在整个数据生态中起到什么样的地位。
  结合自己已有的基础储备,去衡量如果自己想要涉足某一个节点,需要额外补充多少的知识才能支撑的起工作需求。
  然后,进行选择,然后有所偏重的去理顺自己的技术结构,额外去深入掌握相关的技术。
  最起码你要知道,你在学习spark,你要知道spark在整个数据生态中、实际的业务中,是做什么的,是不是可替代的。
  所以,当你看到招聘网站上各种大数据相关的JD时,诸如:大数据开发工程师、大数据工程师、hadoop工程师、数据开发工程师、数据分析师、大数据分析师、数据挖掘工程师、算法工程师、ETL工程师等等。
  你需要能够做出分辨,这些岗位到底是属于什么定位,是偏平台搭建、是偏数据架构、是偏数据处理、是偏业务分析、是偏数据业务挖掘、是偏算法研究等等,结合自己掌握的技术点,才能做更好的选择。
  当然,其中的门门道道很多,一篇也说不清楚,但这篇文章的主要目的是说,我们需要对于大局有所了解,知道是什么,想要获得什么,知道将要干什么。
  而不是闷头把"Hadoop全家桶"来一套,要知道,技术框架这东西是很容易被替代的,尤其是大数据领域,相关技术迭代太快,所以我们还是需要结合实际的业务来理解大数据,以及掌握快速学习的能力,这才是正道。
  关于选择方向这里,做一点补充,针对于哪些跨界想进入数据挖掘或者算法领域的朋友。
  个人认为如果你想进入大数据领域从事数据挖掘相关的工作,最好建议有以下两种基础最好,有其一即可:
  1 有良好的算法理论基础,通常是需要相对较好学历以及对口的在校研究方向。
  2 在大数据处理领域有足够的数据处理经验,对业务场景足够清楚,对分布式框架和工具能够熟练使用。
  对于前者,工程化能力可能相对较弱,但可以专注于算法研究;对于后者,则可以偏重业务,注重如何将实际的业务问题转换为算法模型问题。
  两者侧重点不同,一个明确模型,研究是模型更加契合业务的问题,研究的是如何提升已知问题的精准问题;另一个是如何将未知业务映射成已知的算法数学模型,需要对业务足够了解、敏感,并且能够进行工程化。
  关于这两者的区别,有时间再开单章说道了,这里就不过多细说。总之,对于普通跨界的来说,建议不要选择这种门槛略高的细分方向,因为后续你的找工作风险略高。
  最最后,关于大数据培训的出路,个人建议选择的时候尽量选择能够让你获得实习或者正式工作机会的机构,因为跨界的第一份工作算是个跳板,很重要,也少有选择,所以需要把握住机会,如果有机会留下来,甭管他是不是外包、实习是不是有工资拿。
  这只是一个跳板而已,此后,天高任鸟飞,海阔凭鱼跃,靠自己了,培训机构只是让你有入门的机会而已,所以要把握住。
  所以,培训机构最大的好处是让你有机会进入这个领域,真正的累积需要入门之后在实际的工作中自己把握机会多学习!
  最后,发现个人私密群除了能省事(省自己的事,省群友的事),还能衍生不少值得探讨的话题,都是与群友一起讨论聊天时衍生出来的。







欢迎光临 开发者俱乐部 (http://xodn.com/) Powered by Discuz! X3.2