1. flume采集方案如何设置?
  2. flume如何整合kafka?

1 hadoop

1.1 简介

  1. 什么是大数据?
    传统的数据处理技术解决不了的数据量级,
    5v:
  2. 准备大数据的环境
  3. hadoop:分布式存储和分布式计算的框架
    主要包括3个核心组件:
    1)hdfs:分布式存储
    2)mapreduce:分布式计算
    3)yarn:资源调度

1.2 hadoop 的架构

hdfs的架构

namenode:主节点(名称节点),主要用于管理从节点,管理元数据。
datanode:从节点(数据节点),主要用于存储数据
secondarynamenode:辅助名称节点,辅助管理元数据(负责元数据的合并操作)

yarn的架构

资源调度管理器
resourcemanager:主节点,主要用于接收用户提交的作业请求,分配资源。
nodemanager:从节点,用于执行任务。

资源:在yarn的管理中,主要包括cpu和内存

yarn的资源调度器

Mapreduce

分而治之
主要分两个阶段
map阶段:将原来的任务拆分成若干个小人物
reduce(规约)阶段:将map阶段差分的数据进行聚合处理

mr 的编写涉及到的数据的输入和输出去

mape阶段:k1,v1-->k2,v2
reduce阶段:k2,v2-->k3,v3

1.3 关于hadoop 的安装部署

伪分布式部署
1)配置文件的设置
core-site.xml:核心配置文件,主要配置了namenode节点的访问地址
hdfs-site.xml:hdfs的配置文件,主要配置hdfs的相关参数:比如副本数,块大小
mapred-site.xml:mapreduce的配置文件,配置mr的参数,比如mr在yarn的环境运行
yarn-site.xml:yarn的配置文件,配置了resourcemanager的主节点位置和相关参数
slaves:配置从节点信息
2)启动服务的操作:初始化
hdfs namenode -format
启动服务

start-all.sh
#按照组件启动服务
start-dfs.sh
start-yarn.sh

完全分布式部署

  1. HDFS:hadoop distributed file system (hadooop的分布式文件系统)
    来自于google的GFS的论文

1.4 核心架构

  1. 块block :默认128m,按照块大小进行文件的划分和存储
  2. replication:副本数 默认3,按照副本数冗余存储
  3. 主从结构
  4. 名字空间namespace :
    hdfs://hadoop01:8020/test/input/wordcount.txt
  5. 心跳机制:datanode定时(6s)向namenode发送心跳,表示自己还活着
  6. 一次写入,多次读出:数据一旦写入,不能修改,只能追加,主要用于数据的处理

namenode 元数据的管理

1)元数据:描述数据的数据
2)如何使用:默认本地会存储一份,一旦启动服务,会将元数据加载到内存中 。
3)元数据的类型:
fsimage:镜像文件,是全部的元数据
edits:日志文件,默认是一个小时内的元数据
4)2nn负责元数据的合并操作

datanode 对数据的管理

关于hdfs的访问路径是虚拟的,本身是hdfs自身的访问地址。真正的数据是在每一台服务器的节点上

hdfs的读写流程

1)写流程:创建pipleline管道,以串行的方式写入
2)读流程:对于一个文件的多个块,并行的读取

1.5 hdfs的shell操作

hadoop fs -xxxx 或者 hdfs dfs -xxxx
hadoop fs -mkdir -p /test/input
hadoop fs -put 1.txt /test/input
hadoop fs -ge  /test/input/1.txt /localpath
hadoop fs -lsr /
hadoop fs -rmr /
hadoop fs -cp  /  -mv

1.6 hdfs的java api

对于hdfs的文件系统的对象都是通过FileSystem的对象操作来完成的

Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://hadoop01:8020");
FileSystem fs = FileSystem.get(conf);fs.mkdirs(new Path("/test"))
fs.copyFromLocal(new Path(),new Path())
fs.copyToLocal(new Path(),new Path())

2 Hive

2.1 简介

hive是基于hadoop的数据仓库的工具。
通过HIVE QL(Hql) 的方式进行数据分析。
1) 作为数据的存储是存储在HDFS上
2)hql语句最后要转化为mapreduce执行

hive 的特点

1) 可扩展性:数据是存在hdfs上,本质是hadoop的节点拓展
2)延展性:hive可以用自定义函数(UDF)实现拓展的功能
3)容错机制:hql最终是以mr的方式执行, 强调的是MR自身的容错机制

hive 的架构

解析器,编译器,优化器,执行器
元数据库:将元数据放到指定数据库中维护

hadoop 与hive 的关系

紧耦合

2.2 hive 的安装和部署

注意:元数据是如何存储和管理,比如使用mysql数据库管理元数据

构建数据库

create database if not exists myhive location '/myhive';
use myhive;
## 修改数据库 --- 只能修改描述信息
alter database myhive set dbproperties(''='');
desc database myhive;
desc database extended myhive;
##删除
drop database myhive cascade;

2.3 创建表

内部表:

默认创建,当删除表结构的时候,数据会随之删除

create table stu(id int,name string) row format delimited fields terminated by '\t';

外部表:

当删除表结构的时候,数据会保留下来,叫做外部表。

create external table teacher(id int,name string) row format delimited fields terminated by '\t';#加载数据
load data (local) inpath '/opt/data/xxxxxxx' (overwrite) into table teacher;

分区表:

核心思想是分而治之,强调的是分目录结构,保存数据

create external table score(id int,name string) partitioned by (month string,day string) row format delimited fields terminated by '\t';
#加载数据的时候要指定分区
load data (local) inpath '/opt/data/xxxxxxx' (overwrite) into table score partition(month='202203',day='01');#如何查看、添加和删除分区
show partitions score;
alter table score add parition(month='202204') partition(month='202205');alter table score drop parition(month='202204')

分桶表:

强调的是分文件,通常情况下是 要进行数据采样操作。

#指定几个桶,最后就会有几个结果文件
set hive.enforce.bucketing=true;
set mapreduce.job.reduce=3;
create external table course(id int,name string) clustered by(id) into 3 buckets row format delimited fields terminated by '\t';#作为分桶表不能直接加载数据,需要通过普通表间接的方式加载数据(inert overwrite)
#创建普通表
create external table course_common(id int,name string) row format delimited fields terminated by '\t';
#加载数据加载到普通表中
load data (local) inpath '/opt/data/xxxxxxx' (overwrite) into table course_common;
#通过insert overwrite的方式加载数据
insert overwrite table course select * from course_common cluster by(id);

3 Flume

  1. 主要用于日志的收集
  2. flume的架构
    核心角色
    Agent:
    source:数据源,收集数据
    channel:管道,将数据从source收集给sink
    sink:下沉点,实际就是数据保存的地方
    event:是传递数据 的封装,在channel中传递,
    event :event header 头信息
    evern body,其数据就保存在body中
  3. flume 的安装部署
    注意 :需要在flume-env.sh 中配置JAVA_HOME的环境变量即可

flume的采集方案

source:

  1. http source :收集http协议数据

  2. avro:收集avro序列化的数据

  3. spooldir:用于监控文件目录

    a1.sources.r1.type  =  spooldir
    a1.sources.r1.spoolDir = /opt/data/spooldir
    

    注意:如果是spooldir进行监控的时候,
    ​ 1)如果是持续写入的数据文件是无法监控的。
    ​ 2)如果监控的文件中,有同名的文件,会报错并停止服务。

  4. exec:通过执行linux的命令,监控持续写入的文件数据。

    a1.sources.r1.type = exec
    a1.sources.r1.command = tail -F /opt/data/exec/test.log
    

注意:如果持续写入的文件太多,没办法解决。

  1. Taildir:可以监控包括持续写入的文件和一次性文件。
a1.sources.r1.type = TAILDIR
a1.sources.r1.positionFile = /opt/data/taildir/taildir_position.json
a1.sources.r1.filegroups = f1 f2
a1.sources.r1.filegroups.f1 = /opt/data/taildir/a/.*txt.*
a1.sources.r1.filegroups.f2 = /opt/data/taildir/b/test.log
a1.sources.ri.maxBatchCount = 1000

注意:taildir_position.json记录了每一个文件监控到的位置

channel

1)memory:强调的是event是在内存中传递,有可能丢失数据。

a1.channels.c1.type = memory
2)file:强调的是event先落地到本地磁盘,然后在传递给sink,效率会降低,但是会尽量保证数据的不丢失。

a1.channels.c1.type = file

sink

1)logger:以日志的方式输出,一般只会再测试中使用。
a1.sinks.k1.type = logger
2)hdfs:将数据保存到hdfs上

a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/
a1.sinks.k1.hdfs.filePrefix = events-
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = minute
a1.sinks.k1.hdfs.rollInterval = 3
a1.sinks.k1.hdfs.rollSize = 20
a1.sinks.k1.hdfs.rollCount = 5
a1.sinks.k1.hdfs.batchSize = 1
#获取时间
a1.sinks.k1.hdfs.useLocalTimeStamp = true
#生成的文件类型,默认是Sequencefile,可用DataStream,则为普通文本
a1.sinks.k1.hdfs.fileType = DataStream

​ 1)roll:滚动文件

​ rollInterval:时间间隔滚动

​ rollSize:字节大小滚动

​ rollCount:按照条数滚动

​ 2)round:滚动文件目录

​ round:true,开启滚动

​ roundValue:滚动的时间范围

​ roundUnit:滚动的时间单位,minute second hour

3)avro:完成多个节点间的串联

a1.sinks.k1.type = avro
a1.sinks.k1.hostname = hadoop02
a1.sinks.k1.port = 22222
5.agent的串联

强调的是多个agent节点的数据传递,要求前一个节点的sink和传递到下个节点的source的类型是一致的。

4 HBase总结

先访问zookepper

核心知识点

  1. 建立在hdfs基础之上,列式存储,实时读写的nosql数据库
  2. 不支持复杂操作,如join
  3. 数据类型单一:bye[ ]
  4. 用于海量数据的快速检索

hbase架构

zookeeper:分布式协调服务。
hmaster:主节点,主要负责从结点的管理,负责region的分配和管理
hregionserver:从节点,主要负责从节点自身的region管理
hlog:wal,写前日志,用于故障恢复
region:表的部分数据或全部数据
store:一个存储单元,实质就是一个列族的数据
memstore:缓冲区默认128m
storefile:对hfile的上层封装
hfile:最终的落地文件

hbase环境构建

表结构

rowkey:行键,可理解为主键,默认最多存储64K,但一般都控制在10-100byte,数据按照字典顺序排序
rowkey:的设计 ;hash ,撒盐,反转
column family:列族,多个列的集合,
Qualifie:列,可理解为数据库字段
时间戳:记录数据的存储时间
version:版本,技录数据的存储版本
cell:单元格:核心的是,字段和具体的值

shell命令

## 1.
hbase shell
##查看列表信息
list
#创建表
create 'user','data','info'
hbase(main):010:0> create 'user1', {NAME => 'info', VERSIONS => '3'},{NAME => 'data'}#插入数据:只能针对一个列族下的一个列操作
put 'user','rk0001','info:name','zhangsan'
# get数据只能获取一条数据,
get 'user','rk0001'
get 'user','rk0001','info:name'
get 'user', 'rk0001', {FILTER => "ValueFilter(=, 'binary:zhangsan')"}
#scan扫描部分或全部数据
scan 'user'
scan 'user', {COLUMNS => ['info:name', 'data:pic']}
scan 'user', {COLUMNS => ['info', 'data'], FILTER => "(QualifierFilter(=,'substring:a'))"}
# scan 扫描范围数据
scan 'user', {COLUMNS => 'info', STARTROW => 'rk0001', ENDROW => 'rk0003'}# 更新数据# 更新表结构
alter 'user',NAME=>'info',VERSION=>5
#删除数据
delete 'user','rk0001'
delete 'user','rk0001','info:name'
#删除列族
alter 'user','delete'=>'info'
#清空表
truncate 'user'
#删除表
disable 'user'
drop 'user'# 查看表信息
desc 'user'
describe

java api

Kafka

实时快速处理大量数据
Kafka系统快速、可扩展并且可持久化。它的分区特性,可复制和可容错都是其不错的特性。

没有主从,通过zookepper 完成协调

整体架构:

zookeeper :分布式协调服务,协调kafka应用
broker:kafka的节点
producer:生产者生产数据
consumer:消费者
consumer group:消费者组,组内的消费者默认是不能重复消费
topic:主题,是消息的归类
partition:分区
replicas:副本,数据冗余储存
segment:文件段,文件按照1G大小进行拆分,主要包括两个文件,.index索引和.log(如何查找,二分)

环境构建

主要配置server.properties

 #按节点递增,表示唯一的服务器,不能重复
broker.id=0

操作

cd /opt/servers/kafka_2.12-2.2.0
## 创建主题
bin/kafka-topics.sh --create --bootstrap-server hadoop01:9092 --replication-factor 2 --partitions 3 --topic test## 查看主题列表
bin/kafka-topics.sh --list --bootstrap-server hadoop01:9092,hadoop02:9092,hadoop03:9092## 查看主题详情
bin/kafka-topics.sh --describe  --bootstrap-server hadoop01:9092 --topic test## 修改主题 --alter 分区改为5
bin/kafka-topics.sh --alter --bootstrap-server hadoop01:9092 --topic test --partitions 5## 删除 --delete
bin/kafka-topics.sh --delete –bootstrap-server brokerip:port --topic test## 测试生产者生产数据
bin/kafka-console-producer.sh --topic test --broker-list hadoop01:9092 ## 测试消费者消费数据
bin/kafka-console-consumer.sh --topic test --bootstrap-server hadoop01:9092 --from-beginning

kafka java api

生产者

KafkaProducer<String,String> producer = new  KafkaProducer<String,String>(props);
producer.send(new ProducerRecord<String,String>("test","****");

消费者

KafkaConsumer<String,String> consumer = new  KafkaConsumer<String,String>(props);
consumer.subscribe(Arrays.asList("test"))
ConsumerRecords records = consumer.poll(Duration.ofMills(100))
//通过迭代取出数据可以自动提交,也可以手动提交
records.commitSync();#同步
records.commitAsync();#异步

消费者语义

  1. exactly at once:精准消费一次,主要的是要保存好消费的偏移量,比如存储到redis或hbase中
  2. at least once:至少消费一次,重复消费
  3. at most once:至多消费一次,数据丢失

数据的不丢失

  1. broker:通过副本机制,保证数据的不丢失
  2. producer:ack机制
    1)0:不管broker是否保存好数据,都一直发送数据
    2)1:至少leader节点保证存储好数据
    3)-1:leader和follower 都保存好数据,再发送下一条数据
  3. consumer:保存好offset

flume整合kafka

关键点:设置好flume中的sink,到kafka

Scala

  1. scala:是一个面向对象的、函数式编程语言。

  2. scala和java的关系:java和scala是无缝衔接。

最后经过编译都是.class文件,在JVM中运行。

scala的基本语法

常量和变量的定义

val:定义常量

var:定义变量

操作符

val a = 10
val b = a + 10  // b= a.+(10)
var str ="123_456_789"
str.split("_") //str split "_"

scala中的数据类型

scala中有一个顶级父类:Any,分为两大数据类型:AnyVal值类型和 AnyRef 引用类型

AnyVal:Byte Char Short Int Long Boolean Float Double Unit(void)

AnyRef:ScalaClass JavaClass ScalaCollection ,有个共同的子类 Null

AnyVal值类型和 AnyRef 引用类型有一个共同的子类:Nothing

强制类型转换:强调的是值从大的范围向小的范围转型,比如Double -> Int

使用toXXX()进行转换,可能会丢失精度。

4.流程控制

1)if

scala中没有三元运算符,可以使用if进行替代。

2)for

for(i <- 1 to 10;j <= 1 to i )
#守卫模式
for(i <- 1 to 10 if i%2 == 0 )
#推导式
val list = for(i <- 1 to 10 if i%2 == 0 ) yield i

3)while

5.方法

def methodName(name:String):String={name  #最后一行是返回值
}

方法的参数:默认参数、指定参数、可变参数

# * 代表是可变参数
def methodName(num:Int*):Int={num.sum
}

6.函数

val  funcName:(Int,Int)=>Int = (a,b) => {a+b}
val  funcName = (a:Int,b:Int) => {a+b}

6.1匿名函数:没有名称的函数

def process(a:Int,b:Int,f:(Int,Int)=>Int){f(a,b)
}
process(3,4,(a,b)=> a+b)

6.2函数作为参数

6.3函数作为返回值

6.4函数作为参数和返回值

6.5柯里化函数

def methodName(a:Int)(b:String) ={}

7.类和对象

class Student{}

7.1构造器

1)主构造器

val:可以get,但是不能set

var:可以get和set

没有修饰符:既不能get也不能set

class Student(val name:String,var age:Int,gender:String){}

2)辅助构造器

class Student(val name:String,var age:Int,gender:String){def this(){this(name,age,gender) #第一行调用主构造器}
}

3)单例对象:object定义的对象就是单例对象,其中里面的属性和方法都是静态。

4)伴生类和伴生对象:

​ 1)同一个文件中 2)一个class 一个object 3)相同的名称

​ 特点:即便是私有的属性和方法也可以互相调用,除了private[this]

8.继承:extends

特质能实现多继承

9.特质:Trait 和java的接口相似,但是其中的方法也可以有具体的实现。

动态混入特质

val person:Person = new Person with Fly

10.case class:样例类,主要用于封装数据

11.集合:

可变集合:scala.Collection.mutable

ListBuffer ArrayBuffer Set Map

不可变集合:scala.Collection.immutable

List Array Set Map

元祖:可以放至多22个不同数据类型的元素

val tuple = (1,"abc",3.14)
#获取数据
tuple._1   tuple._2

12.集合中的基础函数

1)sum

2)product

3)max/min /maxBy/minBy

4)sorted/sortBy/sortWih

13.高级函数

1)filter:过滤数据

2)map:数据元素的转换

3)flatten:扁平化数据处理

4) flatMap:先map,再flatten

5)groupBy:分组

6)reduce:数据的规约

14.隐式转换

1)隐式值和参数:匹配的是数据类型

implicit val name1:String = "xxx"
def aaa(age:Int)(implicit name:String) ={}
aaa(12)

2)隐式函数

大数据学习相关内容总结相关推荐

  1. 大数据要学习什么知识?大数据学习的内容有哪些?

    大数据作为2019年比较热门的技术,受到越来越多的关注,那么对于一个想进入大数据的朋友来说,最想知道的是:大数据学什么?今天科多大数据就和你们一起来分享一篇关于大数据学习内容体系介绍的文章. 大数据技 ...

  2. 大数据学习——相关资源

    目录 360压缩 centos7 SSH hadoop-2.6.5 jdk1.8 VMware15pro 配置完hadoop的centos7 360压缩 链接:https://pan.baidu.co ...

  3. 大数据学习内容及方法

    随着大数据技术在企业界如火如荼的实践,企业对组建大数据团队的迫切程度也也来越高,对与大数据相关高端人才的需求也越来越紧迫,那么大数据应该学习哪些知识呢 一.Hadoop 可以说,hadoop几乎已经是 ...

  4. 我告诉你2019年,该怎样去系统学习大数据,知识+内容+教程

    大数据作为2019年比较热门的技术,受到越来越多的关注,那么对于一个想进入大数据的朋友来说,最想知道的是:大数据学什么?今天你们一起来分享一篇关于大数据学习内容体系介绍的文章. 大数据技术体系太庞杂了 ...

  5. 大数据-学习实践-1相关Linux

    大数据-学习实践-1相关Linux (大数据系列) 文章目录 大数据-学习实践-1相关Linux 1知识点 2具体内容 2.1安装.使用 2.2高级命令 2.2.1文件 2.2.2日期 2.2.3进程 ...

  6. 大数据学习内容有哪些?大数据学习路线图

    最近不少网友向我咨询如何学习大数据技术?大数据怎么入门?怎么做大数据分析?数据科学需要学习那些技术?大数据的应用前景等等问题.由于大数据技术涉及内容太庞杂,大数据应用领域广泛,而且各领域和方向采用的关 ...

  7. 小白如何学习大数据开发,大数据学习路线是怎样的?

    零基础的同学学习大数据开发不能急于求成,要分阶段分步骤来一步步完成,科多大数据给大家来分享一下大数据的学习路线是什么?小白该怎么学习大数据呢,大概可以分为四步: 大数据学习资料分享群142973723 ...

  8. 大数据学习规划(新手入门)

    前言: 一.背景介绍 二.大数据介绍 正文: 一.大数据相关的工作介绍 二.大数据工程师的技能要求 三.大数据学习规划 四.持续学习资源推荐(书籍,博客,网站) 五.项目案例分析(批处理+实时处理) ...

  9. 大数据学习要知道的十大发展趋势,以及学习大数据的几点建议

    2016年,近40%的公司正在实施和扩展大数据技术应用,另有30%的公司计划在未来12个月内采用大数据技术,62.5%的公司现在至少有一个大数据项目投入生产,只有5.4%的公司没有大数据应用计划,或者 ...

最新文章

  1. java 原子量_Java原子量 - Rickxue的个人空间 - OSCHINA - 中文开源技术交流社区
  2. 解密SSL流量,发现隐藏威胁
  3. 发送请求获取响应内容(c#)
  4. 组态王 6.55 启停plc_永宏PLC在远程控制系统中的应用
  5. 不可重复读和幻读的区别_图解脏写、脏读、不可重复读、幻读
  6. 如何让产品用户拥有一流的上传体验
  7. 机器学习实战——k-邻近算法:约会网站
  8. .net文档生成工具2.0 支持自定义文档生成器【转:http://www.cnblogs.com/lucc/archive/2008/09/05/1284762.html】...
  9. Markdown 数学公式语法
  10. TeamTalk 单服务端配置
  11. Android编程获取图片和视频缩略图的方法(图片压缩)
  12. ArcGIS:矢量、栅格文件裁剪(批量处理)
  13. 华硕路由搭建php网站,华硕路由器操作模式
  14. 文字转语音软件哪个好?快把这些软件收好
  15. 【前端程序员的中秋节】中秋节,送你千盏孔明灯,万家灯火故事长
  16. 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——2.5 如何操作大模型...
  17. 凸优化笔记6(共轭梯度法)
  18. 基于kali的一次无线渗透测试
  19. 关于aPaaS平台的那些事儿
  20. 【计算机视觉】pydensecrf在灰度图上的使用

热门文章

  1. three.js 构建简单的房间
  2. sketchup转stl_求助,如何将skp转换成stl实现3d打印?
  3. ElasticSearch-6.8.11实践笔记
  4. 坚持平凡 创造非凡
  5. 轻松Git与Github入门
  6. PAT1023 组个最小数给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小例如:给定两个0两个1三个5一个8得到的数字就是10015558
  7. flutter 高效计算时间差
  8. 网络的性能指标:带宽和延迟
  9. RE:从零开始的汇编语言_挑好书
  10. 一篇关于不同进制之间的转换、比如二进制、八进制、十进制、十六进制等