数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成 的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant )的数据集合,用于支持管理决策。
Hive:由 Facebok 开源用于解决海量结构化日志的数据统计。 Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类 SQL 查询功能。 本质是:将 HQL 转化成 MapReduce 程序 1)Hive 处理的数据存储在 HDFS 2)Hive 分析数据底层的实现是 MapReduce 3)执行程序运行在 Yarn 上
1.21 优点
操作接口采用类 SQL 语法,提供快速开发的能力(简单、容易上手)。避免了去写 MapReduce,减少开发人员的学习成本。Hive 的执行延迟比较高,因此 Hive 常用于数据分析,对实时性要求不高的场合。Hive 优势在于处理大数据,对于处理小数据没有优势,因为 Hive 的执行延迟比较高。Hive 支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。1.2.2缺点
1.Hive 的 HQL 表达能力有限 (1)迭代式算法无法表达 (2)数据挖掘方面不擅长
2.Hive 的效率比较低 (1)Hive 自动生成的 MapReduce 作业,通常情况下不够智能化 (2)Hive 调优比较困难,粒度较粗
由于数据的访问延迟较高,决定了 Hive 不适合在线数据查询 特点:Hive处理的数据规模更大,所以延迟性高,且存储在hdfs上
ubuntu 16.04 hadoop 2.2.1 hive 2.1.0(可通过JPS命令,找到RunJar对应的id,执行lsof -g 17860 | grep hive-service查到) mysql 5.7
cd /usr/local/hadoop (1)必须启动 hdfs 和 yarn [atguigu@hadop102 hadop-2.72]$ sbin/start-dfs.sh [atguigu@hadop103 hadop-2.72]$ sbin/start-yarn.sh (2)在 HDFS 上创建/tmp 和/usr/local/hive/warehouse 两个目录并修改他们的同组权限可写 [atguigu@hadop102 hadop-2.72]$ bin/hadop fs -mkdir /tmp [atguigu@hadop102 hadop-2.72]$ bin/hadop fs -mkdir -p /usr/local/hive/warehouse [atguigu@hadop102 hadop-2.72]$ bin/hadop fs -chmod g+w /tmp [atguigu@hadop102 hadop-2.72]$ bin/hadop fs -chmod g+w /user/hive/warehouse 或者在配置文件中关闭权限检查 在 hadop 的 hdfs-site.xml 中 dfs.permisions.enable false 3.Hive 基本操作 (1)启动 hive [atguigu@hadop102 hive]$ bin/hive (2)查看数据库 hive> show datbase; (3)打开默认数据库 hive> use default; (4)显示 default 数据库中的表 hive> show tables; (5)创建一张表 hive> create table student(id int, name string); (6)显示数据库中有几张表 hive> show tables; (7)查看表的结构 hive> desc student; (8)向表中插入数据 hive> insert into student values(10,“s”); (9)查询表中数据 hive> selct * from student; (10)退出 hive hive> quit;
需求 将本地/opt/module/datas/tudent.txt 这个目录下的数据导入到 hive 的 student(idnt,ame string)表中。 1.数据准备 在/opt/module/dats 这个目录下准备数据 (1)在/opt/module/目录下创建 datss mkdir datas (2)在/opt/module/datss/目录下创建 student.x 文件并添加数据
touch student.txt vi student.xt101 zhangshan 102 lishi 103 zhaoliu
注意以 tab 键间隔。 2.Hive 实际操作 (1)启动 hive
hive>bin/hive(2)显示数据库
hive> show datbase;(3)使用 default 数据库
hive> use default;(4)显示 default 数据库中的表
hive> show tables;(5)删除已创建的 student 表
hive> drop table student;(6)创建 student 表, 并声明文件分隔符’\t hive> create table student(id int, name string) ROW FORMAT DELIMTED FIELDS TERMINATED BY ‘\t’; (7)加载/opt/module/dats/tudent.txt 文件到 student 数据库表中。 双引号也可以
hive> load data local inpath '/usr/local/datas/student.txt' into table student;(8)Hive 查询结果
hive> select * from student;OK 101 zhangshan 102 lishi 103 zhaoliu Time taken: 0.26 seconds, Fetched: 3 row(s)
切换管理员账户,数据密码(hive默认存储derby数据库,不能同时启动两个以上)
sudo service mysql start service mysql status mysql -uroot -p密码 use mysql; selct user, Host, from user;修改 user 表,把 Host 表内容修改为%
update user set host='% wher host='localhost';删除 root 用户的其他 host
mysql>delte from user where Host='127.0.1';刷新
mysql>flush privilegs;退出
mysql>quit;驱动拷贝 配置 Metasore 到 MySql hive/conf 目录下创建一个 hive-site.xml. 根据官方文档配置参数,拷贝数据到 hive-site.xml 文件中 https://cwik.apche.org/confluence/display/Hive/AdminManual+MetasoreAdmin
bin/hive -help 1.“-e”不进入 hive 的交互窗口执行 sql 语句
bin/hive -e "select id from student;"2.“-f”执行脚本中 sql 语句 (1)在/usr/local/data 目录下创建 hivef.sql 文件
touch hivef.sql文件中写入正确的 sql 语句
selcet * from student;(2)执行文件中的 sql 语句
bin/hive -f /usr/local/data/hivef.sql(3)执行文件中的 sql 语句并将结果写入文件中
bin/hive -f /usr/local/datahivef.sql > /opt/module/dats/hive_result.txt于 Hive 的 String 类型相当于数据库的 varchar 类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上可以存储 2GB 的字符数。
Hive 有三种复杂数据类型 ARRAY、MAP 和 STRUCT。ARRAY 和 MAP 与 Java 中的 Array 和 Map 类似,而 STRUCT 与 C 语言中的 Struct 类似,它封装了一个命名字段集合, 复杂数据类型允许任意层次的嵌套。
实操: 某一表的数据结构如图: 1.基于上述数据结构,在 Hive 里创建对应的表,并导入数据。
2.创建表 row format delimted fields terminated by ', '- 列分隔符 collection items terminated by ‘_’ -MAP STRUCT 和 ARAY 的分隔符(数据分割 符号) map keys terminated by ‘:’ -MAP 中的 key 与 value 的分隔符 lines terminated by ‘\n’; - 行分隔符 3.加载数据 4.访问数据 array
map
struct
隐式转换类似java,强行转换用cast
1.隐式类型转换规则如下 (1)任何整数类型都可以隐式地转换为一个范围更广的类型,如 TINYINT 可以转换 成 INT,INT 可以转换成 BIGNT。 (2)所有整数类型、FLOAT 和 STRING 类型都可以隐式地转换成 DOUBLE。 (3)TINYINT、SMALINT、INT 都可以转换为 FLOAT。(除了bigint) (4)BOLEAN 类型不可以转换为任何其它的类型。
2.可以使用 CAST 操作显示进行数据类型转换 例如 CAST('1 ’ AS INT)将把字符串’1 转换成整数 1;如果强制类型转换失败,如执行 CAST('X AS INT),表达式返回空值 NULL。 参考尚硅谷的HIVE教程,林子雨《大数据技术原理与应用》课件