HIVE

HIVE

学习目标:

  1. 了解hive是什么
  2. 理解hive架构
  3. hive搭建
  4. 熟练hive sql的使用
  5. 理解hive分区
  6. 外部表和内部表区别
  7. DML
  8. beeline和JDBC
  9. hive的函数

HIVE数据仓库

保存历史数据

数据库:数据交互。

解释器 编译器 优化器

hive运行时,元数据存储在关系型数据库(Mysql

HIVE架构图

hive.apcache.com

依托于hadoop,底层存储 hdfs

解释器

anltr —> 语法树

编译器

将HIVE sQL 转换成车工操作符

操作符是hive的最小处理单元

每个操作符代表HDFS的一个操作或者是一个job

优化器

HIVE 搭建

前置条件

部署hdfs集群

安装Mysql

#查看是否安装了mysql
rpm -qa|grep -i mysql
#卸载mysql
rpm -e mysql*
#安装mysql
Yum -y install mysql-server 

启动mysql:

service mysqld start

连接数据库:

mysql -uroot -p

输入密码:

#修改密码
set password for 'root'@'localhost'=password('123456');

设置无密码登录:

vim /etc/my.cnf
#添加
skip-grant-tables

安装HIVE

  1. 上传安装包
  2. 解压
  3. 配置环境变量
  4. hive-site.xml
tar -xzvf hive-xyztar.gz

将环境变量设置HIVE_HOME为指向安装目录:

  $ cd hive-xyz
  $ export HIVE_HOME = {{pwd}}

最后,添加$HIVE_HOME/bin到您的PATH

  $ export PATH = $ HIVE_HOME / bin:$ PATH

Hive中metastore()的三种方式

参考链接:HIVE的元数据相关配置

a)内嵌Derby方式

嵌入式Metastore数据库主要用于单元测试。一次只能有一个进程连接到Metastore数据库,因此它不是一个真正的实用解决方案,但适用于单元测试。

只能有一个hive客户端能使用数据库,不推荐


<configuration>  
  <!--连接URL-->
<property>  
  <name>javax.jdo.option.ConnectionURL</name>  
  <value>jdbc:derby:;databaseName=metastore_db;create=true</value>  
</property>  
  
<!--连接驱动名称-->
<!--derby-->
<property>  
  <name>javax.jdo.option.ConnectionDriverName</name>  
  <value>org.apache.derby.jdbc.EmbeddedDriver</value>  
</property>  
   
<!--是否使用本地元数据模式
(从Hive 0.10删除:如果hive.metastore.uris是就是cal 模式,否则额就是远程-->
  <!--虽然这么官方文档这么备注-->
<property>  
  <name>hive.metastore.local</name>  
  <value>true</value>  
</property>  
  
<!--在HDFS存储HIVE的地址-->  
<property>  
  <name>hive.metastore.warehouse.dir</name>  
  <value>/user/hive/warehouse</value>  
</property>  
   
  
</configuration>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FWBzC8PX-1570610031603)(E:\朱琰笔记\pic\1564753514137.png)]

b)远程访问数据库方式

在此配置中,您将远程链接关系型数据库。 以下示例为连接MySQL服务器.

<configuration>  
<property>  
  <name>hive.metastore.warehouse.dir</name>  
  <value>/user/hive_remote/warehouse</value>  
</property>  
  
<!--本地或远程Metastore
(从Hive 0.10删除:如果hive.metastore.uris是就是cal 模式,否则额就是远程-->
<property>  
  <name>hive.metastore.local</name>  
  <value>true</value>  
</property>  
  
<!--Mysql服務器地址-->
<property>  
  <name>javax.jdo.option.ConnectionURL</name>  
  <value>jdbc:mysql://localhost/hive_remote?createDatabaseIfNotExist=true</value>  
</property>  

<!--MySQL JDBC驱动程序类-->
<property>  
  <name>javax.jdo.option.ConnectionDriverName</name>  
  <value>com.mysql.jdbc.Driver</value>  
</property>  
  
<!--MySQL用戶名-->
<property>  
  <name>javax.jdo.option.ConnectionUserName</name>  
  <value>hive</value>  
</property>
  
<!--MySQL密碼-->
<property>  
  <name>javax.jdo.option.ConnectionPassword</name>  
  <value>password</value>  
</property>  
</configuration>  

在这里插入图片描述

在这里插入图片描述

c)内嵌元数据服务方式

在这种方式中,Metastore服务器组件的使用类似于Hive Client中的库。 每个Hive客户端都将打开与数据库的连接并对其进行SQL查询。

确保可以从执行Hive查询的计算机访问数据库,因为这是本地存储。还要确保JDBC客户端库位于Hive Client的类路径中。

此配置通常与HiveServer2一起使用(仅在HiveServer2中使用嵌入式Metastore,在hiveserver2 start命令的命令行参数中添加“–hiveconf hive.metastore.uris =’’”或使用hiveserver2-site.xml(在Hive 0.14中可用) ))

配置Param配置值评论
hive.metastore.uris不需要因为这是本地商店
hive.metastore.localtrue这是本地商店(在Hive 0.10中删除,请参阅配置说明部分)
hive.metastore.warehouse.dir<base hdfs path>指向HDFS中非外部Hive表的默认位置。

d)远程Metastore服务方式

在远程Metastore设置中,所有Hive客户端都将与Metastore服务器建立连接,然后Metastore服务器会查询数据存储区(本例中为MySQL)以获取元数据。Metastore服务器和客户端使用Thrift 协议进行通信 。从Hive 0.5.0开始,您可以通过执行以下命令来启动Thrift服务器:

hive --service metastore
1
<configuration>  
<property>  
<name>hive.metastore.warehouse.dir</name>  
<value>/user/hive/warehouse</value>  
</property>  

<property>  
<name>javax.jdo.option.ConnectionURL</name>  
<value>jdbc:mysql://192.168.57.6:3306/hive?createDatabaseIfNotExist=true</value>  
</property>  

<property>  
<name>javax.jdo.option.ConnectionDriverName</name>  
<value>com.mysql.jdbc.Driver</value>  
</property>  

<property>  
<name>javax.jdo.option.ConnectionUserName</name>  
<value>hive</value>  
</property>  

<property>  
<name>javax.jdo.option.ConnectionPassword</name>  
<value>password</value>  
</property>  


<property>  
<name>hive.metastore.local</name>  
<value>false</value>  
</property>  

<!--Hive Metastore是无状态的,因此可以有多个实例来实现高可用性。-->
<!--使用  hive.metastore.uris它可以指定多个远程Metastore。-->
<!--默认情况下,Hive将使用列表中的第一个,在连接失败时,会随机选择一个重新连接-->
<property>  
<name>hive.metastore.uris</name>  
<value>thrift://192.168.1.188:9083</value>  
</property>  
</configuration>  

注:这里把hive的服务端和客户端都放在同一台服务器上了。服务端和客户端可以拆开,

2

将hive-site.xml配置文件拆为如下两部分

1)、服务端配置文件

<configuration>  
<property>  
  <name>hive.metastore.warehouse.dir</name>  
  <value>/user/hive/warehouse</value>  
</property>  

<property>  
  <name>javax.jdo.option.ConnectionURL</name>  
  <value>jdbc:mysql://192.168.57.6:3306/hive?createDatabaseIfNotExist=true</value>  
</property>  

<property>  
  <name>javax.jdo.option.ConnectionDriverName</name>  
  <value>com.mysql.jdbc.Driver</value>  
</property>     

<property>  
  <name>javax.jdo.option.ConnectionUserName</name>  
  <value>root</value>  
</property>  
  
<property>  
  <name>javax.jdo.option.ConnectionPassword</name>  
  <value>123456</value>  
</property>  
</configuration>  
<configuration>  

  

<property>  
  <name>hive.metastore.warehouse.dir</name>  
  <value>/user/hive/warehouse</value>  
</property>  
  

<property>  
  <name>hive.metastore.local</name>  
  <value>false</value>  
</property>  

  

<property>  
  <name>hive.metastore.uris</name>  
  <value>thrift://192.168.57.5:9083</value>  
</property>  

</configuration>  
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

启动hive服务端程序

hive --service metastore

客户端直接使用hive命令即可

root@my188:~$ hive

Hive history file=/tmp/root/hive_job_log_root_201301301416_955801255.txt

hive> show tables;

OK

test_hive

fhive>

ve.metastore.uris
thrift://192.168.57.5:9083

``` <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

启动hive服务端程序

hive --service metastore

客户端直接使用hive命令即可

root@my188:~$ hive

Hive history file=/tmp/root/hive_job_log_root_201301301416_955801255.txt

hive> show tables;

OK

test_hive

fhive>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值