Azkaban

https://blog.csdn.net/wtzhm/article/details/89220508

1 为什么需要工作流调度系统

1)一个完整的数据分析系统通常都是由大量任务单元组成:Shell脚本程序,Java程序,MapReduce程序、Hive脚本等

2)各任务单元之间存在时间先后及前后依赖关系

3)为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行

2 常见工作流调度系统

1)简单的任务调度

直接使用Linux的Crontab来定义;

2)复杂的任务调度

开发调度平台或使用现成的开源调度系统,比如Ooize、Azkaban、 Airflow、DolphinScheduler等。

3)Azkaban

Azkaban is a batch workflow job scheduler created at LinkedIn to run Hadoop jobs. Azkaban resolves the ordering through job dependencies and provides an easy to use web user interface to maintain and track your workflows.

Azkaban是一个开源的任务调度系统,用于负责任务的调度运行(如数据仓库调度),用以替代linux中的crontab。

和Oozie对比

总体来说,Ooize相比Azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不在意某些功能的缺失,轻量级调度器Azkaban是很不错的候选对象。

3 使用

1 使用流程

1.数据准备

2.编写Azkaban工作流程配置文件

​ a.编写azkaban.project

​ b.编写gmall.flow文件

2 多Executor模式下注意事项

方案一:指定特定的Executor(hadoop102)去执行任务。

​ a.在MySQL中azkaban数据库executors表中,查询hadoop102上的Executor的id。

​ b.在执行工作流程时加入useExecutor属性

方案二:在Executor所在所有节点部署任务所需脚本和应用。

推荐使用方案二

Spark on Hive & Hive on Spark

https://cloud.tencent.com/developer/article/1624245

https://blog.csdn.net/weixin_41290471/article/details/106203419

https://www.cnblogs.com/qingyunzong/p/8992664.html

https://www.cnblogs.com/liugp/p/16209394.html#1spark-on-hive

1 Hive on Spark

Hive既作为存储又负责sql的解析优化,Spark负责执行

2 Spark on Hive

Hive只作为存储角色,Spark负责sql解析优化,执行

hive on spark大体与spark on hive结构类似,只是SQL引擎不同

hive

常见问题

1.FAILED: SemanticException Failed to get a spark session: org.apache.hadoop.hive.ql.metadata.HiveException: Failed to create Spark client for Spark session

https://blog.csdn.net/qq_41504585/article/details/108064512

启动metastore

https://blog.csdn.net/u010670689/article/details/41576647

hive —service metastore 2>&1 >> /var/log.log &

启动hiveserver2

hiveserver2

连接方式

https://blog.csdn.net/qq_41851454/article/details/79833306

https://www.shuzhiduo.com/A/RnJW4Z2r5q/

1.cli

hive

2.beeline

https://www.jianshu.com/p/97bbe79d88d2

sqoop

https://www.yangshuaibin.com/detail/388673

作用

关系型数据库 <<——>> hdfs ,双向,用的mapreduce

sqoop的作用就是将关系型数据库中的某张表数据抽取到Hadoop的hdfs文件系统当中,底层运用的还是Map Reduce 。 它利用MapReduce加快数据传输速度,批处理方式进行数据传输。 也可以将HDFS上的文件数据导出到关系型数据库中的某张表。

脚本

https://blog.csdn.net/qq_44665283/article/details/120709047

各种表

1 分区表

https://www.jianshu.com/p/1cdd3e3c5b3c

https://www.jianshu.com/p/163f8375c0d6

1 mysql分区

RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。

LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。

HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。

KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL 服务器提供其自身的哈希函数。必须有一列或多列包含整数值。

2 Hive中分区表

分两类:静态分区、动态分区;

Hive中没有复杂的分区类型(List,Range,Hash)

2 内部表&外部表

https://www.cnblogs.com/qiaoyihang/p/6225151.html

https://blog.csdn.net/qq_36743482/article/details/78393678

1 未被external修饰的是内部表(managed table),被external修饰的为外部表(external table);

2 内部表数据由Hive自身管理,外部表数据由HDFS管理;

3 内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定(如果没有LOCATION,Hive将在HDFS上的/user/hive/warehouse文件夹下以外部表的表名创建一个文件夹,并将属于这个表的数据存放在这里);
4 删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
5 对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

3 临时表

https://www.cnblogs.com/duanxz/p/3724120.html

4 字典表

https://www.cnblogs.com/jpfss/p/10418873.html

5 全量表,增量表、快照表、流水表

全量表:所有数据的最新状态

增量表:新增数据

快照表:

流水表: 对于表的每一个修改都会记录,可以用于反映实际记录的变更。

6 切片表

切片表:切片表根据基础表,往往只反映某一个维度的相应数据。其表结构与基础表结构相同,但数据往往只有某一维度,或者某一个事实条件的数据

7 拉链表

1 定义

2 应用场景

3 分区

4 数据加载

1)首日装载

拉链表首日装载,需要进行初始化操作,具体工作为将截止到初始化当日的全部历史用户导入一次性导入到拉链表中。目前的ods_user_info 表的第一个分区,即2020-06-14 分区中就是全部的历史用户,故将该分区数据进行一定处理后导入拉链表的9999-99-99 分区即可。

2)每日装载

flume

1.作用

日志采集

Flume是流式日志采集工具,FLume提供对数据进行简单处理并且写到各种数据接收方(可定制)的能力,Flume提供从本地文件(spooling directory source)、实时日志(taildir、exec)、REST消息、Thift、Avro、Syslog、Kafka等数据源上收集数据的能力。

2.Flume架构

https://jiandansuifeng.blog.csdn.net/article/details/118926483

https://www.jianshu.com/p/9a5c682b0551

三大核心组件:

  • Source:数据源
  • Channel:临时存储数据的管道
  • Sink: 目的地

3.拦截器(interceptor)

https://blog.51cto.com/u_15241496/2869403

拦截器是简单的插件式组件,设置在source和channel之间。source接收到的事件event,在写入channel之前,拦截器都可以进行转换或者删除这些事件。每个拦截器只处理同一个source接收到的事件。可以自定义拦截器。

1 jar包

2 将打包的jar放到XXX/flume/lib

3 配置文件

/opt/module/flume/conf

vim file-flume-kafka.conf

1
2
3
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type =
com.atguigu.flume.interceptor.ETLInterceptor$Builder

4.为什么要集成Flume和Kafka

https://blog.csdn.net/qq_37466640/article/details/103425555

5.例子

4.1 采集日志

1)Source

(1)Taildir Source相比Exec Source、Spooling Directory Source的优势

TailDir Source:断点续传、多目录。Flume1.6以前需要自己自定义Source记录每次读取文件位置,实现断点续传。不会丢数据,但是有可能会导致数据重复。

Exec Source可以实时搜集数据,但是在Flume不运行或者Shell命令出错的情况下,数据将会丢失。

Spooling Directory Source监控目录,支持断点续传。

(2)batchSize大小如何设置?

答:Event 1K左右时,500-1000合适(默认为100)

2)Channel

采用Kafka Channel,省去了Sink,提高了效率。KafkaChannel数据存储在Kafka里面,所以数据是存储在磁盘中。

注意在Flume1.7以前,Kafka Channel很少有人使用,因为发现parseAsFlumeEvent这个配置起不了作用。也就是无论parseAsFlumeEvent配置为true还是false,都会转为Flume Event。这样的话,造成的结果是,会始终都把Flume的headers中的信息混合着内容一起写入Kafka的消息中,这显然不是我所需要的,我只是需要把内容写入即可。

3)Sink

省去了Sink,提高了效率

4)Interceptor

ETLInterceptor

4.2 消费数据

1)Source

2)Channel

MemoryChannel传输数据速度更快,但因为数据保存在JVM的堆内存中,Agent进程挂掉会导致数据丢失,适用于对数据质量要求不高的需求。FileChannel传输速度相对于Memory慢,但数据安全保障高,Agent进程挂掉也可以从失败中恢复数据。

金融类公司、对钱要求非常准确的公司通常会选择FileChannel

传输的是普通日志信息(京东内部一天丢100万-200万条,这是非常正常的),通常选择MemoryChannel。

3)Sink

HDFS Sink

4)Interceptor

TimeStampInterceptor

flume时间拦截器

获取日志中的实际时间

ZooKeeper

是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

简单操作

1 查看状态

bin/zkServer.sh status

有leader follower

shell脚本编写:start,stop,status

问题

1 某个节点起不来

https://blog.csdn.net/qq_48268603/article/details/117687875

https://blog.csdn.net/u012453843/article/details/70878117

参考

https://geek-docs.com/zookeeper/zookeeper-tutorial/zookeeper-profile.html#

hadoop调优

1 集群数据均衡

1 节点间数据均衡

(1)开启数据均衡命令

start-balancer.sh -threshold 10

(2)停止数据均衡命令

stop-balancer.sh

2 磁盘间数据均衡

(1)生成均衡计划(我们只有一块磁盘,不会生成计划)

hdfs diskbalancer -plan hadoop103

(2)执行均衡计划

hdfs diskbalancer -execute hadoop103.plan.json

(3)查看当前均衡任务的执行情况

hdfs diskbalancer -query hadoop103

(4)取消均衡任务

hdfs diskbalancer -cancel hadoop103.plan.json

2 数据压缩

https://cloud.tencent.com/developer/article/1417401

1 LZO压缩

LZO压缩文件的可切片特性依赖于其索引,故我们需要手动为LZO压缩文件创建索引。若无索引,则LZO文件的切片只有一个。

1
[atguigu@hadoop102 bin]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /warehouse/gmall/ods/ods_log/dt=2020-06-14

3 Hadoop参数调优

https://developer.aliyun.com/article/566013

1)HDFS参数调优

2)YARN参数调优

hadoop架构

1 总览

https://blog.csdn.net/wangxudongx/article/details/104079998

2 hdfs

3 yarn

4 MapReduce

5 RPC

Remote Procdure Call,中文名:远程过程调用

它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网络通信细节

Hadoop的进程间交互都是通过RPC来进行的,比如Namenode与Datanode

https://www.cnblogs.com/SmallBird-Nest/p/11430330.html


:D 一言句子获取中...