自学大数据第17天~Hive安装与配置及常用命令

嗨咯,好几天没更新了,你以为我不知道吗?
这几天主要还是学习,学习如何再学习!

简述以下这几天都学习了什么~

  1. MongoDB的命令

  2. GaussDB(for Mongo)集群架构与社区版架构的对比
    社区版(副本集架构):
    mongos(路由) config(记录元数据) shard(负责计算和存储)
    GaussDB(for Mongo)存算分离架构:
    mongos config shard + 底层存储 ,这里shard只负责计算

  3. GaussDB怎么保证一致性的(2PC协议)

  4. GaussDB内存满了怎么办?

  5. Oplog就是一个中间人,类似于Mysql的binlog记录增删改的记录

  6. 巴拉巴拉巴拉

自学大数据第17天~Hive安装与配置及常用命令_第1张图片

Hive的安装

下载Hive

这里选了最新的版本~3.1.3

下载结束后该配置环境了;

解压信息可以看到解压后的hive中有很多jar包
自学大数据第17天~Hive安装与配置及常用命令_第2张图片
进入解压后的文件:
在这里插入图片描述

配置hive

自学大数据第17天~Hive安装与配置及常用命令_第3张图片
根据提供的模板文件开始配置我们的hive

配置hive-env.sh

cp hive-env.sh.template  ./hive-env.sh

自学大数据第17天~Hive安装与配置及常用命令_第4张图片

配置 hive-default.xml

cp hive-default.xml.template hive-default.xml

复制完毕后,暂且不需要修改,就放在这里就可以了;

配置hive-site.xml

#新建一个文件 hive-site.xml
vi  hive-site.xml

在文件中添加仓库的配置~即数据库的连接要素



<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURLname>
    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=truevalue>
    <description>JDBC connect string for a JDBC metastoredescription>
  property>
  <property>
    <name>javax.jdo.option.ConnectionDriverNamename>
    
    <value>com.mysql.cj.jdbc.Drivervalue>
    <description>Driver class name for a JDBC metastoredescription>
  property>
  <property>
    <name>javax.jdo.option.ConnectionUserNamename>
    <value>hivevalue>
    <description>username to use against metastore databasedescription>
  property>
  <property>
    <name>javax.jdo.option.ConnectionPasswordname>
    <value>hivevalue>
    <description>password to use against metastore databasedescription>
  property>
configuration>

配置hive环境

自学大数据第17天~Hive安装与配置及常用命令_第5张图片

检查hive配置是否成功
自学大数据第17天~Hive安装与配置及常用命令_第6张图片
Hive通常是被数据仓库的一个组件出现的~Apache Hive是一个分布式,容错的数据仓库系统,可实现大规模和 便于使用 SQL 读取、写入和管理驻留在分布式存储中的 PB 级数据。

所以需要搭配数据库使用

检查一下在自己机器上有什么数据库,比如mysql ,postgresql,sqlserver and so on;

正好机器上有mysql社区版~8.0.27

下面就以mysql为例搭建一个数据仓库

下载mysql8.0.27的驱动jar包到hive 的lib目录下

去maven仓库搞一个~
自学大数据第17天~Hive安装与配置及常用命令_第7张图片
然而该版本的驱动有漏洞,应该使用高版本无漏洞的吧(应该可以兼容的),不行咱再换对应版本的;

点击下载jar包~8.0.30

点击下载jar包~8.0.27

然后去hive-site.xml中配置数据库的连接要素:

登录mysql数据库查看数据库信息:
自学大数据第17天~Hive安装与配置及常用命令_第8张图片
新开一个会话启动hive

在这之前要先启动hadoop)因为hive依赖于MapReduce作业

启动hadoop后,
自学大数据第17天~Hive安装与配置及常用命令_第9张图片

启动hive

自学大数据第17天~Hive安装与配置及常用命令_第10张图片
上图表示hive启动成功了,检查一下能否正常运行,那就先小试一下:

show databases ;

不出意外的话,意外出现了–报错了
在这里插入图片描述
大体意思就是不能够实例化元数据客户端

出错原因:以前曾经安装了Hive或MySQL,重新安装Hive和MySQL以后,导致版本、配置不一致。解决方法是,使用schematool工具。Hive现在包含一个用于 Hive Metastore 架构操控的脱机工具,名为 schematool.此工具可用于初始化当前 Hive 版本的 Metastore 架构。此外,其还可处理从较旧版本到新版本的架构升级。所以,解决上述错误,你可以在终端执行如下命令:

schematool -dbType mysql -initSchema

自学大数据第17天~Hive安装与配置及常用命令_第11张图片

重新启动hive后重新测试:

自学大数据第17天~Hive安装与配置及常用命令_第12张图片
这次正常了;

我们查看mysql数据库中标的信息:

自学大数据第17天~Hive安装与配置及常用命令_第13张图片
可以看到库中多了多表的信息;

查看要准备导入数据的表结构:
自学大数据第17天~Hive安装与配置及常用命令_第14张图片

下面该学习一下hive一些命令了:

hive常用命令

在使用常用命令前,先看其数据类型吧:

hive中数据类型:

Hive支持基本数据类型和复杂类型, 基本数据类型主要有数值类型(INT、FLOAT、DOUBLE ) 、布尔型和字符串, 复杂类型有三种:ARRAY、MAP 和 STRUCT。

  • a.基本数据类型

TINYINT: 1个字节
SMALLINT: 2个字节
INT: 4个字节
BIGINT: 8个字节
BOOLEAN: TRUE/FALSE
FLOAT: 4个字节,单精度浮点型
DOUBLE: 8个字节,双精度浮点型
STRING 字符串

  • b.复杂数据类型

ARRAY: 有序字段
MAP: 无序字段
STRUCT: 一组命名的字段

hive基本命令

自学大数据第17天~Hive安装与配置及常用命令_第15张图片
可以看到hivesql的命令跟sql92很像(简直一毛一样呀)

hivesql的一些其他命令不在演示,网上有很多教程,这里不再做搬运工了;

捡几个重点的搞一下:

向表中导入数据

首先准备数据,没有现成的,只能自己造了:

1 java
2 c++
3 html
4 golang
5 erlang

创建数据表用来存数据:

use hive;
create table  book(id int ,name string) ;

导入本地数据

load data local inpath '/usr/local/bigdata/apache-hive-3.1.2-bin/loaddata/book' overwrite into table book ;

出了些问题~导入的数据全是null
自学大数据第17天~Hive安装与配置及常用命令_第16张图片
咋办?解决呗,导入的数据格式不对?
数据格式如下,间隔一个tab,每行一个换行,
自学大数据第17天~Hive安装与配置及常用命令_第17张图片
查询后发现原来是创建表时没有指定换行符

新建一个表

create table books (id int ,name string )row format delimited fields terminated by '\t';

重新导入数据后查看数据:
自学大数据第17天~Hive安装与配置及常用命令_第18张图片

从hdfs中导入数据

将数据上传到hdfs中
在这里插入图片描述
newbook中数据
在这里插入图片描述

向hive中导入newbook

自学大数据第17天~Hive安装与配置及常用命令_第19张图片

  • 有local~表示从本地导入数据

  • 无local~表示从哪个hdfs中导入

  • 有overwrite~表示导入数据时将旧数据覆盖

  • 无overwrite~表示向表中追加数据

注意:

为了保证数据能正常导入,一般在建表时就要考虑数据之间的间隔:

几个案例sql

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



create table if not exists hive.course(cid int,sid int) 
row format delimited fields terminated by '\t';

上面的表book不是数据为null吗,我们使用insert 命令插入数据:
自学大数据第17天~Hive安装与配置及常用命令_第20张图片

插入数据

insert overwrite table book  select id  ,name  from books ;

执行过程中调用了MapReduce
自学大数据第17天~Hive安装与配置及常用命令_第21张图片
所以对于非程序员或者我这个菜鸡而言不用学习编写Java MapReduce代码了;

子查询

略微一提
标准 SQL 的子查询支持嵌套的 select 子句,HiveQL 对子查询的支持很有限,只能在from 引导的子句中出现子查询。

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