第一小节:如何学好这一章
1.Hive安装部署
2.Hadoop(MR,HDFS,YARN)
3.官网
第二小节:Hive架构
1.用户接口:Client
CLI(hive shell) JDBC(java访问hive) WEBUI(浏览器访问hive)
2.元数据(Metastore)-数据库
元数据包括:表名称、表所属的数据库、表的拥有者、列/分区字段名、表的类型(外部/内部)、表的数据所在的目录
默认存储在自带的derby的数据库中,推荐使用Mysql来存储元数据
3.hadoop
hive使用HDFS进行数据的存储,使用MR进行数据的计算
4.驱动器:driver
包含:解析器 -> 优化器 -> 编译器 -> 执行器

第三小节:Hive的优点和使用场景
1.简单易用(操作接口采用类SQL语法,提供快速开发的能力)
2.避免我们去写MR,减少开发人员的学习成本
3.统一的元数据管理,可与impala、spark等共享数据
4.易扩展
5.数据的离线处理:比如日志分析,海量结构化数据离线分析
6.Hive的执行延迟比较高,因此Hive常用于数据离线分析,适合实时性要求不高的场景
7.Hive优势在于处理大数据,对于处理小数据没有优势,因为hive的执行延迟性很高。
第四小节:Hive常用的命令
1.show databases; //查看数据库2.create database db_hive; //创建数据库3.drop database db_hive; //删除数据库(数据库内无表)4.use db_hive; //使用数据库5.创建表:CREATE TABLE u_data (userid INT,movieid INT,rating STRING,unixtime STRING)ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','STORED AS TEXTFILE; //textfile文本,以“,”为分隔符6.load data local inpath '/opt/datas/ratings.txt' into table u_data; //加载本地数据到表中7.select * from u_data; //查询表8.select userid from u_data; //字段查询9.select count(1) u_count from u_data; //统计行数,进行mr计算10.desc u_data; //描述表信息11.desc extended u_data; //描述表具体信息(无序)12.desc formatted u_data; //描述具体信息(有序)13.show functions; //查看hive自带所有函数14.desc function upper; //查看upper函数的说明15.desc function extended uppper; //查看upper函数的具体说明16.select userid,upper(username) uppper_name from student; //利用upper函数进行大写转换
第五小节:Hive常用的配置属性
1.Hive数据仓库位置配置:hive-default.xml
<property><name>hive.metastore.warehouse.dir</name><value>/user/hive/warehouse</value> //数仓地址<description>location of default database for the warehouse</description></property>
//赋权命令$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/hive/warehouse$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse
2.Hive运行日志的配置:hive-log4j.properties
hive.log.dir=/opt/modules/hive-1.1.0-cdh5.5.0/logs //日志存放目录hive.log.file=hive.log
3.Hive运行日志的级别:hive-log4j.properties
hive.root.logger=info,DRFA //可改为(DEBUG,DRFA)
4.在cli命令行上显示当前数据库名称,以及查询表的表头信息:hive-site.xml
<property><name>hive.cli.print.header</name><value>true</value> //打开查询表会显示列名</property><property><name>hive.cli.print.current.db</name><value>true</value> //打开客户端会显示所在数据库</property>
5.在启动hive时设置配属属性项信息
bin/hive --hiveconf <property=value>eg:bin/hvie --hiveconf hive.cli.print.header=false //将表头关闭
要注意此种方式的设置,仅仅在当前会话session中有效,退出则失效。
6.查看hive当前所有的配置信息
set;set hive.cli.print.header;set hive.cli.print.header=false; //将表头关闭
修改配置信息优先级:
set -> --hiveconf -> hive-site.xml -> hive-defualt.xml
第六小节:Hive shell常用的操作
bin/hive -help
usage: hive-d,--define <key=value> Variable subsitution to apply to hivecommands. e.g. -d A=B or --define A=B--database <databasename> Specify the database to use-e <quoted-query-string> SQL from command line-f <filename> SQL from files-H,--help Print help information--hiveconf <property=value> Use value for given property--hivevar <key=value> Variable subsitution to apply to hivecommands. e.g. --hivevar A=B-i <filename> Initialization SQL file-S,--silent Silent mode in interactive shell-v,--verbose Verbose mode (echo executed SQL to theconsole)
1. bin/hive -e "select * from db_hive.student"bin/hive -e "select count(1) from db_hive.student"可直接执行查询语句
2.bin/hive -f /opt/jars/stu.sql可直接执行sql文件进行查询交互
3.save resultbin/hive -f stu.sql > /opt/datas/student.txt将查询结果储存到本地
第七小节:Hive中数据库的操作方式
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name[COMMENT database_comment][LOCATION hdfs_path][WITH DBPROPERTIES (property_name=property_value, ...)];
1.create database db_hive;CREATE DATABASE IF NOT EXISTS db_hive --- 标准方式CREATE DATABASE IF NOT EXISTS db_kfk LOCATION '/user/kfk/kfkwarehouse';
2.drop databaseDROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];drop database IF EXISTS db_kfk;--- 标准方式drop database IF EXISTS db_hive cascade; --- 当数据库里有表时可直接删除
3.use databaseUSE database_name;
第八小节:Hive中数据库表的创建方式(三种)
第一种:创建Textfile类型以“,”为分隔符的表
CREATE TABLE IF NOT EXISTS db_name.table_name(col_name data_type )ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','STORED AS TEXTFILE;eg:CREATE TABLE student (userid string,username string)ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','STORED AS TEXTFILE;
第二种:复制已有表或视图的结构
CREATE TABLE IF NOT EXISTS db_name.table_nameLIKE existing_table_or_view_nameeg:CREATE TABLE IF NOT EXISTS db_hive.stuLIKE db_hive.student
第三种:复制已有表的结构和数据
CREATE TABLE IF NOT EXISTS db_name.table_nameAS select * from tableeg:CREATE TABLE IF NOT EXISTS db_hive.stuAS select * from db_hive.student




