一,题记java
要说当下IT行业什么最火?ABC无出其右。所谓ABC者,AI + Big Data + Cloud也,即人工智能、大数据和云计算(云平台)。每一个领域目前都有行业领袖在引领前行,今天咱们来讨论下大数据Big Data这个方向。node
二,大数据里面的角色python
角色一:大数据工程linux
大数据工程须要解决数据的定义、收集、计算与保存的工做,所以大数据工程师们在设计和部署这样的系统时首要考虑的是数据高可用的问题,即大数据工程系统须要实时地为下游业务系统或分析系统提供数据服务;redis
角色二:大数据分析算法
大数据分析角色定位于如何利用数据——即从大数据工程系统中接收到数据以后如何为企业或组织提供有产出的数据分析,而且确实可以帮助到公司进行业务改善或提高服务水平,因此对于大数据分析师来讲,他们首要解决的问题是发现并利用数据的价值,具体可能包括:趋势分析、模型创建以及预测分析等。sql
这两类角色相互依存但又独立运做,何意?没有大数据工程,大数据分析便无从谈起;但假若没有大数据分析,我也实在想不出大数据工程存在的理由。这就相似于结婚和谈恋爱——恋爱的目的是为告终婚,且不以结婚为目的的谈恋爱都是耍流氓。shell
简单总结一下,大数据工程角色须要考虑数据的收集、计算(或是处理)和保存;大数据分析角色则是执行数据的高级计算。数据库
三,大数据工程师编程
针对角色一:大数据工程说,对应的工做岗位就叫大数据工程师,对于大数据工程师而言,您至少要掌握如下技能:
linux基础
由于大数据体系,基本都是开源软件,这些开源软件都是在开源的linux系统上运行的,因此你必须会基本的linux操做,好比用户管理,权限,shell编程之类的
一门JVM系语言:
当前大数据生态JVM系语言类的比重极大,某种程度上说是垄断也不为过。这里我推荐你们学习Java或Scala,至于Clojure这样的语言上手不易,其实并不推荐你们使用。另外,现在是“母以子贵”的年代,某个大数据框架会带火它的编程语言的流行,好比Docker之于Go、Kafka之于Scala。
所以这里建议您至少要精通一门JVM系的语言。值得一提的,必定要弄懂这门语言的多线程模型和内存模型,不少大数据框架的处理模式其实在语言层面和多线程处理模型是相似的,只是大数据框架把它们引伸到了多机分布式这个层面。
建议:学习Java或Scala
计算处理框架:
严格来讲,这分为离线批处理和流式处理。流式处理是将来的趋势,建议你们必定要去学习;而离线批处理其实已经快过期了,它的分批处理思想没法处理无穷数据集,所以其适用范围日益缩小。事实上,Google已经在公司内部正式废弃了以MapReduce为表明的离线处理。
所以若是要学习大数据工程,掌握一门实时流式处理框架是必须的。当下主流的框架包括:Apache Samza, Apache Storm, Apache Spark Streaming以及最近一年风头正劲的Apache Flink。固然Apache Kafka也推出了它本身的流式处理框架:Kafka Streams
建议:学习Flink、Spark Streaming或Kafka Streams中的一个。
分布式存储框架:
虽然说MapReduce有些过期了,但Hadoop的另外一个基石HDFS依然坚挺,而且是开源社区最受欢迎的分布式存储,绝对您花时间去学习。
资源调度框架:
Docker但是整整火了最近一两年。各个公司都在发力基于Docker的容器解决方案,最有名的开源容器调度框架就是K8S了,但一样著名的还有Hadoop的YARN和Apache Mesos。后二者不只能够调度容器集群,还能够调度非容器集群,很是值得咱们学习。
分布式协调框架:
有一些通用的功能在全部主流大数据分布式框架中都须要实现,好比服务发现、领导者选举、分布式锁、KV存储等。这些功能也就催生了分布式协调框架的发展。最古老也是最有名的当属Apache Zookeeper了,新一些的包括Consul,etcd等。学习大数据工程,分布式协调框架是不能不了解的, 某种程度上还要深刻了解。
列式存储数据库:
曾经花了很长的时间学习Oracle,但不得不认可当下关系型数据库已经慢慢地淡出了人们的视野,有太多的方案能够替代rdbms了。人们针对行式存储不适用于大数据ad-hoc查询这种弊端开发出了列式存储,典型的列式存储数据库就是开源社区的HBASE。
消息队列:
大数据工程处理中消息队列做为“削峰填谷”的主力系统是必不可少的,当前该领域内的解决方案有不少,包括ActiveMQ,Kafka等。国内阿里也开源了RocketMQ。这其中的翘楚当属Apache Kafka了。Kafka的不少设计思想都特别契合分布流式数据处理的设计理念。这也难怪,Kafka的原做者Jay Kreps但是当今实时流式处理方面的顶级大神。
建议:学习Kafka,不只仅好找工做(几乎全部大数据招聘简历都要求会Kafka:-) ),还能举一反三进一步理解基于备份日志方式的数据处理范型
四,大数据分析师Or数据科学家
针对角色二:大数据分析,对应的工做岗位就叫大数据分析师或者数据科学家,做为数据科学家的咱们必需要掌握如下技能:
数学功底:
微积分是严格要掌握的。不必定要掌握多元微积分,但一元微积分是必需要熟练掌握并使用的。另外线性代数必定要精通,特别是矩阵的运算、向量空间、秩等概念。当前机器学习框架中不少计算都须要用到矩阵的乘法、转置或是求逆。虽然不少框架都直接提供了这样的工具,但咱们至少要了解内部的原型原理,好比如何高效判断一个矩阵是否存在逆矩阵并如何计算等。
重温同济版《高等数学》,有条件能够去Coursea学习宾夕法尼亚大学的微积分课程
推荐学习Strang的线性代数:《Introduction to Linear Algebra》——这是最经典的教材,没有之一!
数理统计:
几率和各类统计学方法要作到基本掌握,好比贝叶斯几率如何计算?几率分布是怎么回事?虽不要求精通,但对相关背景和术语必定要了解
找一本《几率论》从新学习下
交互式数据分析框架:
这里并非指SQL或数据库查询,而是像Apache Hive或Apache Kylin这样的分析交互框架。开源社区中有不少这样相似的框架,可使用传统的数据分析方式对大数据进行数据分析或数据挖掘。
有过使用经验的是Hive和Kylin。不过Hive特别是Hive1是基于MapReduce的,性能并不是特别出色,而Kylin采用数据立方体的概念结合星型模型,能够作到很低延时的分析速度,何况Kylin是第一个研发团队主力是中国人的Apache孵化项目,所以日益受到普遍的关注。
首先学习Hive,有时间的话了解一下Kylin以及背后的数据挖掘思想。
机器学习框架:
机器学习当前真是火爆宇宙了,人人都提机器学习和AI,但笔者一直认为机器学习恰似几年前的云计算同样,目前虽然火爆,但没有实际的落地项目,可能还须要几年的时间才能逐渐成熟。
不过在如今就开始储备机器学习的知识老是没有坏处的。说到机器学习的框架,你们耳熟能详的有不少种, 信手拈来的就包括TensorFlow、Caffe八、Keras九、CNTK十、Torch711等,其中又以TensorFlow领衔。
当前建议你们选取其中的一个框架进行学习,但以我对这些框架的了解,这些框架大多很方便地封装了各类机器学习算法提供给用户使用,但对于底层算法的了解其实并无太多可学习之处。所以仍是建议能够从机器学习算法的原理来进行学习,好比:
目前机器学习领域最NB的入门课程:吴恩达博士的Machine Learning
想学习大数据或者想学习大数据的朋友,我整理了一套大数据的学习视频这里免费分享给你们,从入门到实战都有,你们能够加微信:Lxiao_28获取,还能够拉微信群交流学习!(备注领取资料,真实有效)。
五,大数据必备技能详细
由于自己是偏Java应用方向的,因此整理的大数据必备技能详细,也是偏向于大数据工程师方向。总共分为五大部分,分别是:
离线计算Hadoop
流式计算Storm
内存计算Spark
机器学习算法
linux操做基础
linux系统简介与安装
linux经常使用命令–文件操做
linux经常使用命令–用户管理与权限
linux经常使用命令–系统管理
linux经常使用命令–免密登录配置与网络管理
linux上经常使用软件安装
linux本地yum源配置及yum软件安装
linux防火墙配置
linux高级文本处理命令cut、sed、awk
linux定时任务crontab
shell编程
shell编程–基本语法
shell编程–流程控制
shell编程–函数
shell编程–综合案例–自动化部署脚本
内存数据库redis
redis和nosql简介
redis客户端链接
redis的string类型数据结构操做及应用-对象缓存
redis的list类型数据结构操做及应用案例-任务调度队列
redis的hash及set数据结构操做及应用案例-购物车
redis的sortedset数据结构操做及应用案例-排行榜
布式协调服务zookeeper
zookeeper简介及应用场景
zookeeper集群安装部署
zookeeper的数据节点与命令行操做
zookeeper的java客户端基本操做及事件监听
zookeeper核心机制及数据节点
zookeeper应用案例–分布式共享资源锁
zookeeper应用案例–服务器上下线动态感知
zookeeper的数据一致性原理及leader选举机制
java高级特性加强
Java多线程基本知识
Java同步关键词详解
java并发包线程池及在开源软件中的应用
Java并发包消息队里及在开源软件中的应用
Java JMS技术
Java动态代理反射
轻量级RPC框架开发
RPC原理学习
Nio原理学习
Netty经常使用API学习
轻量级RPC框架需求分析及原理分析
轻量级RPC框架开发
离线计算Hadoop
hadoop快速入门
hadoop背景介绍
分布式系统概述
离线数据分析流程介绍
集群搭建
集群使用初步
HDFS加强
HDFS的概念和特性
HDFS的shell(命令行客户端)操做
HDFS的工做机制
NAMENODE的工做机制
java的api操做
案例1:开发shell采集脚本
MAPREDUCE详解
自定义hadoop的RPC框架
Mapreduce编程规范及示例编写
Mapreduce程序运行模式及debug方法
mapreduce程序运行模式的内在机理
mapreduce运算框架的主体工做流程
自定义对象的序列化方法
MapReduce编程案例
MAPREDUCE加强
Mapreduce排序
自定义partitioner
Mapreduce的combiner
mapreduce工做机制详解
MAPREDUCE实战
maptask并行度机制-文件切片
maptask并行度设置
倒排索引
共同好友
federation介绍和hive使用
Hadoop的HA机制
HA集群的安装部署
集群运维测试之Datanode动态上下线
集群运维测试之Namenode状态切换管理
集群运维测试之数据块的balance
HA下HDFS-API变化
hive简介
hive架构
hive安装部署
hvie初使用
hive加强和flume介绍
HQL-DDL基本语法
HQL-DML基本语法
HIVE的join
HIVE 参数配置
HIVE 自定义函数和Transform
HIVE 执行HQL的实例分析
HIVE最佳实践注意点
HIVE优化策略
HIVE实战案例
Flume介绍
Flume的安装部署
案例:采集目录到HDFS
案例:采集文件到HDFS
流式计算Storm
Storm从入门到精通
Storm是什么
Storm架构分析
Storm架构分析
Storm编程模型、Tuple源码、并发度分析
Storm WordCount案例及经常使用Api分析
Storm集群部署实战
Storm+Kafka+Redis业务指标计算
Storm源码下载编译
Strom集群启动及源码分析
Storm任务提交及源码分析
Storm数据发送流程分析
Storm通讯机制分析
Storm消息容错机制及源码分析
Storm多stream项目分析
编写本身的流式任务执行框架
Storm上下游及架构集成
消息队列是什么
Kakfa核心组件
Kafka集群部署实战及经常使用命令
Kafka配置文件梳理
Kakfa JavaApi学习
Kafka文件存储机制分析
Redis基础及单机环境部署
Redis数据结构及典型案例
Flume快速入门
Flume+Kafka+Storm+Redis整合
内存计算Spark
scala编程
scala编程介绍
scala相关软件安装
scala基础语法
scala方法和函数
scala函数式编程特色
scala数组和集合
scala编程练习(单机版WordCount)
scala面向对象
scala模式匹配
actor编程介绍
option和偏函数
实战:actor的并发WordCount
柯里化
隐式转换
AKKA与RPC
Akka并发编程框架
实战:RPC编程实战
Spark快速入门
spark介绍
spark环境搭建
RDD简介
RDD的转换和动做
实战:RDD综合练习
RDD高级算子
自定义Partitioner
实战:网站访问次数
广播变量
实战:根据IP计算归属地
自定义排序
利用JDBC RDD实现数据导入导出
WorldCount执行流程详解
RDD详解
RDD依赖关系
RDD缓存机制
RDD的Checkpoint检查点机制
Spark任务执行过程分析
RDD的Stage划分
Spark-Sql应用
Spark-SQL
Spark结合Hive
DataFrame
实战:Spark-SQL和DataFrame案例
SparkStreaming应用实战
Spark-Streaming简介
Spark-Streaming编程
实战:StageFulWordCount
Flume结合Spark Streaming
Kafka结合Spark Streaming
窗口函数
ELK技术栈介绍
ElasticSearch安装和使用
Storm架构分析
Storm编程模型、Tuple源码、并发度分析
Storm WordCount案例及经常使用Api分析
Spark核心源码解析
Spark源码编译
Spark远程debug
Spark任务提交行流程源码分析
Spark通讯流程源码分析
SparkContext建立过程源码分析
DriverActor和ClientActor通讯过程源码分析
Worker启动Executor过程源码分析
Executor向DriverActor注册过程源码分析
Executor向Driver注册过程源码分析
DAGScheduler和TaskScheduler源码分析
Shuffle过程源码分析
Task执行过程源码分析
机器学习算法
python及numpy库
机器学习简介
机器学习与python
python语言–快速入门
python语言–数据类型详解
python语言–流程控制语句
python语言–函数使用
python语言–模块和包
phthon语言–面向对象
python机器学习算法库–numpy
机器学习必备数学知识–几率论
经常使用算法实现
knn分类算法–算法原理
knn分类算法–代码实现
knn分类算法–手写字识别案例
lineage回归分类算法–算法原理
lineage回归分类算法–算法实现及demo
朴素贝叶斯分类算法–算法原理
朴素贝叶斯分类算法–算法实现
朴素贝叶斯分类算法–垃圾邮件识别应用案例
kmeans聚类算法–算法原理
kmeans聚类算法–算法实现
kmeans聚类算法–地理位置聚类应用
决策树分类算法–算法原理
决策树分类算法–算法实现