Hive_01
SQL on hadoop
hive sparksql presto impala
用途:
1.sql
2.udf
hadoop :
hdfs :命令行、api
mapreduce :编程(工作中 几乎不用 但是 核心类 和 思想 必须掌握)
yarn : 提交作业 xxx(mr/spark/flink) on yarn
yarn的执行流程一定要会的
mapreduce弊端:
1.开发大量代码【编程基础】
2.业务变更 code 修改起来非常非常麻烦
3.对于传统 DBA RDBMS 小伙伴来说 是不友好的
大数据处理来说:最终落地最好是SQL
大数据开发角度:
1.做基础平台:涉及的底层的面是非常广的
2.应用层面开发:基于基础平台 写sql 【sql boy/girl】
如何选择?
1.兴趣点 + 公司的定位
必然是有一个新的东西诞生 去解决某一类场景的问题
MR使用于: 批计算、离线计算
由于mr开发太麻烦=》 诞生Hive
Hive 介绍:
1.hive.apache.org
2.由谁提出来的?
Facebook 开源=》去解决海量结构化数据的数据统计问题
3.是什么?
构建在hadoop之上的数据仓库
hdfs: hive的数据是存储在hdfs之上的
yarn:hive的作业是可以跑在yarn之上的
mapreduce:hive的作业可以以MR的方式去运行
4.如何使用?
1.定义了一种类似sql的语言 =》 类似sql 又不完全相同
2.适用于离线/批处理
3.开发就是sql =》 mr作业=》yarn上去运行
Hive底层引擎:
MR : sql => MR 默认
Tez: SQL => Tez
Spark: SQL => Spark
sparksql 去处理hive里面的数据
hive on spark =》 hive的引擎是spark 生产上用的不多
spark on hive =》 sparksql 查询hive的里面表
4.hive 存储数据 也支持 压缩、存储格式
官网:
in distributed storage: HDFS 、cos、oss、aws
A command line tool and JDBC driver are provided to connect users to Hive
版本介绍:
1.x.y.z
x 大版本
y 小版本
z 小版本的bug fix
1.为什么要学习hive?
1.简单易用
2.扩展性好 :
1.sql 功能角度:udf
2.数据存储 和 计算角度 :hadoop进行扩展
注意:hive仅仅就是个客户端而已
3.Metastore 【Hive的元数据管理】
sparksql presto impala 只要能够访问hive Metastore 就可以访问 Hive里面表的数据
【可以共享Metastore】
2.hive 的架构 rdbms
1.元数据:描述数据的数据 schema
表的名字、字段的名字、字段的类型、谁创建的、数据存储在哪 。。。
3.常见问题
hive vs RDBMS mysql
1.共同点:sql
2.延时性:hive适用于 离线计算 慢 千万不要拿hive和mysql的执行性能对比
3.事务:都支持
4. update delete hive里面 不用 性能太差
5.分布式 都支持
6.成本:廉价 vs 成本高
7.数据体量: 量大 vs TB pb数据
4.hive部署
1.解压
[hadoop@bigdata32 software]$ tar -zxvf ./apache-hive-3.1.2-bin.tar.gz -C ~/app/
2.配置环境变量
[hadoop@bigdata32 bin]$ vim ~/.bashrc
#HIVE_HOME
export HIVE_HOME=/home/hadoop/app/hive
export PATH=
P
A
T
H
:
{PATH}:
PATH:{HIVE_HOME}/bin
2.整合hadoop
1.java.lang.RuntimeException: Unable to instantiate 【报错】
要求 hive 要进行初始化 =》 hive元数据
测试:
使用derby进行初始化 【别做了 】
schematool -dbType derby -initSchema
derby作为我们的元数据库的弊端:
derby 仅支持单session
3.配置 hive 元数据库 【hive 整合MySQL】
MySQL
1.hive-site.xml
javax.jdo.option.ConnectionURL
jdbc:mysql://bigdata31:3306/hive?createDatabaseIfNotExist=true
1.入门
1.mysql> select * from VERSION;
±-------±---------------±---------------------------+
| VER_ID | SCHEMA_VERSION | VERSION_COMMENT |
±-------±---------------±---------------------------+
| 1 | 3.1.0 | Hive release version 3.1.0 |
±-------±---------------±---------------------------+
2.创建一张表
create table test(name string);
insert into test values (‘zihang’);
思考: 表中的数据存在哪里?
hive 数据有两种:
1.元数据 =》 MySQL
TBLS 存的是Hive里面表的信息
DBS 存的是Hive 数据库相关的信息
COLUMNS_V2 存的是Hive table里面的字段信息
DATABASE_PARAMS 存的是Hive 数据库相关的信息
2.table 数据 =》 存在hdfs
hdfs://bigdata32:9000/user/hive/warehouse
思考: 表中的字段 存在哪里?
一个hive表 会被拆分成N个表在mysql里面进行存储
思考:
hive 运行的日志在什么地方? /tmp/hadoop/hive.log
2.配置Hive参数
1.Command Line Interface 【命令行显示相关参数】
hive.cli.print.header
hive.cli.print.current.db
hive.metastore.warehouse.dir 【了解 default数据库默认存储位置】
2.如何查看参数默认值?
set key; 查看参数默认值
set key=value; 设置参数的值
3.参数配置优先级:
1.session 设置参数 【仅仅是当前session有效】
2.hive-site.xml 【全局生效的】
hive.cli.print.header true hive.cli.print.current.db true 3.hive --hiveconf hive.cli.print.current.db=false; => 【当前session有效】
hive -help :
-e sql 语句
-f sql文件
hive -e “select * from test”
hive -f xx.sql
数仓:
需求任务 每天定时调度的
10:00 触发一次任务
shell: hive -e "select * from test"
调度平台:crontab 、azkanban、xxl、
DDL:Data Definition Language
Database:
1.hive 默认有一个数据库 default 路径:/user/hive/warehouse
1.创建数据库
CREATE [REMOTE] (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[MANAGEDLOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, …)];
[] 可有可无
(|) 选择其中一个即可
create database bigdata_hive;
思考: 这个数据库在hdfs什么地方?
database 在hdfs上的路径:
默认数据库路径:/user/hive/warehouse
非默认数据库路径:/user/hive/warehouse/dbname.db
create database if not exists bigdata_hive;
create database bigdata_hive2 LOCATION ‘/data/bigdata_hive2’;
create database bigdata_hive3 WITH DBPROPERTIES (‘creator’=‘doublehappy’, ‘create_dt’=“2099-11-29”);
create database if not exists bigdata_hive4 COMMENT “这是一个数据库4”;
2.查看数据库
show databases;
show databases like “bigdata_hive*”
desc database bigdata_hive3;
desc database EXTENDED bigdata_hive3;
补充:解决注释中文乱码问题:(无作用)
登陆Mysql数据库切换到Hive库:
use hive
修改以下两张表即可;
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;