在16年8月份至今,一直在努力学习大数据大数据相关的技术,很想了解众多老司机的学习历程。由于大数据涉及的技术很广须要了解的东西也不少,会让不少新手望而却步。因此,我就在本身学习的过程当中总结一下学到的内容以及踩到的一些坑,但愿获得老司机的指点和新手的借鉴。html
目前正在结合机器学习理论学习MLlib源码java
在学习大数据以前,先要了解他解决了什么问题,能给咱们带来什么价值。一方面,之前IT行业发展没有那么快,系统的应用也不完善,数据库足够支撑业务系统。可是随着行业的发展,系统运行的时间愈来愈长,搜集到的数据也愈来愈多,传统的数据库已经不能支撑全量数据的存储工做;另外一方面,数据愈来愈多,单机的计算已经成为瓶颈。所以,基于分布式的大数据系统崭露头角。那么大数据系统里面都有什么东西呢?能够参考下面的图node
在存储上,hdfs的分布式存储能够任意水平扩展,能够解决数据存储的难题。在计算上,从最初的MapReduce,把任务水平拆分,多台机器并行计算,再汇总结果;到基于Spark的内存计算,改造Mapreduce每次数据落盘以及编程方式的痛点。mysql
有了存储和计算框架,周边就衍生出了不少管理、缓存相关的技术,好比:面试
上面都是hadoop生态的,因为hadoop中计算模型广泛是mapreduce,可是它的编程风格和计算机制让不少人使用不便。所以后来spark逐渐代替了mapr成为主流的计算框架。Spark也有它本身的生态,可是因为hadoop更多更早的被应用到企业,因此spark也能够无缝的集成hadoop生态中的产品。spark更多只是扮演一个计算的框架,在这个框架上,提供了基本的计算模块core,基于sql的计算引擎spark sql,对接实时数据的流式计算spark streaming,算法相关的mlib以及图计算相关的graphx。算法
这些框架都在这个大数据生态中扮演了本身重要的角色,他们协同工做就能够帮助咱们解决不少难题。因为我也是接触不久,因此就按照本身学习和工做涉及的内容,在下面按照各个章节进行介绍,后续也会持续的更新。但愿对全部对大数据感兴趣的sql
在学习大数据的过程当中,须要具有的能力或者知识,在这里简单的罗列一下:shell
hdfs是大数据系统的基础,它提供了基本的存储功能,因为底层数据的分布式存储,上层任务也能够利用数据的本地性进行分布式计算。hdfs思想上很简单,就是namenode负责数据存储位置的记录,datanode负责数据的存储。使用者client会先访问namenode询问数据存在哪,而后去datanode存储;写流程也基本相似,会先在namenode上询问写到哪,而后把数据存储到对应的datanode上。因此namenode做为整个系统的灵魂,一旦它挂掉了,整个系统也就没法使用了。在运维中,针对namenode的高可用变得十分关键。数据库
hive基于hdfs构建了数据仓库系统,它以hdfs做为存储,依赖于数据库(嵌入式的数据库derby或者独立的数据mysql或oracle)存储表schema信息,并完成基于sql自动解析建立mapreduce任务(因为mapreduce计算效率比较差,目前官方推荐的是底层计算模型采用tez或者spark)。因此hive能够理解为:hdfs原始存储+DB Schema信息存储+SQL解析引擎+底层计算框架组成的数据仓库。apache
spark是如今大数据中应用最多的计算模型,它与java8的stream编程有相同的风格。封装了不少的计算方法和模型,以延迟执行的方式,在真正须要执行的时候才进行运算。既能够有效的作计算过程的容错,也能够改善咱们的编程模型。
oozie提供了大数据场景下各类任务的调度,好比shell脚本、spark任务、mapreduce任务、sqoop任务、hive查询以及普通的java程序等等。它的编译是生态圈里面最复杂的,因为以来的各个版本不一样,须要指定特定的版本,所以没有成型的一键部署包。
sqoop支持基于sql或者表名把数据库中的数据存储到分布式环境中,数据库支持oracle\mysql等等,分布式环境能够是hdfs,hive,hbase等等,数据的导入时双向的,好比你能够把oracle中的数据读取存储到hdfs,也能够把hdfs的数据导入到oracle.
HBase是基于Hdfs之上的列式数据库,基于文件分割以及rowkey的顺序存储,能快速索引查询数据。我这边是在推荐系统中,做为推荐结果存储引擎,不过因为内容比较碎片化,Hbase写入时间比较随意,所以总会出现大量超时现象,还在持续优化中。
推荐学习资料:
我的总结:
在企业中,大数据的基础平台每每是多个用户共用的,那么如何管理资源的分配,就须要yarn来处理了。Yarn默认提供了三种资源分配的策略:
常见能够用于分配的资源能够是节点的数量,内存的大小,也能够是CPU核数。
从名字来讲他是动物园的管理员,实际上他是各个组件的协调者。能够实现相似主从选举、分布式事务、负载均衡等多种功能,好比HDFS HA方案、HBase的Metastore、Kafka里面的offset维护等等,由此能够见,zookeeper的重要性。
不过激发我学习zookeeper的主要缘由仍是由于它里面涉及了不少分布式协议的东西,从而能更好的理解分布式中的一些概念。因此,就跟着我一块儿深刻浅出的学习吧!
主要参考:官方文档 《从Paxos到zookeeper分布式一致性原理与实践》
上面是我学习hadoop和spark的分享,更重要的是学习历程的记录,但愿有兴趣学习大数据的朋友能够经过我以前的学习路线得到一些思考和借鉴。后续也会逐步的完善,等到对总体有了比较全面的了解后,会专门针对安装部署、使用实践、原理解析进行介绍。