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

Hadoop部署

1 原理

https://blog.csdn.net/aohun0743/article/details/101702331

https://cloud.tencent.com/developer/article/1924241?from=article.detail.1336692

本地模式

单机运行,只是用来演示一下官方案例。生产环境不用。

伪分布式模式

也是单机运行,但是具备Hadoop集群的所有功能,一台服务器模拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。

完全分布式模式

多台服务器组成分布式环境。生产环境使用。

搭建:

https://blog.csdn.net/a1786742005/article/details/104104983

高可用完全分布式模式

HA高可用是Hadoop2.x才开始引入的机制,是为了解决Hadoop的单点故障问题。主要有两种部署方式,一种是NFS(Network File System)方式,另外一种是QJM(Quorum Journal Manager)方式。用得较多的是QJM方式,稳定性更好。实际操作中,生产环境的Hadoop集群搭建一般都会做HA部署。

2 使用

配置客户端访问集群

3 问题


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