Hive笔记-01 架构概述

2023-05-16

文章目录

  • 1.概述
  • 2.Metadata/Metastore的作用
  • 3 Metastore三种配置方式
    • 3.1 Hive配置参数说明
      • 3.1.1 基本配置参数
      • 3.1.2 其他配置参数
    • 3.2 内嵌模式(Embedded)
      • 3.2.1 hive-site.xml配置说明
      • 3.2.2 hive-site.xml配置样例
      • 3.2.3 启动方式
      • 3.2.4 缺点
    • 3.3 本地模式(Local)
      • 3.3.1 hive-site.xml配置说明
      • 3.3.2 hive-site.xml配置样例
      • 3.3.3 启动方式
      • 3.3.4 缺点
      • 3.3.5 备注
    • 3.4 远程模式(Remote)
      • 3.4.1 服务端hive-site.xml配置说明
      • 3.4.2 服务端hive-site.xml配置样例
      • 3.4.3 客户端hive-site.xml配置说明
      • 3.4.4 客户端hive-site.xml配置样例
      • 3.4.5 启动方式
        • 3.4.5.1 服务端启动方式
        • 3.4.5.2 客户端启动方式
  • 4 客户端
    • 4.1 第一代客户端Hive Client
    • 4.2 第二代客户端Hive Beeline Client
  • 5 元数据表
    • 5.1 TBLS(表的表头信息)表解释
    • 5.2 DBS(表db信息)表解释
    • 5.3 SDS(表存储格式相关内容)表解释
    • 5.4 columns\_v2(表字段详情)表解释
    • 5.5 table\_params(表附属信息)表解释
    • 5.6 元数据接口详解
    • 5.6.1 接口详解
      • 5.6.2 代码接口详解
      • 5.6.3 代码样例
  • 6 HiveServer2
    • 6.1 hive-site.xml配置说明
    • 6.2 hive-site.xml配置样例
    • 6.3 启动方式
    • 6.4 测试
    • 6.5 安全鉴权
  • 7 Hive内置服务
    • 7.1 hiveserver
    • 7.2 hwi
    • 7.3 cli

1.概述

Hive是最合适数据仓库应用程序的,其可以维护海量数据,而且可以对数据进行挖掘,然后形成意见和报告等。下图即是Hive与Hadoop交互的架构图:
在这里插入图片描述

Hive的发行版本中附带的模块有CLI,HWI(Hive的简单网页见面)以及通过JDBC,ODBC和Thrift服务器进行编程访问的几个模块。

另外基于Hive的发行版本一些厂商有额外的封装,如Karmasphere发布的一个商业产品、Cloudera提供的开源的Hue项目、以及Qubole提供的"Hive即服务"方式等.

  • Driver(驱动模块):所有的命令和查询都会进入到Driver,通过该模块对输入进行解析编译,对需求的计算进行优化,然后启动多个MapReduce任务(job)来执行。当启动MapReduce任务时,HIve本身不会生成Java代码。而是通过一个表示“job执行计划”的xml文件驱动内置的Mapper和Reducer模块。
  • Metastore(元数据存储)是一个独立的关系型数据库(通常是一个MySQL实例),其中保存则Hive的表模式和其他系统元数据。

2.Metadata/Metastore的作用

Metadata即元数据,包含用Hive创建的database、tabel等的元信息。元数据存储在关系型数据库中。如Derby、MySQL等。
  
Metastore的作用是客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore服务即可。

3 Metastore三种配置方式

由于元数据不断地修改、更新,所以Hive元数据不适合存储在HDFS中,一般存在RDBMS中。

3.1 Hive配置参数说明

3.1.1 基本配置参数

请参见配置Hive下的hivemetstore -site.xml文档。

Configuration ParameterDescription
javax.jdo.option.ConnectionURL用于包含元数据的数据存储的JDBC连接字符串
javax.jdo.option.ConnectionDriverName包含元数据的数据存储的JDBC驱动程序类名
hive.metastore.urisHive连接到这些uri中的一个,向远端Metastore(以逗号分隔的uri列表)发送元数据请求。
hive.metastore.local本地或远端metastore(从Hive 0.10移除:如果hive.metastore.uri为空,则假设本地模式为远端模式)
hive.metastore.warehouse.dir本机表的默认位置的URI

Hive metastore是无状态的,因此可以有多个实例来实现高可用性。使用hive.metastore.uri可以指定多个远程元数据连接。Hive会默认使用列表中的第一个,但会在连接失败时随机选择一个,并尝试重新连接。

3.1.2 其他配置参数

以下metastore配置参数是从旧文档中继承下来的,没有保证它们仍然存在。Hive当前的配置选项请参见HiveConf Java类,Metastore和Hive Metastore安全部分的语言手册的Hive配置属性的用户友好的描述Metastore参数。

Configuration ParameterDescriptionDefault Value
hive.metastore.metadb.dir文件存储元数据基目录的位置。(在0.4.0中HIVE-143删除了该功能。)
hive.metastore.rawstore.impl实现org.apache.hadoop.hive.metastore.rawstore接口的类名。该类用于存储和检索原始元数据对象,如表、数据库。(Hive 0.8.1及以上版本)
org.jpox.autoCreateSchema如果模式不存在,则在启动时创建必要的模式。(模式包括表、列等等。)创建一次后设置为false。
org.jpox.fixedDatastore数据存储模式是否固定。
datanucleus.autoStartMechanism是否在启动时初始化。
ive.metastore.ds.connection.url.hook用于检索JDO连接URL的钩子的名称。如果为空,则使用javax.jdo.option.ConnectionURL中的值作为连接URL。(Hive 0.6及以上版本)
hive.metastore.ds.retry.attempts如果出现连接错误,重试调用备份数据存储的次数。1
hive.metastore.ds.retry.interval数据存储重试之间的毫秒数。1000
hive.metastore.server.min.threadsThrift服务器池中工作线程的最小数量。200
hive.metastore.server.max.threadsThrift服务器池中的最大工作线程数。100000 since Hive 0.8.1
hive.metastore.filter.hookMetastore钩子类,用于在客户端进一步过滤元数据读取结果。(Hive 1.1.0及以上版本)
hive.metastore.portHive metastore监听端口。9083

3.2 内嵌模式(Embedded)

内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。数据库和Metastore服务都嵌入在主Hive Server进程中。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。

在这里插入图片描述

3.2.1 hive-site.xml配置说明

Config ParamConfig ValueComment
javax.jdo.option.ConnectionURLjdbc:derby:;databaseName= ../build/test/junit_metastore_db;create=trueDerby数据库位于hive/trunk/build…
javax.jdo.option.ConnectionDriverNameorg.apache.derby.jdbc.EmbeddedDriverDerby自带了JDBC驱动类
hive.metastore.warehouse.dirfile://${user.dir}/../build/ql/test/data/warehouse单元测试数据放在本地文件系统中

3.2.2 hive-site.xml配置样例

<!-- 本地模式不需要配置 -->
<property>
  <name>hive.metastore.uris</name>
  <value/>
</property>

<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.warehouse.dir</name>
  <value>/user/hive/warehouse</value>
</property>

3.2.3 启动方式

解压hive安装包,执行bin/hive启动即可使用

3.2.4 缺点

不同路径启动hive,每一个hive拥有一套自己的元数据,无法共享。

3.3 本地模式(Local)

如果要支持多会话(以及多租户),需要使用一个独立的数据库,这种配置方式成为本地配置。本地模式采用外部数据库来存储元数据,目前支持的数据库有:MySQL、Postgres、Oracle、MS SQL Server.在这里我们使用MySQL。

本地模式同内嵌模式一样,不需要单独起Metastore服务,用的是跟hive在同一个进程里的Metastore服务。也就是说当你启动一个hive 服务,里面默认会帮我们启动一个Metastore服务。但是不一样的是,Metastore连接的确实另一个进程中运行的数据库,在同一台机器上或者远程机器上。

在这里插入图片描述

3.3.1 hive-site.xml配置说明

Config ParamConfig ValueComment
javax.jdo.option.ConnectionURLjdbc:mysql://<host name>/<database name>?createDatabaseIfNotExist=true元数据存储在MySQL服务器中
javax.jdo.option.ConnectionDriverNamecom.mysql.jdbc.DriverMySQL JDBC 驱动类
javax.jdo.option.ConnectionUserName<user name>连接MySQL服务的用户名
javax.jdo.option.ConnectionPassword<password>连接MySQL服务的密码
hive.metastore.urisnot needed because this is local store
hive.metastore.localtrue这是本地存储(在Hive 0.10中移除,参见配置描述部分)
hive.metastore.warehouse.dir<base hdfs path>指向HDFS中非外部Hive表的默认位置。

3.3.2 hive-site.xml配置样例

<property>
	<name>javax.jdo.option.ConnectionURL</name>
	<value>jdbc:mysql://127.0.0.1:3306/hive?createDatabaseIfNotExit=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>root</value>
</property>
<property>
  <name>hive.metastore.uris</name>
  <value></value>
  <description>指向的是运行metastore服务的主机,这是hive客户端配置,metastore服务不需要配置</description>
 </property>
<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>/user/hive/warehouse</value>
  <description>hive表的默认存储路径,为HDFS的路径location of default database for the warehouse</description>
</property>

3.3.3 启动方式

解压hive安装包,执行bin/hive启动即可使用

3.3.4 缺点

每启动一次hive服务,都内置启动了一个metastore。

3.3.5 备注

如果选择 MySQL 作为 MetaStore 存储数据库,需要提前将MySQL的驱动包拷贝到 $HIVE_HOME/lib目录下。

JDBC 连接驱动类视情况决定选择com.mysql.cj.jdbc.Driver 还是 com.mysql.jdbc.Driver。

3.4 远程模式(Remote)

远程模式下,需要单独起Metastore服务,然后每个客户端都在配置文件里配置连接到该Metastore服务。MetaStore服务和Hive服务运行在不同进程中。CLI、HiveServer2、HCatalog、Impala 以及其他进程使用 Thrift API(使用 hive.metastore.uris 属性配置)与 MetaStore 服务通信。MetaStore 服务通过 JDBC 与 MetaStore 数据库进行通信(使用 javax.jdo.option.ConnectionURL 属性配置):

在这里插入图片描述

3.4.1 服务端hive-site.xml配置说明

Config ParamConfig ValueComment
javax.jdo.option.ConnectionURLjdbc:mysql://<host name>/<database name>?createDatabaseIfNotExist=truemetadata is stored in a MySQL server
javax.jdo.option.ConnectionDriverNamecom.mysql.jdbc.DriverMySQL JDBC driver class
javax.jdo.option.ConnectionUserName<user name>user name for connecting to MySQL server
javax.jdo.option.ConnectionPassword<password>password for connecting to MySQL server
hive.metastore.warehouse.dir<base hdfs path>默认hive表路径
hive.metastore.thrift.bind.host<host_name>Host name to bind the metastore service to. When empty, “localhost” is used. This configuration is available Hive 4.0.0 onwards.

从Hive 3.0.0 (Hive -16452)开始,metastore数据库存储了一个GUID,可以通过Thrift API get_metastore_db_uuid被metastore客户端查询,以识别后端数据库实例。HiveMetaStoreClient可以通过getMetastoreDbUuid()方法访问这个API。

3.4.2 服务端hive-site.xml配置样例

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

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

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

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

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

<property>
  <name>hive.metastore.port</name>
  <value>9083</value>
</property>

3.4.3 客户端hive-site.xml配置说明

Config ParamConfig ValueComment
hive.metastore.uristhrift://<host_name>:<port>Thrift metastore服务器的主机和端口。如果指定了hive.metastore.thrift.bind.host, host应该与该配置相同。在动态服务发现配置参数中了解更多信息。如果有多个metastore服务器,将URL之间用逗号分隔,metastore服务器URL的格式为thrift://127.0.0.1:9083
hive.metastore.localfalseMetastore是远程的。注意:从Hive 0.10开始不再需要。设置hive.metastore.uri就足够了。
hive.metastore.warehouse.dir<base hdfs path>指向HDFS中非外部Hive表的默认位置。

3.4.4 客户端hive-site.xml配置样例

<!-- 远程模式需要配置 9083是默认监听端口号 -->
<property>  
    <name>hive.metastore.uris</name>
    <value>thrift://127.0.0.1:9083,thrift://127.0.0.1:9084</value>
    <description>指向的是运行metastore服务的主机</description>
</property>

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

3.4.5 启动方式

远程模式的示意图如下:

image.png

3.4.5.1 服务端启动方式

服务器端启动一个MetaStoreServer

# 执行此命令前,需要先将hive/bin加入环境变量 /etc/profile中,eg:export PATH=$PATH:/usr/local/hive/bin
# 如果xml中已经配置了hive.metastore.port,则可以不用 -p <port_num>
# 如果不加端口默认启动:`hive --service metastore`,则默认监听端口是:9083
hive --service metastore -p <port_num>

# 后台启动 后台启动的情况下,如果想关闭metastore服务 使用jps查看进程(显示RunJar的进程),kill -9 进程号即可。
nohup hive --service metastore >/dev/null 2>&1 &

3.4.5.2 客户端启动方式

客户端利用Thrift协议通过MetaStoreServer访问元数据库。

hive
# 或
hive --service

4 客户端

一般的情况下,都采用远程模式部署Hive的Metastore服务。使用Hive自带的客户端进行连接访问。接下来,我们重点讲解下客户端。

4.1 第一代客户端Hive Client

在hive安装包的bin目录下,有hive提供的第一代客户端 bin/hive。使用该客户端可以访问hive的metastore服务。从而达到操作hive的目的。即在3.4节中介绍的客户端。

4.2 第二代客户端Hive Beeline Client

hive经过发展,推出了第二代客户端beeline,但是beeline客户端不是直接访问metastore服务的,而是需要单独启动hiveserver2服务。

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

nohup hive --service metastore &

nohup hive --service hiveserver2 &

在所要访问Hive的客户机上使用beeline客户端进行连接访问。

beeline

5 元数据表

表名说明天联健
DBS元数据库信息。存放DB的HDFS路径信息DB_ID
TBLS所有hive表的基本信息TBL_ID ,SD_ID, DB_ID
TALE PARAM表级属性,如是否外部表,表注释等TBL_ID
COLUMNS_V2Hive表字段信息(字段注释,字段名,字段类型,字段序号)CD_ID
SDS所有hive表、表分区所对应的hdfs数据目录和数据格式SD_ID,SERDE_ID
SERDESHive表的序列化类型SERDE ID
SERDE_PARAM序列化反序列化信息,如行分隔符、列分隔符、NULL 的表示字符等SERDE_ID
PARTITIONSHive表分区信息PART_ID,SD_ID,TEL_ID
PARTITION_KEYSHive分区表分区键TBL_ID
PARTITION_KEY_VALSHive表分区名(键值)PRT_ID
SEQUENCE_TAELE保有Hive对象的下一个可用ID,包括数据库,表。字段, 分区等对象的下一个ID.默认ID每次+5SEQUENCE_NAME,NEXT_VAL

5.1 TBLS(表的表头信息)表解释

英文名类型中文注释
TBL_IDbigint(20)全表唯一主键
CREATE_TIMEint(11)表创建时间,格式是到秒的时间戳
DB_IDbigint(20)DBS 表的id
LAST_ACCESS_TIMEint(11)
OWNERvarchar(767)创建表的用户名
OWNER_TYPEvarchar(10)
RETENTIONint(11)
SD_IDbigint(20)
TBL_NAMEvarchar(256)表名
TBL_TYPEvarchar(128)类型:EXTERNAL_TABLE 外部表;MANAGED_TABLE内部表;VIRTUAL_VIEW 试图
VIEW_EXPANDED_TEXTmediumtext如果是试图的话,试图的SQL语句
VIEW_ORIGINAL_TEXTmediumtext
IS_REWRITE_ENABLEDbit(1)

5.2 DBS(表db信息)表解释

英文名类型中文注释
DB_IDbigint(20)唯一主键id
DESCVarchar(4000)
DB_LOCATION_URIvarchar(4000)表所属db的路径地址
NAMEvarchar(128)表所属db的名字
OWNER_NAMEvarchar (128)表所属账号名字
OWNER_TYPEvarchar (10)
CTLG_NAMEvarchar(256)

5.3 SDS(表存储格式相关内容)表解释

英文名类型中文注释
SD_IDbigint(20)唯一主键id
CD_IDbigint(20)
INPUT_FORMATvarchar(4000)Input格式
IS_COMPRESSEDbit(1)
IS_STOREDASSUBDIRECTORIESbit(1)
locationvarchar(4000)数据存储路径
NUM_BUCKETSInt(11)
OUTPUT_FORMATvarchar(4000)Output格式
SERDE_IDbigint(20)

5.4 columns_v2(表字段详情)表解释

英文名类型中文注释
CD_IDbigint(20)跟sds表的cd_id关联
COMMENTvarchar(4000)注释信息
COLUMN_NAMEbit(1)列名
TYPE_NAMEbit(1)列值类型
INTEGER_IDXvarchar(4000)列在表中的顺序

5.5 table_params(表附属信息)表解释

英文名类型中文注释
TBL_IDbigint(20)跟tbls表的tbl_id关联
PARAM_KEYvarchar(4000)comment –> 表注释;EXTERNAL –> 是否是外部表;parquet.compression –> 是否压缩;transient_lastDdlTime –> 最近一次ddl时间(时间戳)
PARAM_VALUEbit(1)Key对的value值

5.6 元数据接口详解

5.6.1 接口详解

官方hive接口文档地址:https://hive.apache.org/javadocs/ ,在这个上面可以选择对应的hive版本之后再详细看里面的接口。

5.6.2 代码接口详解

由于接口比较多,挑选几个重要的详细说明下

//获取所有的数据库
getAllDatabases
//获取所有的表名
getAllTables
//获取分区信息
getPartition
//获取schema信息
getSchema
//获取函数信息
getFunctions

5.6.3 代码样例

import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.metastore.HiveMetaStoreClient;
import org.apache.hadoop.hive.metastore.api.FieldSchema;
import org.apache.hadoop.hive.metastore.api.MetaException;
import org.apache.hadoop.hive.metastore.api.Table;
import org.apache.thrift.TException;
import java.util.List;
 
 
public class HiveMetastoreApi {
    public static void main(String[] args) {
        HiveConf hiveConf = new HiveConf();
        hiveConf.addResource("hive-site.xml");
 
        HiveMetaStoreClient client = null;
        try {
            client = new HiveMetaStoreClient(hiveConf);
        } catch (MetaException e) {
            e.printStackTrace();
        }
 
 
        //获取数据库信息
        List<String> tablesList = null;
        try {
            tablesList = client.getAllTables("db_name");
        } catch (MetaException e) {
            e.printStackTrace();
        }
 
        System.out.print("db_name 数据所有的表:  ");
        for (String s : tablesList) {
            System.out.print(s + "\t");
        }
        System.out.println();
 
        //获取表信息
        System.out.println("db_name.table_name 表信息: ");
        Table table = null;
        try {
            table = client.getTable("db_name", "table_name");
        } catch (TException e) {
            e.printStackTrace();
        }
 
        List<FieldSchema> fieldSchemaList = table.getSd().getCols();
        for (FieldSchema schema : fieldSchemaList) {
            System.out.println("字段: " + schema.getName() + ", 类型: " + schema.getType());
        }
        client.close();
    }
}

6 HiveServer2

beeline客户端是通过hiveserver2服务以JDBC的方式连接到hive的。此种方式也是java,Python等程序中连接hive的途径。

6.1 hive-site.xml配置说明

Hiveserver2允许在配置文件hive-site.xml中进行配置管理,具体的参数为:

hive.server2.thrift.min.worker.threads– 最小工作线程数,默认为5。
hive.server2.thrift.max.worker.threads – 最小工作线程数,默认为500。
hive.server2.thrift.port– TCP 的监听端口,默认为10000。
hive.server2.thrift.bind.host– TCP绑定的主机,默认为localhost

也可以设置环境变量HIVE_SERVER2_THRIFT_BIND_HOST和HIVE_SERVER2_THRIFT_PORT覆盖hive-site.xml设置的主机和端口号。从Hive-0.13.0开始,HiveServer2支持通过HTTP传输消息,该特性当客户端和服务器之间存在代理中介时特别有用。与HTTP传输相关的参数如下:

hive.server2.transport.mode – 默认值为binary(TCP),可选值HTTP。
hive.server2.thrift.http.port– HTTP的监听端口,默认值为10001。
hive.server2.thrift.http.path – 服务的端点名称,默认为 cliservice。
hive.server2.thrift.http.min.worker.threads– 服务池中的最小工作线程,默认为5。
hive.server2.thrift.http.max.worker.threads– 服务池中的最小工作线程,默认为500。

默认情况下,HiveServer2以提交查询的用户执行查询(true),如果hive.server2.enable.doAs设置为false,查询将以运行hiveserver2进程的用户运行。为了防止非加密模式下的内存泄露,可以通过设置下面的参数为true禁用文件系统的缓存:

fs.hdfs.impl.disable.cache – 禁用HDFS文件系统缓存,默认值为false。
fs.file.impl.disable.cache – 禁用本地文件系统缓存,默认值为false。

6.2 hive-site.xml配置样例

通过hiveServer/hiveServer2启动Thrift服务,客户端连接Thrift服务访问Hive数据库(JDBC,JAVA等连接Thrift服务访问Hive)。

<property>
	<name>hive.server2.thrift.port</name>
	<value>10000</value>
	<description>指定 hiveserver2 连接的端口号</description>
</property>
<property>
	<name>hive.server2.thrift.bind.host</name>
	<value>hadoop-master</value>
	<description>hiveserver2服务绑定的主机</description>
</property>
<property>
	<name>hive.server2.enable.doAs</name>
	<value>false</value>
	<description>
	  Setting this property to true will have HiveServer2 execute
	  Hive operations as the user making the calls to it.
	    如果为True:Hive Server会以提交用户的身份去执行语句
	    如果为False:会以hive server daemon的admin user来执行语句
	</description>
</property>
<property>
    <name>hive.server2.thrift.client.user</name>
    <value>root</value>
    <description>Username to use against thrift client</description>
  </property>
  <property>
    <name>hive.server2.thrift.client.password</name>
    <value>123456</value>
    <description>Password to use against thrift client</description>
  </property>

这两项配置其实是针对HiveServer2的,也就是针对服务端的,对于客户端是通过JDBC来配置主机和端口,比如jdbc:hive2://hadoop-master:10000

因此,假如hive.server2.thrift.bind.host配置为hadoop-master,而此时在hadoop-slave1上通过hive --service hiveserver2这个命令来启动的话,会提示错误:


org.apache.thrift.transport.TTransportException: Could not create ServerSocket on address hadoop-slave1/192.168.133.162:10000.
        at org.apache.thrift.transport.TServerSocket.<init>(TServerSocket.java:109)
        at org.apache.thrift.transport.TServerSocket.<init>(TServerSocket.java:91)
        at org.apache.thrift.transport.TServerSocket.<init>(TServerSocket.java:87)
        at org.apache.hive.service.auth.HiveAuthFactory.getServerSocket(HiveAuthFactory.java:241)
        at org.apache.hive.service.cli.thrift.ThriftBinaryCLIService.run(ThriftBinaryCLIService.java:66)
        at java.lang.Thread.run(Thread.java:748)
2021-08-02 13:02:34,399 INFO  [Thread-3]: server.HiveServer2 (HiveStringUtils.java:run(709)) - SHUTDOWN_MSG: 

也就是无法在hadoop-slave1上创建ServerSocket。而如果把hive.server2.thrift.bind.host配置为0.0.0.0,或者不配置,那么在任何一个主机上都能顺利启动HiveServer2

6.3 启动方式

启动Thrift服务:hive --service hiveserver2

6.4 测试

测试Thrift服务:新开一个命令行窗口,执行beeline命令。此时提示需要用户密码

root@hadoop-master:~# beeline
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Beeline version 2.3.9 by Apache Hive
beeline> !connect jdbc:hive2://hadoop-master:10000
Connecting to jdbc:hive2://hadoop-master:10000
Enter username for jdbc:hive2://hadoop-master:10000: 

修改hadoop 配置文件 etc/hadoop/core-site.xml,加入如下配置项

<property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
</property>
<property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
</property>
  • 重启hadoop
  • 启动hive

重新登陆测试:

root@hadoop-master:~# beeline
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Beeline version 2.3.9 by Apache Hive
beeline> !connect jdbc:hive2://hadoop-master:10000
Connecting to jdbc:hive2://hadoop-master:10000
Enter username for jdbc:hive2://hadoop-master:10000: root  # 用户名使用root
Enter password for jdbc:hive2://hadoop-master:10000:       # 密码无,直接回车即可
Connected to: Apache Hive (version 2.3.9)
Driver: Hive JDBC (version 2.3.9)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://hadoop-master:10000> show databases;
+----------------+
| database_name  |
+----------------+
| default        |
| testdb         |
+----------------+
2 rows selected (0.812 seconds)
0: jdbc:hive2://hadoop-master:10000>
0: jdbc:hive2://hadoop-master:10000> 
0: jdbc:hive2://hadoop-master:10000> !quit   # 退出
Closing: 0: jdbc:hive2://hadoop-master:10000

6.5 安全鉴权

上节中为了快速验证,使用root免密码直接登录,这样在生产环境是不安全的。本节主要介绍下如何进行用户密码登录。
(待补充)

7 Hive内置服务

执行bin/hive --service help 如下:

root@hadoop-master:~# hive --service help
Usage ./hive <parameters> --service serviceName <service parameters>
Service List: beeline cleardanglingscratchdir cli hbaseimport hbaseschematool help hiveburninclient hiveserver2 hplsql jar lineage llap llapdump 
	llapstatus metastore metatool orcfiledump rcfilecat schemaTool version 
Parameters parsed:
  --auxpath : Auxiliary jars 
  --config : Hive configuration directory
  --service : Starts specific service/component. cli is default
Parameters used:
  HADOOP_HOME or HADOOP_PREFIX : Hadoop install directory
  HIVE_OPT : Hive options
For help on a particular service:
  ./hive --service serviceName --help
Debug help:  ./hive --debug --help
root@hadoop-master:~#

我们可以看到上边输出项Server List,里边显示出Hive支持的服务列表,beeline cli help hiveserver2 hwi jar lineage metastore metatool orcfiledump rcfilecat 等。

下面介绍最有用的一些服务
1、cli:是Command Line Interface 的缩写,是Hive的命令行界面,用的比较多,是默认服务,直接可以在命令行里使用

2、hiveserver:这个可以让Hive以提供Thrift服务的服务器形式来运行,可以允许许多个不同语言编写的客户端进行通信,使用需要启动HiveServer服务以和客户端联系,我们可以通过设置HIVE_PORT环境变量来设置服务器所监听的端口,在默认情况下,端口号为10000,这个可以通过以下方式来启动Hiverserver:

bin/hive --service hiveserver -p 10002

其中-p参数也是用来指定监听端口的

3、hwi:其实就是hive web interface的缩写它是hive的web借口,是hive cli的一个web替代方案

4、jar:与hadoop jar等价的Hive接口,这是运行类路径中同时包含Hadoop 和Hive类的Java应用程序的简便方式

5、metastore:在默认的情况下,metastore和hive服务运行在同一个进程中,使用这个服务,可以让metastore作为一个单独的进程运行,我们可以通过METASTOE——PORT来指定监听的端口号

7.1 hiveserver

新版中此服务已经被移除,这里还是讲解下hiveServer/HiveServer2的区别。

两者都允许远程客户端使用多种编程语言,通过HiveServer或者HiveServer2,客户端可以在不启动CLI的情况下对Hive中的数据进行操作,连这个和都允许远程客户端使用多种编程语言如java,python等向hive提交请求,取回结果(从hive0.15起就不再支持hiveserver了)。

HiveServer或者HiveServer2都是基于Thrift的,但HiveSever有时被称为Thrift server,而HiveServer2却不会。既然已经存在HiveServer,为什么还需要HiveServer2呢?这是因为HiveServer不能处理多于一个客户端的并发请求,这是由于HiveServer使用的Thrift接口所导致的限制,不能通过修改HiveServer的代码修正。因此在Hive-0.11.0版本中重写了HiveServer代码得到了HiveServer2,进而解决了该问题。HiveServer2支持多客户端的并发和认证,为开放API客户端如JDBC、ODBC提供更好的支持。

HiveServer versionConnection URLDriver Class
HiveServer2jdbc:hive2://:org.apache.hive.jdbc.HiveDriver
HiveServerjdbc:hive://:org.apache.hadoop.hive.jdbc.HiveDriver

7.2 hwi

Hive 2.0 以后才支持Web UI的 bin/hive –service hwi (& 表示后台运行)     

用于通过浏览器来访问hive,感觉没多大用途,浏览器访问地址是:127.0.0.1:9999/hwi

7.3 cli

Hive 命令行模式

进入hive安装目录,输入bin/hive的执行程序,或者输入hive –service cli,用于linux平台命令行查询,查询语句基本跟mysql查询语句类似

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive笔记-01 架构概述 的相关文章

随机推荐

  • Gitlab的安装与配置

    安装开始时 xff0c 需确认服务器最小配置是2核4G xff0c 因为gitlab软件比较大 1 配置yum源 xff1a vim etc yum repos d gitlab repo gitlab name 61 gitlab ce
  • Error creating bean with name ‘org.springframework.aop.aspectj.AspectJPointcutAdvisor#0

    问题 xff1a nested exception is org springframework beans factory BeanCreationException Error creating bean with name 39 or
  • Vue前端项目开发页面(二)

    前端界面开发 开发工具版本 64 vue cli 4 5 13 新建Login vue登陆页 1 在 vue exemples 项目 xff0c 选中components目录右键 New Vue Component xff0c 名称为 Lo
  • SpringBoot整合WebSocket

    概述 HTTP 协议是一种无状态的 无连接的 单向的应用层协议 它采用了请求 响应模型 通信请求只能由客户端发起 xff0c 服务端对请求做出应答处理 WebSocket和HTTP一样 xff0c 都是一种网络通信协议 比起HTTP只能由客
  • SpringBoot整合MybatisPlus使用IPage实现分页

    概述 MybatisPlus 提供了分页的功能 IPage内部原理是基于拦截器 xff0c 但是这个拦截的是方法以及方法中的参数 xff0c 这个也会判断是否是查询操作 如果是查询操作 xff0c 才会进入分页的处理逻辑 进入分页逻辑处理后
  • SpringBoot统一异常处理

    概述 SpringBoot 提供了 64 ControllerAdvice 64 RestControllerAdvice 注解可以实现统一异常处理 xff0c 只需要在定义异常类加上以上注解即可 自定义异常处理 定义统一异常处理 span
  • 萌新学习算法——并查集基础

    并查集 在算法设计中 xff0c 将一个集合和另外一个集合合并时 xff0c 就会用到并查集 假如不用并查集 xff0c 你可能会用到集合和列表来实现 xff0c 这样会使代码看起来很复杂 xff0c 而且执行效率不高 xff0c 下面用洛
  • linux中断及其底半部-s5p6818开发平台

    中断分为两个部分 xff1a 中断顶部 xff08 top half xff09 和中断底半部 xff08 bootom half xff09 一 中断顶部 xff08 top half xff09 中断上半部需要处理一下三种情况 xff1
  • Windows如何查看.db数据库文件

    从android应用导出的 db文件 xff0c 想在Windows电脑端看 xff0c 可以用SQLite Expert Professional这个软件查看 xff0c 网上说用FireFox的插件sqlite manager xff0
  • Ubuntu工具-01 UEX

    UltraEdit是Windows旗下一款流行的老牌文本 HEX编辑器 xff08 非开源 xff09 UltraEdit正被移植到Linux平台 该移植名为UEX xff0c 意即UltraEdit for Linux UltraEdit
  • Ubuntu工具-2 OBS Studio

    文章目录 1 下载并安装1 1 Flathub安装1 2 Snap安装1 3 PPA源方式安装1 3 1 检查OpenGL版本 xff0c 其版本必须高于 96 3 3 96 1 3 2 安装虚拟摄像机驱动1 3 3 安装ffmpeg库1
  • Docker build创建指定容器镜像

    Docker build xff1a Build an image from a Dockerfile 按照Dockerfile文件所定义内容创建临时性容器 xff0c 把Docker中所定义的每行命令在临时容器中执行 xff0c 然后生成
  • Ubuntu工具-03 VLC

    文章目录 1 安装VLC Media Player的方法1 1 apt安装1 2 snap安装 xff08 未测试 xff09 2 启动VLC Media Player并设置为默认媒体播放器 VLC Media Player xff08 V
  • MySQL笔记-07 常用函数

    文章目录 1 数学函数1 1 ABS1 2 CEIL和CEILIN1 3 FLOOR1 4 MOD1 5 ROUND1 6 TRUNCATE 2 字符串函数2 1 CONCAT2 2 CONCAT WS2 3 INSERT2 4 LOWER
  • SpringMVC-01 Web基础介绍

    文章目录 1 CGI1 1 CGI原理1 2 输入 出1 3 环境变量1 3 1 与请求相关的环境变量1 3 2 与服务器相关的环境变量1 3 3 与客户端相关的环境变量1 3 4 详细说明1 3 4 1 REQUEST METHOD 1
  • SpringMVC-02 MVC模式介绍

    文章目录 1 Java Web开发模型2 JSP 43 JavaBean开发模型 xff08 model1 xff09 3 MVC开发模式 xff08 model2 xff09 3 1 MVC模式基础3 1 1 模型 视图 控制器各部分的作
  • 系统架构师-科目1考点

  • 系统架构师-科目2考点

  • 系统架构师-科目3考点

  • Hive笔记-01 架构概述

    文章目录 1 概述2 Metadata Metastore的作用3 Metastore三种配置方式3 1 Hive配置参数说明3 1 1 基本配置参数3 1 2 其他配置参数 3 2 内嵌模式 xff08 Embedded xff09 3