大数据测试-HIVE入门

一、HIVE启动方式

大数据测试-HIVE入门_第1张图片

Hive自带客户端

  •  Hive发展至今,总共历经了两代客户端工具。
  •        第一代客户端(deprecated不推荐使用):$HIVE_HOME/bin/hive, 是一个 shellUtil。主要功能:一是可用于以交互或批处理模式运行Hive查询;二是用于Hive相关服务的启动,比如metastore服务。
  •        第二代客户端(recommended 推荐使用):$HIVE_HOME/bin/beeline,是一个JDBC客户端,是官方强烈推荐使用的Hive命令行工具,和第一代客户端相比,性能加强安全性提高。

方式一:bin/hive

在服务器上直接输入hive
大数据测试-HIVE入门_第2张图片

 

方式二:bin/beeline

HiveServer2服务介绍       

       远程模式下beeline通过 Thrift 连接到单独的HiveServer2服务上,这也是官方推荐在生产环境中使用的模式。

        HiveServer2支持多客户端的并发和身份认证,旨在为开放API客户端如JDBC、ODBC提供更好的支持

关系梳理

       HiveServer2通过Metastore服务读写元数据。所以在远程模式下, 启动 HiveServer2 之前必须先首先启动 metastore 服务。
       特别注意:远程模式下,Beeline客户端只能通过HiveServer2服务访问Hive。而bin/hive是通过Metastore服务访问的。具体关系如下: 大数据测试-HIVE入门_第3张图片

 bin/beeline客户端使用

在hive安装的服务器上,首先启动metastore服务,然后启动hiveserver2服务。

#先启动metastore服务 然后启动hiveserver2服务
nohup /export/servers/hive/bin/hive --service metastore &
nohup /export/servers/hive/bin/hive --service hiveserver2 &
        在node3上使用beeline客户端进行连接访问。需要注意 hiveserver2服务启动之后需要稍等一会才可以对外提供服务。
         Beeline是JDBC的客户端,通过JDBC协议和Hiveserver2服务进行通信,协议的地址是:
jdbc:hive2://hadoop02:10000
beeline连接方式1:

 

beeline
大数据测试-HIVE入门_第4张图片
#访问hiveserver2协议
!connect jdbc:hive2://hadoop02:10000
#输入用户名(要求有范文hdfs的权限)
hue
#输入密码
hue

大数据测试-HIVE入门_第5张图片

 beeline连接方式2,一步到位:

 beeline -u jdbc:hive2://hadoop02:10000 -n hue

-u后面的是jdbc的链接信息  -n是用户名和密码

大数据测试-HIVE入门_第6张图片

二、 Hive SQL之数据库与建库

数据库database

  1. 在Hive中,默认的数据库叫做default,存储数据位置位于HDFS的/user/hive/warehouse下。
  2. 用户自己创建的数据库存储位置是/user/hive/warehouse/database_name.db下。

创建数据库

create database用于创建新的数据库
COMMENT:数据库的注释说明语句
LOCATION:指定数据库在HDFS存储位置,默认/user/hive/warehouse/dbname.db
WITH DBPROPERTIES:用于指定一些数据库的属性配置。
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
例子:创建数据库yasar
注意: 如果需要使用location指定路径的时候,最好指向的是一个新创建的空文件夹。
create database if not exists yasar comment"this is mysql test db" with dbproperties('createdBy'='yasar');

大数据测试-HIVE入门_第7张图片

 使用数据库

选择特定的数据库
切换当前会话使用哪一个数据库进行操作
use dbname

 删除数据库

默认行为是RESTRICT,这意味着仅在数据库为空时才删除它。
要删除带有表的数据库(不为空的数据库),我们可以使用CASCADE
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];

后面介绍建表,我们先在yasar这个库里面新建一个表

create table if not exists yasar.mytest(id int,name string) row format delimited fields terminated by'\t';

然后不加cascade去删除这个库

drop database yasar;

大数据测试-HIVE入门_第8张图片

 然后我们加上cascade去删除这个库

drop database yasar cascade;

大数据测试-HIVE入门_第9张图片

 使用show databases;查看这个库已经被删除大数据测试-HIVE入门_第10张图片

 三、Hive SQL之表与建表

创建表

CREATE TABLE [IF NOT EXISTS] [db_name.]table_name
(col_name data_type [COMMENT col_comment], ... )
[COMMENT table_comment]
[ROW FORMAT DELIMITED …];

hive数据类型

Hive数据类型指的是表中列的字段类型;
整体分为两类: 原生数据类型 (primitive data type)和 复杂数据类型 (complex data type)。
最常用的数据类型是 字符串String 数字类型Int
大数据测试-HIVE入门_第11张图片

分隔符指定语法 

  • ROW FORMAT DELIMITED语法用于指定字段之间等相关的分隔符,这样Hive才能正确的读取解析数据。
  • 或者说只有分隔符指定正确,解析数据成功,我们才能在表中看到数据。

大数据测试-HIVE入门_第12张图片

Hive默认分隔符 

  • Hive建表时如果没有row format语法指定分隔符,则采用默认分隔符;
  • 默认的分割符是'\001',是一种特殊的字符,使用的是ASCII编码的值,键盘是打不出来的。

大数据测试-HIVE入门_第13张图片

一、数据类型、分隔符练习

      文件archer.txt中记录了手游《王者荣耀》射手的相关信息,包括生命、物防、物攻等属性信息,其中字段之间分隔符为制表符\t,要求在Hive中建表映射成功该文件。
1    后羿    5986    1784    396    336    remotely    archer
2    马可波罗    5584    200    362    344    remotely    archer
3    鲁班七号    5989    1756    400    323    remotely    archer
4    李元芳    5725    1770    396    340    remotely    archer
5    孙尚香    6014    1756    411    346    remotely    archer
6    黄忠    5898    1784    403    319    remotely    archer
7    狄仁杰    5710    1770    376    338    remotely    archer
8    虞姬    5669    1770    407    329    remotely    archer
9    成吉思汗    5799    1742    394    329    remotely    archer
10    百里守约    5611    1784    410    329    remotely    archer    assassin

1/3)数据文件

字段含义:id、name(英雄名称)、hp_max(最大生命)、mp_max(最大法力)、attack_max(最高物攻)
、defense_max(最大物防)、attack_range(攻击范围)、role_main(主要定位)、role_assist(次要定位)
分析一下:字段都是基本类型,字段的顺序需要注意一下。
字段之间的分隔符是制表符,需要使用row format语法进行指定。

2/3)建表语句

--创建数据库并切换使用
create database if not exists roles;
use roles;
--ddl create table
create table t_archer(
id int comment "ID",
name string comment "英雄名称",
hp_max int comment "最大生命",
mp_max int comment "最大法力",
attack_max int comment "最高物攻",
defense_max int comment "最大物防",
attack_range string comment "攻击范围",
role_main string comment "主要定位",
role_assist string comment "次要定位"
) comment "王者荣耀射手信息"
row format delimited
fields terminated by "\t";

建表成功之后,在Hive的默认存储路径下就生成了表对应的文件夹;

archer.txt文件上传到对应的表文件夹下。

# node 机器上进行操作
cd ~
mkdir hivedata
cd hivedata/
# 把文件从课程资料中首先上传到 node1 linux 系统上
# 执行命令把文件上传到 HDFS 表所对应的目录下
hadoop fs -put archer.txt /user/hive/warehouse/itheima.db/t_archer

3/3)结果验证

执行查询操作,可以看出数据已经映射成功。
核心语法:row format delimited fields terminated by 指定字段之间的分隔符。
select * from roles.t_archer;

大数据测试-HIVE入门_第14张图片

 show语法功能

--1 、显示所有数据库 SCHEMAS DATABASES 的用法 功能一样
show databases;
show schemas;
--2 、显示当前数据库所有表
show tables;
SHOW TABLES [ IN database_name] ; -- 指定某个数据库
--3 、查询显示一张表的元数据信息
desc formatted t_team_ace_player ;
-1 、显示所有数据库 SCHEMAS DATABASES 的用法 功能一样
show databases;
show schemas;
大数据测试-HIVE入门_第15张图片

 

--2 、显示当前数据库所有表
show tables;
大数据测试-HIVE入门_第16张图片

 

--3 、查询显示一张表的元数据信息
desc formatted stu ;
大数据测试-HIVE入门_第17张图片

 

你可能感兴趣的:(大数据测试,hive,大数据,hadoop)