离线数据处理
Java和MySQL
Linux
Linux操作目录
Linux树状结构操作目录
/根目录
/bin、/sbin、/usr、/root、/home、/cd、/tmp、/etc、/proc、/boot、/dev、/sys、/var、/mnt、/opt、/src
Linux常用命令
ls、cd、pwd、mkdir、touch、echo、cp、mv、vi、In、cat、more、head、tail、find、grep、which、whereis、df、du、free、tar、gzip、bzip2、zip、date、shutdown、powoff、reboot、ping、ip addr、netstat、ps、pstree、top、kill、nohup、uptime、su、sudo、useradd、password、userdel、groupadd、chmod、chown、yum、rpm
定时器crontab
Linux中进行定时任务
配置
年 year、月 month、日 day、小时 hour、分钟 minute
*
代表所有、数字代表具体、-
数字与数字之间的范围、/
数字与数字之间做跳跃范围
shell编程
#!/bin/bash
bash或sh运行shell脚本
定义变量、位置参数变量、环境变量、系统变量、预定义变量
运算符(expr)、${变量}、字符串、数组、if语句、循环语句、函数
Linux版本
CentOS主要版本
Hadoop
大数据的概念
海量数据、具有高增长率、数据类型多样化
大数据的4V特征
- 数据量庞大
- 数据多样性
- 数据增长快
- 数据价值低密度
大数据的日常应用
美团单车保修、饿了么杀熟、嘀嘀打车杀熟、电商推荐、对用户日常画像
企业大数据的处理流程
数据源、数据采集与同步、数据存储、数据清洗、数据分析、数据展示
大数据框架Hadoop
Hadoop是大数据常用框架提供数据统一存储与计算
Hadoop框架安装{本地模式(测试)、伪分布式(测试)、完全分布式(实际开发)}
HDFS分布式文件系统
分布式文件系统中的组件
- NameNode 主进程
- SecondaryNameNode 备份进程
- DataNode数据存储
分布式文件系统shell命令
hdfs dfs 主执行命令
mkdir、put、get、ls、cat、rm、cp、mv、chmod
分布式文件系统存储操作
块概念
HDFS中存储数据时,默认存储数据块大小是128M
块存储是分散存储,尽量每个节点都保留数据块(块的备份默认是三个)
向HDFS中提交和获取数据 读写流程
NameNode和DataNode之间使用心跳机制进行管理
NameNode和SecondaryNameNode之间使用的是检查点 fsimage和edits_log
分布式文件系统API操作
利用IDEA编译进行HDFSAPI进行开发
Zookeeper分布式协调框架
Zookeeper
分布式协调资源框架,解决分布式系统一致性问题
基于Linux系统中目录树结构的数据存储结构
Zookeeper特点
- 分布还是集群 leader、follower
- 全局数据一致性,同一时刻提供一个ServerClient进行服务
- 数据的实时性、数据原子性、更新请求顺序进行
- 搭建zookeeper的时候有一个重要的操作:myid
Zookeeper的shell
zkCli.sh启动客户端命令
ls /、create、get、set、delete、quit
利用IDEA进行zookeeperAPI操作
Zookeeper选举机制
leader、follower、observer
进行投票选举 myid权重占比,zxid事务id、Epoch逻辑时间 原则epoch>zxid>myid
选举的时机 第一次启动Zookeeper或leader挂了
避免脑裂 zookeeper的个数是奇数个
HA高可用(生产环境)
利用Zookeeper进行高可用HDFS点的搭建提供主NameNode和从NameNode,去掉SecondaryNameNode
DataNode不变依旧存储数据
ActiveNameNode和StandbyNameNode作为集群管理
JournalNode作为NameNode通信数据机制提供一个ZKFC角色来管理NameNode之间切换,ZKFC依赖于Zookeeper作为切换依据
YARN资源任务调度框架
Yarn的产生
在搭建Hadoop集群时不仅提供HDFS分布式文件系统,也提供离线式计算引擎MR
在计算数据的时候数据分布在不同的节点上
在计算时移动数据OR计算时移动计算 考虑各个方面性能优势的前提下,产生了一个概念 移动数据不如移动计算
Hadoop毕竟是一个综合框架,所以在这个基础上就专门提供了一个调用任务计算的资源框架Yarn
Yarn1.0版本
Client作为提交者
JobTracker 初始作业,分配作业,与TaskTracker进行通信协调整个作业的调度
TaskTracker保持与JobTracker进行通信,在分配的数据片段上执行MR任务
Yarn2.0版本
Client提交作业
ResourceManager提供整个任务资源调度分配 内置Scheduler
NodeManager 每个节点的资源管理器,负责启动和监视Container资源使用情况,并向ResourceManager进行资源的报告
- Container 即使用集群上资源(CPU、网路、内存、磁盘)
- ApplicationMaster(AM)每个应用程序启动的一个角色,他的任务就是负责与ResourceManager进行沟通,并监视NodeManager
Yarn的作业提交流程
作业提交命令 Hadoop jar 使用Yarn就是使用Yarn jar
Yarn的三种调度
- FIFO调度器
- 容量调度器
- 公平调度器
MapReduce分布式离线计算引擎
MapReduce的出现
海量数据的计算操作,其中主要核心概念就是映射(Map)和规约(Reduce)
基于谷歌中一篇论文的计算引擎
MapReduce的编程逻辑
- Map端进行数据的初级处理
- Reduce端进行数据聚合操作
- MR的核心语义“相同Key为一组进行一次Reduce计算”
MapReduce序列化
Writeable接口
自定义序列化使用Java模式
保证数据可以在MR中进行有效传输
MapReduce的Shuffle流程
MR
Combiner函数、合并小文件、可以自定义分区、自定义输出效果
Scala语言
为了后续学习Spark和Flink编程的语言,Scala语言与Java语言类似
变量的定义
-
var-可变变量
-
val-不可变变量
数据类型
- AnyVal——所认知的基本数据类型(Int、Short、Long、Byte、Char、Double、Float、Boolean、Unit)
- AnyRef——Null、类、特质
- 数据类型之间允许进行转换操作
- 基本数据类型可以使用 toXXX
- 引用类型 asInstance[数据类型]
操作符号
-
算数运算符
-
关系运算符
-
逻辑运算符
-
赋值运算符
-
Scala中是没有三目运算符的 ? :
表达式
Scala中只要是使用{}括起来都可以认为是块表达式,具备返回值的效果
标准的表达式 变量、常量和运算符组成
if分支语句和循环分支语句 都可以得到返回值但是多用于if分支语句
Scala中式没有Switch…case
函数(核心)
函数是Scala中一等公民基本使用函数都可以解决大部分问题
Scala中本质上是区分函数和方法,因为方法的定义使用def 而函数会用val或匿名函数
方法的定义:def方法的名字(参数列表):返回值类型={方法体}
函数的定义
- val变量(函数名)=(函数参数列表)=>{函数体}
- val函数名字:(函数参数类型)=>返回值类型={(参数列表)=>函数体实现}
- 函数遵守的原则就是至简原则
集合
可变集合
如果要使用可变集合需要导入Scala.collection.mutable——每个不可变都对应一个可变的
不可变集合
Array、Tuple、Map、List、Set
需要记忆集合中操作方法
map、flatmap、foreach、filter、partition、find、takeWhile、dropWhile、contains、sortwith、sortBy、sorted、size、length、take、sum、reduce、fold
高阶函数
函数可以作为方法参数类型
可以使用匿名函数方式进行方法参数传递
也可以将方法作为方法参数进行传递(默认转换为函数)
函数也可以作为方法的返回值存在
闭包 和 柯里化
类与对象
Scala中的对象与类的概念支持继承(单继承)
单例对象即Object修饰的类并且衍生出了伴生类和伴生对象并提供apply 和 unapply 方法
Scala中没有实现的概念只有继承概念 所以无论是类还是特质都是使用extends进行操作的多特质使用with
Scala中独有的类 case class样例类主要作用就是用于传递消息(即类名就是消息)和进行数据封装传递(提供主构造器进行数据封装进行传递)
模式匹配match…case
- 值匹配
- 变量匹配
- 常量匹配
- 类型匹配
- 集合匹配
- 样例类匹配
隐式转换
Scala中类是默认存在隐式转换操作{创建Scala类是默认导入java.long、scala、Predef}
隐式类、隐式转换函数、隐式参数
隐式转换是从当前类中进行查找、再查找包、再查找ScalaAPI如果都没有就要报错,否则进行转换操作
泛型
上界[B<:A] B类型的上界是A类型
下界[B>:A] B类型的下界是A类型
视界[B<%A] 表示B类型要转换为A类型是一个隐式转换
上下文界[B:A] 提供一个隐式转换可以将B引用到A中
逆变 [-A]、协变 [+B]、不变 [A]
Scala中的通信模式
Scala2.11Actor通信模型
Scala2.12Akka通信模型
无论是哪个通信模式使用的都是 邮箱通信操作模型,主要提供目的就是为了让各位了解它内部通信机制