java转大数据方向学习路线

申明:

本文旨在为普通程序员(Java程序员最佳)提供一个入门级别的大数据技术学习路径,不适用于大数据工程师的进阶学习,也不适用于零编程基础的同学。


目录

前言

一、背景介绍

二、大数据介绍

正文

一、大数据相关工作介绍

二、大数据工程师的技能要求

必须掌握的技能11条

高阶技能6条

三、大数据学习规划

第一阶段(基础阶段)

第二阶段(攻坚阶段)

第三阶段(辅助工具工学习阶段)

第四阶段(不断学习阶段)

四、持续学习资源推荐

五、项目案例分析


前言

一、背景介绍

本人目前是一名大数据工程师,项目数据50T,日均数据增长20G左右,个人是从Java后端开发,经过3个月的业余自学成功转型大数据工程师。

二、大数据介绍

大数据本质也是数据,但是又有了新的特征,包括数据来源广、数据格式多样化(结构化数据、非结构化数据、Excel文件、文本文件等)、数据量大(最少也是TB级别的、甚至可能是PB级别)、数据增长速度快等。

针对以上主要的4个特征我们需要考虑以下问题:

  1. 数据来源广,该如何采集汇总?,对应出现了Sqoop,Cammel,Datax等工具。
  2. 数据采集之后,该如何存储?,对应出现了GFS,HDFS,TFS等分布式文件存储系统。
  3. 由于数据增长速度快,数据存储就必须可以水平扩展。
  4. 数据存储之后,该如何通过运算快速转化成一致的格式,该如何快速运算出自己想要的结果

     对应的MapReduce这样的分布式运算框架解决了这个问题;但是写MapReduce需要Java代码量很大,所以出现了Hive,Pig       等将SQL转化成MapReduce的解析引擎;

     普通的MapReduce处理数据只能一批一批地处理,时间延迟太长,为了实现每输入一条数据就能得到结果,于是出现了            Storm/JStorm这样的低时延的流式计算框架;

    但是如果同时需要批处理和流处理,按照如上就得搭两个集群,Hadoop集群(包括HDFS+MapReduce+Yarn)和Storm集  群,不易于管理,所以出现了Spark这样的一站式的计算框架,既可以进行批处理,又可以进行流处理(实质上是微批处理)。

  1. 而后Lambda架构,Kappa架构的出现,又提供了一种业务处理的通用架构。
  2. 为了提高工作效率,加快运速度,出现了一些辅助工具:

    1. Ozzie,azkaban:定时任务调度的工具。
    2. Hue,Zepplin:图形化任务执行管理,结果查看工具。
    3. Scala语言:编写Spark程序的最佳语言,当然也可以选择用Python。
    4. Python语言:编写一些脚本时会用到。
    5. Allluxio,Kylin等:通过对存储的数据进行预处理,加快运算速度的工具。

以上大致就把整个大数据生态里面用到的工具所解决的问题列举了一遍,知道了他们为什么而出现或者说出现是为了解决什么问题,进行学习的时候就有的放矢了。

正文

一、大数据相关工作介绍

大数据方向的工作目前主要分为三个主要方向:

  1. 大数据工程师
  2. 数据分析师
  3. 大数据科学家
  4. 其他(数据挖掘等)

二、大数据工程师的技能要求

附上大数据工程师技能图:

enter image description here

必须掌握的技能11条

  1. Java高级(虚拟机、并发)
  2. Linux 基本操作
  3. Hadoop(HDFS+MapReduce+Yarn )
  4. HBase(JavaAPI操作+Phoenix )
  5. Hive(Hql基本操作和原理理解)
  6. Kafka
  7. Storm/JStorm
  8. Scala
  9. Python
  10. Spark (Core+sparksql+Spark streaming )
  11. 辅助小工具(Sqoop/Flume/Oozie/Hue等)

高阶技能6条

  1. 机器学习算法以及mahout库加MLlib
  2. R语言
  3. Lambda 架构
  4. Kappa架构
  5. Kylin
  6. Alluxio

三、大数据学习规划

假设每天可以抽出3个小时的有效学习时间,加上周末每天保证10个小时的有效学习时间;

3个月会有(21*3+4*2*10)*3=423小时的学习时间。

第一阶段(基础阶段)

1)Linux学习(跟鸟哥学就ok了)—–20小时

  1. Linux操作系统介绍与安装。
  2. Linux常用命令。
  3. Linux常用软件安装。
  4. Linux网络。
  5. 防火墙。
  6. Shell编程等。

官网:https://www.centos.org/download/
中文社区:http://www.linuxidc.com/Linux/2017-09/146919.htm

2)Java 高级学习(《深入理解Java虚拟机》、《Java高并发实战》)—30小时

  1. 掌握多线程。
  2. 掌握并发包下的队列。
  3. 了解JMS。
  4. 掌握JVM技术。
  5. 掌握反射和动态代理。

官网:https://www.java.com/zh_CN/
中文社区:http://www.java-cn.com/index.html

3)Zookeeper学习(可以参照这篇博客进行学习:http://www.cnblogs.com/wuxl360/p/5817471.html)

  1. Zookeeper分布式协调服务介绍。
  2. Zookeeper集群的安装部署。
  3. Zookeeper数据结构、命令。
  4. Zookeeper的原理以及选举机制。

官网:http://zookeeper.apache.org/
中文社区:http://www.aboutyun.com/forum-149-1.html

第二阶段(攻坚阶段)

4)Hadoop (《Hadoop 权威指南》)—80小时

1、HDFS

  1. HDFS的概念和特性。
  2. HDFS的shell操作。
  3. HDFS的工作机制。
  4. HDFS的Java应用开发。

2、MapReduce

  1. 运行WordCount示例程序。
  2. 了解MapReduce内部的运行机制。 
    1. MapReduce程序运行流程解析。
    2. MapTask并发数的决定机制。
    3. MapReduce中的combiner组件应用。
    4. MapReduce中的序列化框架及应用。
    5. MapReduce中的排序。
    6. MapReduce中的自定义分区实现。
    7. MapReduce的shuffle机制。
    8. MapReduce利用数据压缩进行优化。
    9. MapReduce程序与YARN之间的关系。
    10. MapReduce参数优化。

3、MapReduce的Java应用开发

官网:http://hadoop.apache.org/
中文文档:http://hadoop.apache.org/docs/r1.0.4/cn/
中文社区:http://www.aboutyun.com/forum-143-1.html

5)Hive(《Hive开发指南》)–20小时

  1. Hive 基本概念
    1. Hive 应用场景。
    2. Hive 与hadoop的关系。
    3. Hive 与传统数据库对比。
    4. Hive 的数据存储机制。
  2. Hive 基本操作
    1. Hive 中的DDL操作。
    2. 在Hive 中如何实现高效的JOIN查询。
    3. Hive 的内置函数应用。
    4. Hive shell的高级使用方式。
    5. Hive 常用参数配置。
    6. Hive 自定义函数和Transform的使用技巧。
    7. Hive UDF/UDAF开发实例。
  3. Hive 执行过程分析及优化策略

官网:https://hive.apache.org/
中文入门文档:http://www.aboutyun.com/thread-11873-1-1.html
中文社区:http://www.aboutyun.com/thread-7598-1-1.html

6)HBase(《HBase权威指南》)—20小时

  1. hbase简介。
  2. habse安装。
  3. hbase数据模型。
  4. hbase命令。
  5. hbase开发。
  6. hbase原理。

官网:http://hbase.apache.org/
中文文档:http://abloz.com/hbase/book.html
中文社区:http://www.aboutyun.com/forum-142-1.html

7)Scala(《快学Scala》)–20小时

  1. Scala概述。
  2. Scala编译器安装。
  3. Scala基础。
  4. 数组、映射、元组、集合。
  5. 类、对象、继承、特质。
  6. 模式匹配和样例类。
  7. 了解Scala Actor并发编程。
  8. 理解Akka。
  9. 理解Scala高阶函数。
  10. 理解Scala隐式转换。

官网:http://www.scala-lang.org/
初级中文教程:http://www.runoob.com/scala/scala-tutorial.html

8)Spark (《Spark 权威指南》)—60小时

enter image description here

  1. Spark core
    1. Spark概述。
    2. Spark集群安装。
    3. 执行第一个Spark案例程序(求PI)。
  2. RDD
    1. RDD概述。
    2. 创建RDD。
    3. RDD编程API(Transformation 和 Action Operations)。
    4. RDD的依赖关系
    5. RDD的缓存
    6. DAG(有向无环图)
  3. Spark SQL and DataFrame/DataSet
    1. Spark SQL概述。
    2. DataFrames。
    3. DataFrame常用操作。
    4. 编写Spark SQL查询程序。
  4. Spark Streaming
    1. park Streaming概述。
    2. 理解DStream。
    3. DStream相关操作(Transformations 和 Output Operations)。
  5. Structured Streaming
  6. 其他(MLlib and GraphX )

这个部分一般工作中如果不是数据挖掘,机器学习一般用不到,可以等到需要用到的时候再深入学习。

官网:http://spark.apache.org
中文文档(但是版本有点老):https://www.gitbook.com/book/aiyanbo/spark-programming-guide-zh-cn/details
中文社区:http://www.aboutyun.com/forum-146-1.html

9)Python (推荐廖雪峰的博客—30小时

10)自己用虚拟机搭建一个集群,把所有工具都装上,自己开发一个小demo —30小时

可以自己用VMware搭建4台虚拟机,然后安装以上软件,搭建一个小集群(本人亲测,I7,64位,16G内存,完全可以运行起来,以下附上我学习时用虚拟机搭建集群的操作文档)

集群搭建文档1.0版本

1. 集群规划

enter image description here

2. 前期准备

2.0 系统安装

2.1 主机名配置

    2.1.0 vi /etc/sysconfig/network
        NETWORKING=yes

    2.1.1 vi /etc/sysconfig/network
        NETWORKING=yes
        HOSTNAME=ys02

    2.1.2 vi /etc/sysconfig/network
        NETWORKING=yes

    2.1.3 vi /etc/sysconfig/network
        NETWORKING=yes
        HOSTNAME=ys04

2.2 host文件修改
    2.2.0 vi /etc/hosts
        10.1.1.149 ys01
        10.1.1.148 ys02
        10.1.1.146 ys03
        10.1.1.145 ys04
2.3 关闭防火墙(centos 7默认使用的是firewall,centos 6 默认是iptables)

    2.3.0 systemctl stop firewalld.service (停止firewall)

    2.3.1 systemctl disable firewalld.service (禁止firewall开机启动)

    2.3.2 firewall-cmd --state (查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

2.4 免密登录(ys01 ->ys02,03,04)
    ssh-keygen -t rsa
    ssh-copy-id ys02(随后输入密码)
    ssh-copy-id ys03(随后输入密码)
    ssh-copy-id ys04(随后输入密码)
    ssh ys02(测试是否成功)
    ssh ys03(测试是否成功)
    ssh ys04(测试是否成功)

2.5 系统时区与时间同步
    tzselect(生成日期文件)
    cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime(将日期文件copy到本地时间中)

3. 软件安装

3.0 安装目录规划(软件为所有用户公用)

    3.0.0所有软件的安装放到/usr/local/ys/soft目录下(mkdir /usr/local/ys/soft)

    3.0.1所有软件安装到/usr/local/ys/app目录下(mkdir /usr/local/ys/app)

 3.1 JDK(jdk1.7)安装

    3.1.1 alt+p 后出现sftp窗口,cd /usr/local/ys/soft,使用sftp上传tar包到虚机ys01的/usr/local/ys/soft目录下

    3.1.2解压jdk
      cd /usr/local/ys/soft
        #解压
        tar -zxvf jdk-7u80-linux-x64.tar.gz -C /usr/local/ys/app

    3.1.3将java添加到环境变量中
    vim /etc/profile
    #在文件最后添加
    export JAVA_HOME= /usr/local/ys/app/ jdk-7u80
    export PATH=$PATH:$JAVA_HOME/bin

    3.1.4 刷新配置
    source /etc/profile

3.2 Zookeeper安装

    3.2.0解压
    tar -zxvf zookeeper-3.4.5.tar.gz -C /usr/local/ys/app(解压)

    3.2.1 重命名
    mv zookeeper-3.4.5 zookeeper(重命名文件夹zookeeper-3.4.5为zookeeper)

    3.2.2修改环境变量
    vi /etc/profile(修改文件)
    添加内容:
    export ZOOKEEPER_HOME=/usr/local/ys/app/zookeeper
    export PATH=$PATH:$ZOOKEEPER_HOME/bin

    3.2.3 重新编译文件:
    source /etc/profile
    注意:3台zookeeper都需要修改

    3.2.4修改配置文件
    cd zookeeper/conf
    cp zoo_sample.cfg zoo.cfg
    vi zoo.cfg
    添加内容:
    dataDir=/usr/local/ys/app/zookeeper/data
    dataLogDir=/usr/local/ys/app/zookeeper/log
    server.1=ys01:2888:3888 (主机名, 心跳端口、数据端口)
    server.2=ys02:2888:3888
    server.3=ys04:2888:3888

    3.2.5 创建文件夹
    cd /usr/local/ys/app/zookeeper/
    mkdir -m 755 data
    mkdir -m 755 log

    3.2.6 在data文件夹下新建myid文件,myid的文件内容为:
    cd data
    vi myid
    添加内容:
        1
    将集群下发到其他机器上
    scp -r /usr/local/ys/app/zookeeper ys02:/usr/local/ys/app/
    scp -r /usr/local/ys/app/zookeeper ys04:/usr/local/ys/app/

    3.2.7修改其他机器的配置文件
    到ys02上:修改myid为:2
    到ys02上:修改myid为:3

    3.2.8启动(每台机器)
    zkServer.sh start
    查看集群状态
    jps(查看进程)
    zkServer.sh status(查看集群状态,主从信息)

3.3 Hadoop(HDFS+Yarn)

    3.3.0 alt+p 后出现sftp窗口,使用sftp上传tar包到虚机ys01的/usr/local/ys/soft目录下

    3.3.1 解压jdk
      cd /usr/local/ys/soft
        #解压
        tar -zxvf cenos-7-hadoop-2.6.4.tar.gz -C /usr/local/ys/app

    3.3.2 修改配置文件

core-site.xml

第三阶段(辅助工具工学习阶段)

11)Sqoop(CSDN,51CTO ,以及官网)—20小时

  1. 数据导出概念介绍
  2. Sqoop基础知识
  3. Sqoop原理及配置说明
  4. Sqoop数据导入实战
  5. Sqoop数据导出实战、
  6. Sqoop批量作业操作

推荐学习博客:http://student-lp.iteye.com/blog/2157983
官网:http://sqoop.apache.org/

12)Flume(CSDN,51CTO ,以及官网)—20小时

enter image description here

  1. FLUME日志采集框架介绍。
  2. FLUME工作机制。
  3. FLUME核心组件。
  4. FLUME参数配置说明。
  5. FLUME采集nginx日志案例(案例一定要实践一下)
  6. 推荐学习博客:http://www.aboutyun.com/thread-8917-1-1.html

官网:http://flume.apache.org

13)Oozie(CSDN,51CTO ,以及官网)–20小时

  1. 任务调度系统概念介绍。
  2. 常用任务调度工具比较。
  3. Oozie介绍。
  4. Oozie核心概念。
  5. Oozie的配置说明。
  6. Oozie实现mapreduce/hive等任务调度实战案例。

推荐学习博客:http://www.infoq.com/cn/articles/introductionOozie
官网:http://oozie.apache.org/

14)Hue(CSDN,51CTO ,以及官网)–20小时

推荐学习博客:http://ju.outofmemory.cn/entry/105162
官网:http://gethue.com/

第四阶段(不断学习阶段)

每天都会有新的东西出现,需要关注最新技术动态,不断学习。任何一般技术都是先学习理论,然后在实践中不断完善理论的过程。

备注

1)如果你觉得自己看书效率太慢,你可以网上搜集一些课程,跟着课程走也OK 。如果看书效率不高就很网课,相反的话就自己看书。

2)企业目前更倾向于使用Spark进行微批处理,Storm只有在对时效性要求极高的情况下,才会使用,所以可以做了解。重点学习Spark Streaming。

3)快速学习的能力、解决问题的能力、沟通能力**真的很重要。

4)要善于使用StackOverFlow和Google(遇到解决不了的问题,先Google,如果Google找不到解决方能就去StackOverFlow提问,一般印度三哥都会在2小时内回答你的问题)。

5)视频课程推荐:

可以去万能的淘宝购买一些视频课程,你输入“大数据视频课程”,会出现很多,多购买几份(100块以内可以搞定),然后选择一个适合自己的。个人认为小象学院的董西成和陈超的课程含金量会比较高。

四、持续学习资源推荐

  1. Apache 官网(http://apache.org/)
  2. Stackoverflow(https://stackoverflow.com/)
  3. Github(https://github.com/)
  4. Cloudra官网(https://www.cloudera.com/)
  5. Databrick官网(https://databricks.com/)
  6. About 云 :(http://www.aboutyun.com/)
  7. CSDN,51CTO (http://www.csdn.net/,http://www.51cto.com/)
  8. 至于书籍当当一搜会有很多,其实内容都差不多。

五、项目案例分析

1)点击流日志项目分析(此处借鉴CSDN博主的文章,由于没有授权,所以就没有贴过来,下面附上链接)—-批处理

http://blog.csdn.net/u014033218/article/details/76847263

2)Spark Streaming在京东的项目实战(京东的实战案例值得好好研究一下,由于没有授权,所以就没有贴过来,下面附上链接)—实时处理 

http://download.csdn.net/download/csdndataid_123/8079233

最后但却很重要一点:每天都会有新的技术出现,要多关注技术动向,持续学习。

以上内容不保证一年以后仍适用。

【GitChat达人课】
前端恶棍 · 大漠穷秋 :《Angular 初学者快速上手教程 》
Python 中文社区联合创始人 · Zoom.Quiet :《GitQ: GitHub 入味儿 》
前端颜值担当 · 余博伦:《如何从零学习 React 技术栈 》
GA 最早期使用者 · GordonChoi:《GA 电商数据分析实践课》
技术总监及合伙人 · 杨彪:《Gradle 从入门到实战》
混元霹雳手 · 江湖前端:《Vue 组件通信全揭秘》
知名互联网公司安卓工程师 · 张拭心:《安卓工程师跳槽面试全指南》
--------------------- 
作者:GitChat技术杂谈 
来源:CSDN 
原文:https://blog.csdn.net/gitchat/article/details/78341484 
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(大数据,java,大数据,学习路线)