《MY大数据开发笔记》----hive知识点总结

本文深入探讨Hive数据仓库的用途、服务、与传统数据库的区别,详细讲解Hive的数据类型、表数据导入导出、表结构管理、排序、连接查询等核心功能,以及分区和桶的高级特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hive的作用:hive最初的设计目的是为了给哪些精通sql但是不熟悉Hadoop的分析师,用来分析大规模的结构化的数据文件而设计的。

首先最重要的一点:

hive的使用和关系型数据库的使用方式类似(类sql语句),那我们为什么不使用关系型数据库而使用hive?

1.hive能分析超大数据规模的数据。

2.hive用于分析存储在文件中的结构化的数据。而关系型数据库不能。

所以hive最初的设计目的是:给哪些精通sql但是编码不熟练。而要分析的结构化的数据存储于大规模的文件中。在hive出现之前。是用MR来进行统计和分析。但是对这些存储文件中的结构化的数据。MR都类似。分析的统计最终数据也类似于关系型数据库中的手法。所以索性就将这些MR统一封装。成一个HQL语句。在调用HQL语句分析这些数据时,转换成MR。

 

 

一:hive提供的服务

输入hive --service help。弹出hive提供的服务列表。在这里主要介绍常用的几个服务。 cli ,hiveserver,hwi,jar

[s201 ~]$ hive --service help
Usage ./hive <parameters> --service serviceName <service parameters>
Service List: 
beeline cleardanglingscratchdir cli hbaseimport hbaseschematool
 help hiveburninclient hiveserver2 hplsql jar lineage llapdump 
llap llapstatus metastore metatool orcfiledump rcfilecat schemaTool version

1.1 hive cli 服务

默认的服务。输入hive直接启动这个服务,进入cli服务的交互式模式。

[s201 ~]$ hive
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/soft/apache-hive-2.3.4-bin/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/soft/hadoop-2.9.2/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]

Logging initialized using configuration in jar:file:/soft/apache-hive-2.3.4-bin/lib/hive-common-2.3.4.jar!/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
hive> 

进入cli的交互式模式。里面的命令如下

  • quit,exit:  退出交互式shell
  • reset: 重置配置为默认值
  • set <key>=<value> : 修改特定变量的值(如果变量名拼写错误,不会报错)
  • set :  输出用户覆盖的hive配置变量
  • set -v : 输出所有Hadoop和Hive的配置变量
  • add FILE[S] *, add JAR[S] *, add ARCHIVE[S] * : 添加 一个或多个 file, jar, archives到分布式缓存
  • list FILE[S], list JAR[S], list ARCHIVE[S] : 输出已经添加到分布式缓存的资源。
  • list FILE[S] *, list JAR[S] *,list ARCHIVE[S] * : 检查给定的资源是否添加到分布式缓存
  • delete FILE[S] *,delete JAR[S] *,delete ARCHIVE[S] * : 从分布式缓存删除指定的资源
  • ! <command> :  从Hive shell执行一个shell命令
  • dfs <dfs command> :  从Hive shell执行一个dfs命令
  • <query string> : 执行一个Hive 查询,然后输出结果到标准输出
  • source FILE <filepath>:  在CLI里执行一个hive脚本文件
  • !+ shell 命令,可以执行宿主机的命令如   !ls /;
  • dfs 命令可访问Hadoop文件系统

可以在非交互模式下使用cli服务。

script.q是按行分隔的hive命令。这是一个脚本文件。
下面的命令不进入交互式模式而可以直接执行hive脚本。

[s201 ~]$ hive -f script.q


执行单条的hive命令
[s201 ~]$ hive -e 'select * from testTable'

hive会将所有输出打印到标准输出。如果只想看到结果不想看到其他输出信息。
[s201 ~]$ hive -e -S 'select * from testTable'

1.2 hiveserver 服务

hive 以提供Thrift服务的服务器形式运行。允许Hive Thrift client,hive jdbc client, hive odbc连接。设置hive_port来设置该服务器的监听端口号。

启动该服务器的方式:

$>hive --service hiveserver2 &

使用hive jdbc client方式连接到hiveserver。

方式一:使用beeline服务,在命令行连接。

$>beeline						//进入beeline命令行(于hive --service beeline)
$beeline>!help										//查看帮助
$beeline>!quit										//退出
$beeline>!connect jdbc:hive://localhost:10000/mydb2//连接到hibve数据
注,这里连接不上。用
!connect jdbc:hive2://localhost:10000 root
再输入mysql的密码就可以连上了。
具体参考hive的安装配置。
metastore数据存在数据库中,
实际数据存在HDFS上。
所以要连上hive,就需要输入mysql的用户和密码。


$beeline>show databases ;
$beeline>use mydb2 ;
$beeline>show tables;								//显式表

方式二:java编码中使用hive jdbc client方式连接到hiveserver

		

使用Hive-jdbc驱动程序采用jdbc方式访问远程数据仓库
----------------------------------------------------
	1.创建java模块
	2.引入maven
	3.添加hive-jdbc依赖
		<?xml version="1.0" encoding="UTF-8"?>
		<project xmlns="http://maven.apache.org/POM/4.0.0"
				 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
				 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
			<modelVersion>4.0.0</modelVersion>

			<groupId>com.it18zhang</groupId>
			<artifactId>HiveDemo</artifactId>
			<version>1.0-SNAPSHOT</version>

			<dependencies>
				<dependency>
					<groupId>org.apache.hive</groupId>
					<artifactId>hive-jdbc</artifactId>
					<version>2.1.0</version>
				</dependency>
			</dependencies>
		</project>

	4.App
		package com.it18zhang.hivedemo;

		import java.sql.Connection;
		import java.sql.DriverManager;
		import java.sql.ResultSet;
		import java.sql.Statement;

		/**
		 * 使用jdbc方式连接到hive数据仓库,数据仓库需要开启hiveserver2服务。
		 */
		public class App {
			public static void main(String[] args) throws  Exception {
				Class.forName("org.apache.hive.jdbc.HiveDriver");
				//Connection conn = DriverManager.getConnection("jdbc:hive2://192.168.231.201:10000/mydb2");
				Connection conn = DriverManager.getConnection("jdbc:hive://192.168.231.201:10000/mydb2");//应该是这个
				Statement st = conn.createStatement();
				ResultSet rs = st.executeQuery("select id , name ,age from t");
				while(rs.next()){
					System.out.println(rs.getInt(1) + "," + rs.getString(2)) ;
				}
				rs.close();
				st.close();
				conn.close();
			}
		}

1.3 hwi 服务

HWI是Hive Web Interface的简称,是hive cli的一个web替换方案。熟悉hive cli就够了,操作hwi更是简单。
所以这里就略过。

1.4 hive jar 服务

hive jar 和Hadoop jar一样,是运行类路径中同时包含Hadoop和hive类java应用程序的方式

1.5 hive metastore服务

要介绍metastore服务,必须先介绍metastore。

metastore包含metastore服务和metastore后台数据的存储。

metastore服务默认是和hive服务程序运行在一个jvm中。我们可以配置metastore服务和hive服务分离,运行在不同的进程中。这样做可以提供更好的管理性和安全性。

如上图,metastare的三种不熟方式。

一:内嵌的metastare。数据库采用内嵌的Derby,一次只能为一个metastare打开一个hive会话。如果尝试打开第二个会话则会报错。

二:本地的metastare。数据库采用mysql,mysql运行在本机或者远程机器。可以打开多个会话。但是metastare服务和hive服务仍然在一个进程中。

三:远程的metastare。数据库采用mysql,mysql运行在本机或者远程机器。可以打开多个会话。metastare服务和hive服务仍然在不同的进程中。

具体的配置,略。入门使用内嵌的,一般情况为了方便都使用本地的,为了考虑安全,商用性可用性等一般使用远程的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值