主要内容:
1、Hive的基本工能机制和概念
2、hive的安装和基本使用
3、HQL
4、hive的脚本化运行使用方式
5、hive的基本语法--建表语法
6、hive的基本语法--内部表和外部表.
7、hive的基本语法--create建表 like as
8、hive的基本语法--数据导入--从本地--从hdfs
9、查询语法
10、数据类型
11、hive函数
1. 什么是hive
hive本身是一个单机程序。转在哪里都行,相对于hadoop来说就是一个hdfs的客户端和yarn的客户端,放在哪一台linux机器都无所谓,只要能链接上hadoop集群就可以,hive本身没有负载,无非就是接收一个sql然后翻译成mr,提交到yarn中去运行。
hive数据分析系统(数据仓库,像一个仓库一样,存放着很多数据,而且可以做各种查询、统计和分析,将结果放入新生的表中),的正常使用,需要
1、mysql:用来存放hdfs文件到二维表的描述映射信息,也就是元数据
2、hadoop集群
hdfs集群
yarn集群
1.1. hive基本思想
Hive是基于Hadoop的一个数据仓库工具(离线),可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
1.2. 为什么使用Hive
- 直接使用hadoop所面临的问题
人员学习成本太高
项目周期要求太短
MapReduce实现复杂查询逻辑开发难度太大
- 为什么要使用Hive
操作接口采用类SQL语法,提供快速开发的能力。
避免了去写MapReduce,减少开发人员的学习成本。
功能扩展很方便。
1.3. Hive的特点
- 可扩展
Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。
- 延展性
Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
- 容错
良好的容错性,节点出现问题SQL仍可完成执行。
2. hive的基本架构
Jobtracker是hadoop1.x中的组件,它的功能相当于:
Resourcemanager+MRAppMaster
TaskTracker 相当于:
Nodemanager + yarnchild
hive 2.0 以后的版本,底层的运算引擎已经不是mr了,而是spark
3. hive安装
3.1. 最简安装:用内嵌derby作为元数据库
准备工作:安装hive的机器上应该有HADOOP环境(安装目录,HADOOP_HOME环境变量)
安装:直接解压一个hive安装包即可
此时,安装的这个hive实例使用其内嵌的derby数据库作为记录元数据的数据库
此模式不便于让团队成员之间共享协作
3.2. 标准安装:将mysql作为元数据库
mysql装在哪里都可以,只要能提供服务,能被hive访问就可以。
下载mysql的rpm安装包
.tar .gz .tar.gz的区别
.tar是讲多个文件打包成一个文件,没有压缩,
.gz是压缩
3.2.1. mysql安装
① 上传mysql安装包
② 解压:
tar -xvf MySQL-5.6.26-1.linux_glibc2.5.x86_64.rpm-bundle.tar
③ 安装mysql的server包
rpm -ivh MySQL-server-5.6.26-1.linux_glibc2.5.x86_64.rpm
依赖报错:
缺perl(是一中编程语言,好比java编程缺少jdk一样)
安装perl
yum install perl
安装libaio
安装完perl以及libaio后 ,继续重新安装mysql-server
(可以配置一个本地yum源进行安装:
1、先在vmware中给这台虚拟机连接一个光盘镜像
2、挂载光驱到一个指定目录:mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom
3、修改yum源;将yum的配置文件中baseURL指向/mnt/cdrom
)
1、链接光盘镜像
2、挂载光驱
3、修改yum源
rpm -ivh MySQL-server-5.6.26-1.linux_glibc2.5.x86_64.rpm
又出错:包冲突conflict with
移除老版本的冲突包:mysql-libs-5.1.73-3.el6_5.x86_64
rpm -e mysql-libs-5.1.73-3.el6_5.x86_64 --nodeps
继续重新安装mysql-server
rpm -ivh MySQL-server-5.6.26-1.linux_glibc2.5.x86_64.rpm
成功后,注意提示:里面有初始密码及如何改密码的信息
初始密码:
/root/.mysql_secret
改密码脚本:需要mysql客户端
/usr/bin/mysql_secure_installation
④ 安装mysql的客户端包:
rpm -ivh MySQL-client-5.6.26-1.linux_glibc2.5.x86_64.rpm
⑤ 启动mysql的服务端:
service mysql start
Starting MySQL. SUCCESS!
⑥ 修改root的初始密码:
/usr/bin/mysql_secure_installation
按提示,输入生成的随机密码
⑦ 测试:
用mysql命令行客户端登陆mysql服务器看能否成功
[root@mylove ~]# mysql -uroot -proot mysql> show databases;
mysql>exit
⑧ 给root用户授予从任何机器上登陆mysql服务器的权限:
mysql用户权限控制比较严苛,光有用户名,密码还不行,mysql可以限制从哪个机器登录过来的,默认只能从服务器所在的本机登录过来。需要设置某一个用户可以从哪台机器登录过来。
授予root用户,@任何机器,访问任何库的任何表的权限。
mysql> grant all privileges on *.* to 'root'@'%' identified by '你的密码' with grant option; Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
注意点:要让mysql可以远程登录访问
最直接测试方法:从windows上用Navicat去连接,能连,则可以,不能连,则要去mysql的机器上用命令行客户端进行授权:
在mysql的机器上,启动命令行客户端:
mysql -uroot -proot mysql>grant all privileges on *.* to 'root'@'%' identified by 'root的密码' with grant option; mysql>flush privileges;
3.3、开始安装hive
版本说明1.2.1: hive 2.0 以后的版本,底层的运算引擎已经不是mr了,而是spark
3.3.1、上传并解压缩安装包
3.3.2、修改配置文件—元数据库配置
目的:告知mysql在哪里;以及用户名,密码
原因:hive是java程序,需要使用jdbc去连接mysql数据库
hive-site.xml
vi conf/hive-site.xml
<configuration> <property>
<!-- 连接url --> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value> <description>JDBC connect string for a JDBC metastore</description> </property> <property>
<!-- 连接的驱动类 --> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>Driver class name for a JDBC metastore</description> </property> <property>
<!-- 用户名 -->
<name>javax.jdo.option.ConnectionUserName</name> <value>root</value> <description>username to use against metastore database</description> </property> <property>
<!-- 密码 --> <name>javax.jdo.option.ConnectionPassword</name> <value>root</value> <description>password to use against metastore database</description> </property> </configuration>
3.3.3、jdbc驱动包
上传一个mysql的驱动jar包到hive的安装目录的lib中
3.3.4、配置环境变量
因为,hive要访问hdfs,还要提交job到yarn。
1、配置HADOOP_HOME 和HIVE_HOME到系统环境变量中:
/etc/profile
2、刷新配置文件
source /etc/profile
3.3.4、启动hive
然后用命令启动hive交互界面:
[root@hdp20-04 ~]# hive-1.2.1/bin/hive
4、hive使用方式
1、直接在交互界面输入sql进行交互。
2、sql里可以直接使用java类型。
3、hive中建立数据库后,会在hdfs中出现对象的库名.db的文件夹
4、建表的目的是为了和数据文件进行映射;建立表之后(默认建立在default库中),hive会在hdfs上建立对应的文件夹,文件夹的名字就是表名称;
4.1、只要hdfs文件夹中有了数据即文件,对应的表中就会有了记录
4.2、hdfs文件中的数据是按照分隔符进行切分的(value.toString().split("分割符"))(默认分隔符