hive架构总结
1.用户的接口:Client
CLI(hive shell)
JDBC/ODBC(java访问hive)
WEBUI(浏览器访问hive)
工作中一般在linux中beeline或者spark-beeline打开运行sql或者DBVisualizer连接
2.元数据:Metastore
元数据包括:表的名字,表创建对应的数据库,表的结构,表的类型(外部表内部表)
3.hadoop
使用HDFS存储,使用MapReduce计算,现在一般用hive on spark(快太多了),但是需要优化语句,spark容易卡主跑不动
4.驱动器:Driver
解析器(SQL Parser)检查sql的语法,语义
编译器(Physical Plan)编译成逻辑执行计划
优化器(Query Optimizer)对逻辑执行计划进行优化
执行器(Execution)把逻辑执行计划转换成hive/spark
hive的一些命令
1.在外部运行sql命令
hive -e "show databases"
2.用sql脚本运行sql
hive -f + sql脚本
3.退出hive窗口
hive>exit;
4.查看hdfs文件系统
hive> dfs -ls /;
5.查看本地文件系统
hive> ! ls /root;
建表语句
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
测试建表语句1
drop table if exists basic.b_test;
create table basic.b_test(
name string comment'名称'
,id_no varchar(18) comment'证件号'
,query_start string comment'查询开始时间'
,query_end string comment'查询结束时间'
)
comment'测试表'
row format delimited fields terminated by '\017'
stored as textfile
;
测试建表语句2—压缩格式
drop table if exists basic2.b_test;
create table basic2.b_test(
name string comment'名称'
,id_no varchar(18) comment'证件号'
,query_start string comment'查询开始时间'
,query_end string comment'查询结束时间'
)
comment'测试表2'
partitioned by (dt varchar(8))
stored as parquet
tblproperties("parquet.compression"="GZIP")
;
向表中导入数据
hive> load data [local] inpath '/opt/module/datas/student.txt' overwrite | into table student [partition (partcol1=val1,…)];
(1)load data:表示加载数据
(2)local:表示从本地加载数据到hive表;否则从HDFS加载数据到hive表
(3)inpath:表示加载数据的路径
(4)overwrite:表示覆盖表中已有数据,否则表示追加
(5)into table:表示加载到哪张表
(6)student:表示具体的表
(7)partition:表示上传到指定分区
加载本地文件到hive
hive > load data local inpath '/opt/datas/output/b_test.txt' into table basic.b_test;
将表中数据导出]
hive > insert overwrite local directory '/opt/datas/output/b_test.txt' select * from basic.b_test;
清除表的数据
truncate table basic.b_test;--只能清除管理表(内部表)的数据