【Hive_01】

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

javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver javax.jdo.option.ConnectionUserName root javax.jdo.option.ConnectionPassword 123456 2.把mysql驱动包 放置 hive lib下面 3.初始化元数据库 schematool -dbType mysql -initSchema 4.Hive 默认是有一个数据库存在的 :default

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值