Hive是基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将sql语句转换为MapReduce任务进行运行,其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据库仓库的统计分析。
Hive是建立在Hadoop上的数据仓库基础框架,它提供了一系列工具,可以用来进行数据提取转化加载(ETL)。这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制,Hive定义了简单的类SQL查询语言,称为HQL,它允许熟悉SQL的用户查询数据,同时,这个语言也允许熟悉MapReduce开发者自定义的mapper和reducer来处理内建的mapper和reducer无法完成的分析工作。
hive与关系型数据库的区别
1、hive和关系型数据库存储文件的系统不同,hive使用的是hadoop的HDFS(hadoop的分布式文件系统),关系型数据库则是服务器本地的文件系统
2、hive使用的计算模型是mapreduce,而关系型数据库则是自己设计的计算模型
3、关系型数据库都是为实时查询的业务进行设计的,而hive则是为海量数据做数据挖掘设计的,实时性很差,实时性的区别导致hive的应用场景和关系型数据库有很大的不同
4、hive很容易扩展自己的存储能力和计算能力,这个是继承hadoop的,而关系型数据库在这个方面要比Hive差的多
准备java环境
yum -y install java-1.8.0-openjdk-devel
echo export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk >> /etc/profile
source /etc/profile
准备hadoop环境
wget https://mirrors.sonic.net/apache/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz -P /opt
cd /opt
tar -xvf hadoop-3.3.4.tar.gz
下载hive软件包
wget http://archive.apache.org/dist/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
cd /opt
tar -xvf apache-hive-3.1.3-bin.tar.gz
准备配置文件
cp conf/hive-env.sh.template conf/hive-env.sh
sed -i ‘s!^# HADOOP_HOME.*$!HADOOP_HOME=/opt/hadoop-3.3.4/!’ conf/hive-env.sh
初始化元数据库
bin/schematool -dbType derby -initSchema
启动hive
[root@bogon apache-hive-3.1.3-bin]# bin/hive
Hive Session ID = a3a6b634-553e-45d7-b4a5-e67cbc4187ca
hive>
#查看数据库
hive> show databases;
OK
default
Time taken: 1.966 seconds, Fetched: 1 row(s)
#进入default数据库
hive> use default;
OK
Time taken: 0.094 seconds
#创建student表
hive> create table student(id int,name string);
OK
Time taken: 1.335 seconds
#查询数据库中的表
hive> show tables;
OK
student
Time taken: 0.124 seconds, Fetched: 1 row(s)
#向表中插入数据
hive> insert into student values(20,‘lisi’);
Query ID = root_20230309150442_76fd8d9e-7fb8-42db-a7e4-f06d1d708cf7
Total jobs = 3
Launching Job 1 out of 3
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=
In order to set a constant number of reducers:
set mapreduce.job.reduces=
Job running in-process (local Hadoop)
2023-03-09 15:04:50,566 Stage-1 map = 100%, reduce = 0%
2023-03-09 15:04:51,582 Stage-1 map = 100%, reduce = 100%
Ended Job = job_local957802618_0001
Stage-4 is selected by condition resolver.
Stage-3 is filtered out by condition resolver.
Stage-5 is filtered out by condition resolver.
Moving data to directory file:/user/hive/warehouse/student/.hive-staging_hive_2023-03-09_15-04-42_590_5758679572029952371-1/-ext-10000
Loading data to table default.student
MapReduce Jobs Launched:
Stage-Stage-1: HDFS Read: 0 HDFS Write: 0 SUCCESS
Total MapReduce CPU Time Spent: 0 msec
OK
Time taken: 9.732 seconds
#查询表中数据
hive> select * from student;
OK
20 lisi
Time taken: 0.385 seconds, Fetched: 1 row(s)
#查看表结构
hive> desc student;
OK
id int
name string
Time taken: 0.135 seconds, Fetched: 2 row(s)
#退出
hive> quit;