百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

7.Hive介绍以及安装

bigegpt 2024-09-20 14:10 4 浏览

hive简介

Hive : 数据仓库。

Hive:解释器,编译器,优化器等。

Hive 运行时,元数据存储在关系型数据库里面。

Hive架构

1.Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

2.解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行

3.Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select * from tbl不会生成MapRedcue任务)。

编译器将一个Hive SQL转换操作符

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

每个操作符代表HDFS的一个操作或者一道MapReduce作业

本地模式

这种方式是最简单的存储方式,只需要在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:derby:;databaseName=metastore_db;create=true</value> 
</property> 
<property> 
 <name>javax.jdo.option.ConnectionDriverName</name> 
 <value>org.apache.derby.jdbc.EmbeddedDriver</value> 
</property> 
<property> 
 <name>hive.metastore.local</name> 
 <value>true</value> 
</property> 
<property> 
 <name>hive.metastore.warehouse.dir</name> 
 <value>/user/hive/warehouse</value> 
</property> 
</configuration> 

注:使用derby存储方式时,运行hive会在当前目录生成一个derby文件和一个metastore_db目录。这种存储方式的弊端是在同一个目录下同时只能有一个hive客户端能使用数据库,否则会提示如下错误

远程数据库模式

这种存储方式需要在本地运行一个mysql服务器,并作如下配置(下面两种使用mysql的方式,需要将mysql的jar包拷贝到$HIVE_HOME/lib目录下)。

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
 
<configuration> 
<property> 
 <name>hive.metastore.warehouse.dir</name> 
 <value>/user/hive_remote/warehouse</value> 
</property> 
 
<property> 
 <name>hive.metastore.local</name> 
 <value>true</value> 
</property> 
 
<property> 
 <name>javax.jdo.option.ConnectionURL</name> 
 <value>jdbc:mysql://localhost/hive_remote?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> 
</configuration> 

附:

安装mysql

Yum install mysql-server -y

修改mysql权限:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;

flush privileges;

远程元数据数据库服务模式

安装规划

node1:mysql

node2:metastore server

node3:metastore client

1.安装mysql

yum install mysql-server -y

修改mysql权限:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;

flush privileges;

centos7阿里镜像源无法安装 mysql-server

2.服务和客户端安装

2.1Remote一体

这种存储方式需要在远端服务器运行一个mysql服务器,并且需要在Hive服务器启动meta服务。

这里用mysql的测试服务器,ip位192.168.1.214,新建hive_remote数据库,字符集位latine1

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
 
<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> 
 
<property> 
 <name>hive.metastore.uris</name> 
 <value>thrift://192.168.1.188:9083</value> 
</property> 
 
</configuration> 

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

2.2Remote分开

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

服务端配置文件

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
 
<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> 

客户端配置文件

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
 
<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> 

3.启动hive服务端程序

注意这是前台启动

hive --service metastore 

4.客户端使用

直接使用hive命令即可

root@my188:~$ hive

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

hive> show tables;

OK

test_hive

Time taken: 0.736 seconds

hive>

客户端启动的时候要注意:

[ERROR] Terminal initialization failed; falling back to unsupported
java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
	at jline.TerminalFactory.create(TerminalFactory.java:101)

错误的原因: Hadoop jline版本和hive的jline不一致

解决方案:

cp apache-hive-1.2.1-bin/lib/jline-2.12.jar /opt/sxt/hadoop-2.6.5/share/hadoop/yarn/lib/

相关推荐

pyproject.toml到底是什么东西?(py trim)

最近,在Twitter上有一个Python项目的维护者,他的项目因为构建失败而出现了一些bug(这个特别的项目不提供wheel,只提供sdist)。最终,发现这个bug是由于这个项目使用了一个pypr...

BDP服务平台SDK for Python3发布(bdp数据平台)

下载地址https://github.com/imysm/opends-sdk-python3.git说明最近在开发和bdp平台有关的项目,用到了bdp的python的sdk,但是官方是基于p...

Python-for-Android (p4a):(python-for-android p4a windows)

一、Python-for-Android(p4a)简介Python-for-Android(p4a),一个强大的开发工具,能够将你的Python应用程序打包成可在Android设备上运行...

Qt for Python—Qt Designer 概览

前言本系列第三篇文章(QtforPython学习笔记—应用程序初探)、第四篇文章(QtforPython学习笔记—应用程序再探)中均是使用纯代码方式来开发PySide6GUI应用程序...

Python:判断质数(jmu-python-判断质数)

#Python:判断质数defisPrime(n):foriinrange(2,n):ifn%i==0:return0re...

为什么那么多人讨厌Python(为什么python这么难)

Python那么棒,为什么那么多人讨厌它呢?我整理了一下,主要有这些原因:用缩进替代大括号许多人抱怨Python完全依赖于缩进来创建代码块,代码多一点就很难看到函数在哪里结束,那么你就需要把一个函数拆...

一文了解 Python 中带有 else 的循环语句 for-else/while-else

在本文中,我们将向您介绍如何在python中使用带有else的for/while循环语句。可能许多人对循环和else一起使用感到困惑,因为在if-else选择结构中else正常...

python的numpy向量化语句为什么会比for快?

我们先来看看,python之类语言的for循环,和其它语言相比,额外付出了什么。我们知道,python是解释执行的。举例来说,执行x=1234+5678,对编译型语言,是从内存读入两个shor...

开眼界!Python遍历文件可以这样做

来源:【公众号】Python技术Python对于文件夹或者文件的遍历一般有两种操作方法,一种是至二级利用其封装好的walk方法操作:import osfor root,d...

告别简单format()!Python Formatter类让你的代码更专业

Python中Formatter类是string模块中的一个重要类,它实现了Python字符串格式化的底层机制,允许开发者创建自定义的格式化行为。通过深入理解Formatter类的工作原理和使用方法,...

python学习——038如何将for循环改写成列表推导式

在Python里,列表推导式是一种能够简洁生成列表的表达式,可用于替换普通的for循环。下面是列表推导式的基本语法和常见应用场景。基本语法result=[]foriteminite...

详谈for循环和while循环的区别(for循环语句与while循环语句有什么区别)

初九,潜龙勿用在刚开始使用python循环语句时,经常会遇到for循环和while循环的混用,不清楚该如何选择;今天就对这2个循环语句做深入的分析,让大家更好地了解这2个循环语句以方便后续学习的加深。...

Python编程基础:循环结构for和while

Python中的循环结构包括两个,一是遍历循环(for循环),一是条件循环(while循环)。遍历循环遍历循环(for循环)会挨个访问序列或可迭代对象的元素,并执行里面的代码块。foriinra...

学习编程第154天 python编程 for循环输出菱形图

今天学习的是刘金玉老师零基础Python教程第38期,主要内容是python编程for循环输出菱形※。(一)利用for循环输出菱形形状的*号图形1.思路:将菱形分解为上下两个部分三角形图案,分别利用...

python 10个堪称完美的for循环实践

在Python中,for循环的高效使用能显著提升代码性能和可读性。以下是10个堪称完美的for循环实践,涵盖数据处理、算法优化和Pythonic编程风格:1.遍历列表同时获取索引(enumerate...