Hive基础

本文详细介绍了Apache Hive作为数据仓库软件的功能和应用,包括其如何使用SQL读取、编写和管理分布式存储中的大型数据集,以及如何将结构投影到已存储的数据中。文章还涵盖了Hive的安装部署步骤,配置过程,以及如何使用Hive进行数据操作。
Hive

官网:http://hive.apache.org/
Apache Hive?数据仓库软件有助于使用SQL读取,编写和管理驻留在分布式存储中的大型数据集。可以将结构投影到已存储的数据中。提供了命令行工具和JDBC驱动程序以将用户连接到Hive

Hive提供了SQL查询功能 hdfs分布式存储

Hive本质HQL转化为MapReduce程序
环境前提:
1)启动hdfs集群
2)启动yarn集群
如果想用hive的话,需要提前安装部署好hadoop集群

为什么要学习Hive

简化开发
easycoding!
高德地图使用Hive

优势:
1)操作接口采用类sql语法,select * from stu;
简单、上手快!
2)hive可以替代mr程序,sqoop
3)hive可以处理海量数据
4)hive支持UDF,自定义函数

劣势:
1)处理数据延迟高,慢
引擎:1.2.2以前版本都是用的mr引擎
2.x之后用的是Spark引擎
2)HQL的表达能力有限
一些sql无法解决的场景,依然需要我们写MapReduce

hive架构原理解析

sql->转换->MapReduce->job

hive安装部署

1)下载
2)上传到Linux
3)解压
tar -zxvf apache-hive-1.2.2-bin.tar.gz -C hd/
4)重命名
mv apache-hive-1.2.2-bin/ hive

5)修改配置文件
mv hive-env.sh.template hive-env.sh
vi hive-env.sh
HADOOP_HOME=/root/hd/hadoop-2.8.4
export HIVE_CONF_DIR=/root/hd/hive/conf

6)启动
bin/hive
配置mysql元数据库
1)拷贝mysql驱动到hive/lib
cp/mv hive/lib
2) 添加hive-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hsiehchou121:3306/metastore?createDatabas
eIfNotExist=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</descr
iption>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</d
escription>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<description>password to use against metastore database</d
escription>
</property>

3)注意:重启hadoop集群
4)启动hive
bin/hive
此时mysql中创建metastore元数据库
hive> create table hsiehchou(id int, name string)

row format
delimited fields
terminated by ‘\t’;
OK
hive> load data local inpath ‘/root/hsiehchou.txt’ into table hsiehchou;
OK
hive> select * from hsiehchou;
OK
1 re
2 mi
3 zk
4 sf
5 ls

杀死hive进程
[root@hsiehchou121 hive]# ps -aux|grep hive
root 3649 3.7 16.9 2027072 239240 pts/0 Tl 21:37 0:31
root 4285 0.0 0.0 112648 948 pts/0
[root@hsiehchou121 hive]# kill -9 3649

安装mysql5.6
yum search libaio # 检索相关信息
yum install libaio # 安装依赖包
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

添加 MySQL Yum Repository 到linux系统 repository 列表中,输入
yum localinstall mysql-community-release-el7-5.noarch.rpm

验证是否添加成功
yum repolist enabled | grep “mysql.-community.

查看 MySQL 版本,输入
yum repolist all | grep mysql

可以看到 5.5, 5.7 版本是默认禁用的,因为现在最新的稳定版是 5.6
yum repolist enabled | grep mysql

通过 Yum 来安装 MySQL,输入
yum install mysql-community-server

rpm -qi mysql-community-server.x86_64 0:5.6.24-3.el7

查看 MySQL 的安装目录
whereis mysql

启动 MySQL Server
systemctl start mysqld

查看 MySQL Server 状态
systemctl status mysqld

关闭 MySQL Server
systemctl stop mysqld

测试是否安装成功
mysql

修改mysql密码
use mysql;
update user set password=password(‘root’) where user=’root’;
flush privileges;

数据导入操作

load data []local] inpath ‘/root/hsiehchou.txt’ into table hsiehchou;
load data:加载数据
local:可选操作,如果加上local导入是本地linux中的数据,如果去掉local 那么
导入的是hdfs中数据。
inpath:表示的是加载数据的路径
into table:表示要加载的对应的表

hive数据类型
Java数据类型Hive数据类型长度
byteTINYINT1byte有符号整数
shortSMALLINT2byte有符号整数
intINT4byte有符号整数
longGINT8byte有符号整数
booleanBOOLEANfalse/true
floatFLOAT单精度浮点
doubleDOUBLE双精度浮点
stringSTRING字符
BINARY字节数组
DDL数据定义
1)查看数据库

show databases;

2)创建库

create database hive_db;

3)创建库 标准写法

create database if not exists hive_db;

4)创建库指定hdfs路径

create database hive_db location ‘/hive_db’;

5)创建表

如果指定了hdfs路径
创建的表存在于这个路径

6)查看数据库结构

desc database hive_db;

7)添加额外的描述信息

alter database hive_db set dbproperties(‘created’=’hsiehchou’);
注意:查询需要使用desc database extended hive_db;

8)查看指定的通配库:过滤

show databases like ‘h*’;

9)删除空库

drop database hive_db;

10)删除非空库

drop database hive_db2 cascade;

11) 删除非空库标准写法

drop database if exists hive_db cascade;

创建表

create [external] table [if not exists] table_name(字段信息) [partitioned by(字段信息)][clustered by(字段信息)] [sorted by(字段信息)]row format delimited fields terminated by ‘切割符’;

管理表

默认不加external创建的就是管理表,也称为内部表。
MANAGED_TABLE管理表。
Table Type:MANAGED_TABLE
查看表类型:
desc formatted hsiehchou2;

外部表

EXTERNAL_TABLE外部表
创建方式:
create external table student(id int,name string)
区别:如果是管理表删除hdfs中数据删除,如果是外部表删除hdfs数据不删除!

hive命令

1)不登录hive客户端直接输入命令操作Hive
[root@hsiehchou121 hive]# bin/hive -e “select * from hsiehchou;”
19/02/28 03:09:23 WARN conf.HiveConf: HiveConf of name hive.cli,print.current.db does not exist
Logging initialized using configuration in jar:file:/root/hd/hive/lib/hive-common-1.2.2.jar!/hive-log4j.properties
OK
hsiehchou.id hsiehchou.name
1 re
2 mi
3 zk
4 sf
5 ls

2)直接把sql写入到文件中
bin/hive -f /root/hived.sql

3)查看hdfs文件
dfs -ls /;
dfs -cat /wc/in/words.txt;

4)查看历史操作
[root@hsiehchou121 hive]# cat ~/.hivehistory

在hive/conf/hive-site.xml中增加

<!--是否显示当前表头-->
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<!--是否显示当前所在库名-->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property

显示效果
hive> select * from hsiehchou;
OK
hsiehchou.id hsiehchou.name
1 re
2 mi
3 zk
4 sf
5 ls

转载于:https://www.cnblogs.com/hsiehchou/p/10479052.html

### Hive 基础教程入门指南 #### 什么是 Apache Hive? Apache Hive 是一种数据仓库工具,专为查询和管理存储在分布式系统中的大型结构化数据集而设计。Hive 提供了一种类似于 SQL 的查询语言——HiveQL (HQL),使得熟悉关系数据库管理系统(RDBMS)的人可以轻松过渡到大数据处理环境[^1]。 #### Hive 在 Hadoop 生态系统中的位置 作为 Hadoop 平台的一部分,Hive 构建于 HDFS 和 MapReduce 上面。它允许用户通过简单的声明式命令来读取、写入以及管理和分析位于 HDFS 中的数据。此外,随着 Spark 成为了更受欢迎的选择之一,Hive 还支持使用 Spark 作为其执行引擎来进行更快捷的任务处理[^2]。 #### 安装配置 Hive 要安装并运行 Hive,请先确保已经正确设置了 Java 环境变量,并完成了 Hadoop 集群的搭建工作。接着下载最新版本的 Hive 发行包解压至指定目录下,在 `hive-env.sh` 文件里设置好相应的路径参数指向本地已有的 Hadoop 实例地址即可完成基本初始化操作。 对于文件分发情况可以通过如下方式验证: ```bash cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml ``` #### 使用 Hive 创建表与加载数据 创建新表格时可以选择内部表或外部表两种模式;前者会把原始输入源移动到默认库的位置,后者则保持原样不变仅建立索引关联。下面是一个简单例子展示如何向名为 'teacher' 的表上传文本文件: ```bash $hadoop fs -put teacher.txt /user/hive/warehouse/teacher ``` 此命令将会把本地磁盘上的 `teacher.txt` 文件复制到 HDFS 对应路径下的教师表中。 #### 查询优化技巧 当面对海量级规模的数据量时,合理的分区策略能够显著提高性能表现。比如按照日期字段进行划分可以让每次扫描只涉及特定时间段内的记录而不是整个历史积累下来的全部内容。另外就是压缩编码技术的应用同样有助于减少 I/O 开销从而加快响应速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值