Hive简介
1:企业中的数据大部分都是结构化(不是结构化的也都会转换成结构化) 我们可以使用JAVA进行分析处理数据,也可以使用mysql进行处理数据
2;最终的数据都会存储在HDFS中 我们可以使用MR程序进行分析处理数据, (JAVA特点:代码臃肿,逻辑复杂,效率低,但比较稳定)
3:SQL的特点 : 可以满足各种分析统计的需求,
**SQL统计解析语义 ,然后可以进行优化,最后传输到 MR模板 中 这个解析数据的过程有点复杂,为了简化程序员的操作时间和流程
4:这时候就有了一个工具 HIVE
HIVE 主要就是用来操作sql里的解析—优化—转换的过程 Hive处理的数据都存储在HDFS上,执行程序运行在YARN上
Hive的优点
1)操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)。HQL
2)避免了去写MapReduce,减少开发人员的学习成本。
3)Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合。(历史数据)
4)Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高。
5)Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
Hive的缺点
1.Hive的HQL表达能力有限 (1)迭代式算法无法表达 递归算法 (2)数据挖掘方面不擅长(数据挖掘和算法,机器学习)
2.Hive的效率比较低 (1)Hive自动生成的MapReduce作业,通常情况下不够智能化 (2)Hive调优比较困难,粒度较粗(快)
Hive的安装
- mysql数据 远程连接权限
1)linux中登录mysal:mysql -uroot -proot
2) set global validate_password_policy=0;
3) set global validate_password_length=1;
这个两个设置以后 密码很简单不会报错
4) 设置允许远程连接linux: grant all privileges on . to ‘root’@’%’ identified by ‘root’ with grant option;
5) 刷新:flush privileges;
- hive 解压 配置 mysql的驱动包
rz
tar -axvf apache-hive-3.1.2-bin.tar.gz
然后上传mysql的驱动包到/opt/apps/hive-3.1.2/lib目录下
- 修改配置文件
mv /opt/apps/hive-3.1.2/conf/hive-env.sh.template hive-env.sh vi
conf/hive-env.sh
export HADOOP_HOME=/opt/apps/hadoop-3.1.1/
export HIVE_CONF_DIR=/opt/apps/hive-3.1.2/conf
- 继续配置文件
/opt/apps/hive-3.1.2/conf/hive-site.xml
<configuration>
<!-- 记录HIve中的元数据信息 记录在mysql中 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://linux01:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- mysql的用户名和密码 -->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.exec.scratchdir</name>
<value>/user/hive/tmp</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/user/hive/log</value>
</property>
<!-- 客户端远程连接的端口 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>0.0.0.0</value>
</property>
<property>
<name>hive.server2.webui.host</name>
<value>0.0.0.0</value>
</property>
<!-- hive服务的页面的端口 -->
<property>
<name>hive.server2.webui.port</name>
<value>10002</value>
</property>
<property>
<name>hive.server2.long.polling.timeout</name>
<value>5000</value>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoCreateSchema</name>
<value>false</value>
</property>
<property>
<name>datanucleus.fixedDatastore</name>
<value>true</value>
</property>
<property>
<name>hive.execution.engine</name>
<value>mr</value>
</property>
<!-- 添加元数据服务配置 -->
<property>
<name>hive.metastore.local</name>
<value>false</value>
<description>controls whether to connect to remove metastore server or open a new metastore server in Hive Client JVM</description>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://linux01:9083</value>
</property>
</configuration>
- 继续修改配置文件
vi /opt/apps/hadoop-3.1.1/etc/hadoop/core-site.xml
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
- 启动hadoop
start-all.sh
- 配置环境变量
vi /etc/profile
source /etc/profile
- 初始化
/opt/apps/hive-3.1.2/bin/schematool -initSchema -dbType mysql
- 开启元数据服务 (前台启动)
hive --service metastore &
- 启动测试(HDFS正常)
hive
与Hive的第一次亲密接触(Hive处理HDFS中的结构化数据)
- 手写一个结构化的数据并上传到HDFS中
- 写sql
Hive的连接方式
- 在本地执行hive命令,本地模式进入到hive的客户终端
- 通过远程连接方式,开启hiveserver2服务 10000 端口 注意开启元数据服务 hive --service metastore & 9083 端口 1 ) jdbc连接 jdbc:hive2://linux01:10000
IDEA中新建一个maven项目 导入下面依赖
<dependencies>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>
2)beeline窗口 : !connect jdbc:hive2://linux01:10000
root
回车
0: jdbc:hive2://linux01:10000> 推荐!!!
Hive数据类型
hive数据类型>>java数据类型
1:tinyint >>byte 字节
2:smallint>>short 短整型
3:int>>int整形
4:bigint>>long长整型
5:boolean>>boolean布尔型
6:float>>float单精度浮点型
7:double>>double双精度浮点型
8:string>>string字符类型
9:timestamp时间类型
10:binary字节数组
在hive客户端中可以直接操作hdfs的命令
dfs -ls /;