Hive是FaceBook开源,基于Hadoop的一个数据仓库工具,可以将结构化的数据映射为一张表,并提供类SQL查询功能。
结构化数据是指没有表名和列名的数据文件,映射为一张表就是给这个数据添加表名和列名,让开发人员后续实现需求时只需使用类似SQL的代码来查询数据。
Hive本质是一个Hadoop客户端,将HQL转化成MapReduce程序。底层都是hadoop实现的,Hive的主要工作有点类似编译器。
Hive架构原理
特点:执行延迟比较高,只支持追加写,不能实现update和delete.
Hive和数据库的比较:
官网地址:hive.apache.org
!quit退出。各个主机不直接连接MySQL数据,先连接metastore数据库,在metastore服务来设置账号密码,增加安全性,降低MySQL服务器的压力。
目前来说,这些服务进程都是前台进程,不是很安全,希望变成后台进程,自己运行。
脚本命令解析:
nohup: 将前台进程输出的内容输入当当前路径的nohup.out文件中,关闭终端进程也继续保持运行状态nohup hive --service hiveserver2 & : 打印pid, 并且变成后台进程> 覆盖写>> 追加写>& 合并2>&1:将报错的日志和正常的日志合并到一起/dev/null 黑洞,执行代码但是不打印输出结果grep -v 参数 :过滤掉结果中带有参数的。grep -i 参数,过滤时忽略大小写awk -F 按照自定义的进行分割- z 参数 : 判断参数是否存在set;命令查看hive --hiveconf 参数值 = 修改值; 修改的值是临时且独立的set mapreduce.job.reduces=10;set 参数名; :查看参数vim hive-env.sh. 打开HADOOP_HEAPSIZE=2048create table tch(
name string, --姓名
friends array<string>, --朋友
students map<string, int>, --学生
address struct<street:string,city:string,email:int> --地址
)
row format delimited fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';
数据库增加操作
数据库查询操作
数据库删除操作
数据库修改操作
create table table_name(属性名, 属性类型...)FIELDS TERMINATED BY char字段分割符号 ^A ctrl+v ctrl+aLOCATION 表对应的hdfs路径TBLPROPERTIES(property_name=property_value,..)表的属性create table if not exists student2 as select id, name from student;create table if not exists student3 like student;外部表删除时只会删除hive中的元数据,不会删除HDFS中的文件。而内部表删除时会将元数据和HDFS中的文件信息一并删除。在公司中大部分都是外部表,内部表一般用于测试和中间表。
如何区分内部表和外部表?
desc formatted table_name 查看表的类型区分内外部表
是否可以将内部表转换为外部表?
alter table tablename set tblproterties('EXTERNAL' = 'TRUE'); 外部表
alter table tablename set tblproterties('EXTERNAL' = 'FALSE'); 内部表
show tables; 查询所有表
desc table; 查询表的粗略信息
desc formatted table; 查询表的详细信息
drop table table_name;
truncate table table_name;清空表中数据,不能清空外部表
alter table old_name rename to new_name;alter table_name change id ids int;load data [local] inpath '数据的path' [overwrite] into table table_name [partition (partcol1=val1,…)];