java转大数据方向学习路线

article/2025/11/6 0:56:26

申明:

本文旨在为普通程序员(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/networkNETWORKING=yes2.1.1 vi /etc/sysconfig/networkNETWORKING=yesHOSTNAME=ys022.1.2 vi /etc/sysconfig/networkNETWORKING=yes2.1.3 vi /etc/sysconfig/networkNETWORKING=yesHOSTNAME=ys042.2 host文件修改2.2.0 vi /etc/hosts10.1.1.149 ys0110.1.1.148 ys0210.1.1.146 ys0310.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 rsassh-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解压jdkcd /usr/local/ys/soft#解压tar -zxvf jdk-7u80-linux-x64.tar.gz -C /usr/local/ys/app3.1.3将java添加到环境变量中vim /etc/profile#在文件最后添加export JAVA_HOME= /usr/local/ys/app/ jdk-7u80export PATH=$PATH:$JAVA_HOME/bin3.1.4 刷新配置source /etc/profile3.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/zookeeperexport PATH=$PATH:$ZOOKEEPER_HOME/bin3.2.3 重新编译文件:source /etc/profile注意:3台zookeeper都需要修改3.2.4修改配置文件cd zookeeper/confcp zoo_sample.cfg zoo.cfgvi zoo.cfg添加内容:dataDir=/usr/local/ys/app/zookeeper/datadataLogDir=/usr/local/ys/app/zookeeper/logserver.1=ys01:2888:3888 (主机名, 心跳端口、数据端口)server.2=ys02:2888:3888server.3=ys04:2888:38883.2.5 创建文件夹cd /usr/local/ys/app/zookeeper/mkdir -m 755 datamkdir -m 755 log3.2.6 在data文件夹下新建myid文件,myid的文件内容为:cd datavi 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为:33.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 解压jdkcd /usr/local/ys/soft#解压tar -zxvf cenos-7-hadoop-2.6.4.tar.gz -C /usr/local/ys/app3.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 
版权声明:本文为博主原创文章,转载请附上博文链接!


http://chatgpt.dhexx.cn/article/1lAqVnTi.shtml

相关文章

Python定义变量不用声明类型

当在定义变量i时 声明为int类型时,运行程序就会出现语法格式错误,经过上网查询后得知Python不用去声明函数的返回类型,是由于其“若类型”的语言特性决定的。python是一种解释型语言,当你定义了一个变量时,解释器自动完…

python:循环定义多个变量

我们可能会时长碰到这样一个场景,计算得到一个非固定值,需要根据这个值定义相同数量个变量。 实现方式的核心是exec函数,exec函数可以执行我们输入的代码字符串。exec函数的简单例子: >>>exec (print "hello world") he…

Python基础语法——变量

一.Python 语言特点 1.简单易学:与C和Java比,Python的学习难度更低一点,更适合新手入门。 2.简洁明了。Python的语法非常简洁,代码量少,非常容易编写。 3.Python 是解释型语言: 开发过程中没有了编译这个…

Python中的全局变量

在本文章中,我们来讨论一下python中的全局变量,我们将学习如何定义全局变量,然后如何在函数中访问它们,以及如何在函数中修改全局变量的值。 全局变量: python的代码结构一般按照shebang、import模块、全局变量、函数…

Python3:变量的定义

1.简介 学习一门语言从当前的变量定义开始,来源于菜鸟教程:菜鸟教程中变量的定义 2.定义数字类型的变量 # 2.定义数字类型的变量 intNum1 # 整数默认为int floatNum1.1 # 小数都被定义为float complexNum1.1j # 使用j为结尾的变量表示复数 p…

Python 变量,定义变量,变量类型

变量的定义.py: # 1. 定义一个变量记录 QQ 号码。 定义变量必须要有 赋值;没有表示使用变量,会报未定义的错误 qq_number "1234567"# 2. 定义一个变量记录 QQ 密码 qq_password "123"# 如果希望通过解释器的方式,输出变量的内容…

Python定义全局变量的用法

全局变量是编程语言中常见的一种变量,通过全局定义,可以是某对象函数创建,也可以是本程序任何位置创建,能够被本程序中的所有对象或函数进行引用,全局变量的定义有利于程序的变量共享,简化了添加和修改的程序。 和C语言一样,Python也具有全局变量,其定义全局变量的用法…

Python变量的定义和使用

定义:变量就是计算机内存中存储某些数据的位置的名称 形象理解变量就是一个存放东西的容器,该容器的名字就叫做变量,容器存放的东西就是变量的值 变量的组成: 标识:标识对象所储存的内存地址,使用内置函数i…

Python中变量的定义和使用规则

一、如何理解Python中的变量 在解释变量这个东东之前,我先给大家看一组代码,如下图: 上图里面,a作为变量,每次存放的数据和数据类型都不同。看到这里大部分人应该明白了,变量就是随时都可以改变的量&#…

python定义全局变量

、 Python中定义函数时,若想在函数内部对函数外的变量进行操作,就需要在函数内部声明其为global。 例子1 x 1 def func(): x 2 func() print(x) 输出:1 在func函数中并未在x前面加global,所以func函数无法将x赋为2&…

python中变量的定义、命名

变量 1.什么是变量? 变量名只有在第一次出现才是定义变量(变量名再次出现,不是定义变量,而是直接使用之前定义的变量) 2.变量的定义 在 python 中,每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建 等号()用来给变量赋值 左边是一个变量名 右边是存储在变量中…

【Python 08】变量的定义和使用

1. 变量的定义 首先,Python中的定义变量超级方便,直接上代码。 name 玛利亚 print(name) # 定义了一个name的变量 print(标识, id(name)) # 获取name变量的内存地址 print(类型, type(name)) # 获取name变量的数据类型 print(值, name) # 打印输出…

Python定义变量、基本数据类型、print()函数、复杂数据类型

目录 1. 定义变量 2. 基本数据类型 3. 输出函数print() 4. 复杂数据类型 1. 定义变量 变量是一个抽象的概念,是计算机语言中用来储存计算结果或表示值的抽象概念。 python中定义变量是不用定义数据类型,数据类型由值决定。 每个变量在使用之前必须…

十.python中变量的定义

变量:可变的量,区别于常量,常量为固定不可变的量 变量的定义方式:变量名value 例:a1 多个变量的命名格式:变量名1,变量名2value1,value2 例:a,b1,2 删除变量名格式: del 变量…

微信小程序开发提示map未定义

在使用微信小程序开发时,有时会遇到直接用this.state.键进行遍历的时候,提示map未定义 直接使用会报错 解决改提示的方法可以使用解构赋值给bannerlist先定义一个空数组

小程序用到的map集合,造的map集合,通过key获取值value数组。

在做分类功能,由点击侧边栏的商品标题来展示里面的商品的这种功能。---- 由于后端返回的数据,一下子都直接全部返回,我这边就得做判断,点击哪一个侧边商品id的时候,来对应拿到id里面的同一个返回回来的数据。用到了map…

微信小程序实践总结

【1】module.exports、exports、export、import、export default使用与区别 ① module.exports与exports module.exports和exports 是commonJs的语法,大家熟知的node就是基于CommonJs语法设计的,node将每个文件视为一个拥有独立作用域链的模块&#xf…

微信小程序学习

微信小程序学习 1. 小程序与普通网页开发的区别2. 小程序项目的构成3. WXML模板4. WXSS样式5. JS逻辑交互6. 小程序的宿主环境(通信模型、运行机制)7. 组件8. API9.小程序项目的协同工作和发布10. WXML模板语法1. 数据绑定2. 事件绑定3. 条件渲染4. 列表…

微信小程序全栈实战(二):列表循环渲染

文章目录 1.需求概念2.后台开发3.前端开发1.微信页面2.JS3.请求 1.需求概念 我们需要循环的是这数据 2.后台开发 这里为了方便,直接写一起 RestController Api(tags"Project模块") //模块名称 CrossOrigin //开启跨域 public class ProjectController …

微信小程序资料整理

一、初识微信小程序 1、什么是微信小程序 Ⅰ-小程序历史 1. 2017 年度百度百科十大热词之一 2. 微信小程序,简称小程序,英文名 Mini Program,是一种不需要下载安装即可使用的应用 3. 小程序刚发布的时候要求压缩包的体积不能大于 1M,&…