Hive笔记-01 架构概述

news2025/7/17 7:52:04

文章目录

  • 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查询语句类似

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/5292.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cmd常用命令行

前言 最近在看《深入剖析Tomcat》&#xff0c;其中涉及了常见的dos命令&#xff0c;这里做一些简单记录&#xff0c;其实跟linux命令很像。 案例 .bat&#xff1a;批处理文件 rem&#xff1a;用于注释&#xff0c;解释器不会执行以rem命令开始的行 - pause&#xff1a;暂停…

Executors工具类的相关方法

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生。本篇将记录创建线程池的Executors工具类里面的方法&#xff0c;方便加深知识印象和复习使用。 本篇文章记录的基础知识&#xff0c;适合在学Java的小白&#xff0c;也适合复习中&#xff0c;面试中的大佬&a…

Matlab之机载雷达系统中的空时自适应处理(STAP)技术(附源码)

目录 一、介绍 二、系统设置 2.1 天线定义 2.2 雷达设置 2.3 目标 2.4 杂波 2.5 传播路径 三、模拟循环 3.1真实目标范围、角度和多普勒 3.2 使用 DPCA 消除器进行杂波抑制 ​四、总结 五、程序 本例简要介绍了空时自适应处理&#xff08;STAP&#xff09;技术&…

【C++】模板进阶 —— 非类型模板参数 | 特化 | 模板的分离编译

&#x1f308;欢迎来到C专栏~~模板进阶 (꒪ꇴ꒪(꒪ꇴ꒪ )&#x1f423;,我是Scort目前状态&#xff1a;大三非科班啃C中&#x1f30d;博客主页&#xff1a;张小姐的猫~江湖背景快上车&#x1f698;&#xff0c;握好方向盘跟我有一起打天下嘞&#xff01;送给自己的一句鸡汤&…

java线程基础

最近&#xff0c;想弄一个雪花飘落&#xff0c;结果&#xff0c;搞了两三个小时没弄出来。主要是雪花飘落可能需要用到线程。有人是通过一个雪花去实现&#xff0c;然后通过集合去实现漫天雪花。不管怎么说&#xff0c;做开发&#xff0c;可能线程学习也是一块绕不过去的大山。…

【JavaWeb】jsp

文章目录⭐️ 一.jsp概念及其作用⭐️ 二.jsp的本质⭐️三.jsp的三种语法⭐️四.jsp的九大内置对象⭐️五.jsp四大域对象⭐️六.jsp中的out输出和response.getWriter输出的区别⭐️七.jsp的常用标签⭐️八.Listener监听器⭐️ 一.jsp概念及其作用 1.概念:jsp的全称是java serv…

SpringMVC框架中的异常处理机制

目录 1. 什么是异常处理&#xff1f; 2. SpringMVC框架中的异常处理机制是什么&#xff1f; 3. SpringMVC框架汇中实现异常处理的实现步骤 4. SpringMVC框架出现异常时候的处理过程 5. 附手写代码&#xff0c;并含有注释 1. 什么是异常处理&#xff1f; http://t.csdn.cn/x…

【线性代数】四、二次型

第四章 二次型 文章目录第四章 二次型一、二次型定义二、合同变换1.线性变换2.矩阵合同标准型和规范型3.惯性定理三、正定二次型一、二次型定义 如果系数aij全为实数&#xff0c;那么为实二次型。上述二次型展开式可表示用矩阵为 可以看出&#xff0c;二次型矩阵A是一个对称矩…

做了8年前端,细说那些曾经让你浴霸不能的后端

说明&#xff1a;本文并没有针对某位大哥大姐&#xff0c;看见如果觉得好笑的就笑一笑&#xff0c;如果被戳中了你的过往&#xff0c;请不要气愤&#xff0c;人活着嘛&#xff0c;开心最重要。 A 曾经有个后端&#xff0c;我要调一个详情。他告诉我传id&#xff0c;然后测试的…

LeetCode 790. 多米诺和托米诺平铺

LeetCode 790. 多米诺和托米诺平铺一、题目&#xff08;经典动态规划&#xff09;二、解题思路1. 铺满2*N面积&#xff1a;2. 对于第i列&#xff0c;有4种情况&#xff1a;3. N-1 -> N 转移方程&#xff1a;三、核心代码四、代码中存在的一些知识性问题1. 二层vector的定义、…

浅谈JVM

内存结构&#xff1a; 程序计数器&#xff08;寄存器&#xff09; 作用&#xff1a;记住下一条jvm指令的执行地址 特点&#xff1a; 是线程私有的 不会出现内存溢出 虚拟机栈 虚拟机栈&#xff1a;是描述java方法执行的内存模型&#xff0c;每个方法在执行的同时都会创建…

生信初学者必知的镜像设置

文章目录Ubuntu镜像conda镜像R语言镜像Python镜像Julia镜像国内网络问题很烂&#xff0c;大家都知道&#xff0c;github、pubmed这些网站经常访问不了&#xff01;如果你平常会用到Ubuntu、conda、R语言、Python、Julia&#xff0c; 那你肯定为安转各种包、库、软件而烦恼过&am…

​草莓熊python turtle绘图代码(玫瑰花版)附源代码

​草莓熊python turtle绘图代码&#xff08;玫瑰花版&#xff09;附源代码 目录 一、前言 二、草莓熊手持玫瑰花成品效果图 三、代码演示方法和代码命令解释 四、草莓熊手持的玫瑰花源代码 五、相关资源图片 六、我的“草莓熊python turtle绘图&#xff08;玫瑰花版&…

Sparse编码和字典学习(1)基础知识和python简单实现

Sparse编码和字典学习1. 稀疏表示与字典学习简介1.1 Motivation1.2 字典学习的流程1.3 字典学习的数学模型2 python实现2.1字典学习2.1 稀疏性统计和误差计算参考资料和文献1. 稀疏表示与字典学习简介 1.1 Motivation 字典学习的思想应该源来实际生活中的字典的概念。字典是前…

谷粒商城 -- 项目环境搭建

注&#xff1a;以下的项目环境搭建过程&#xff0c;适用于所有的微服务项目的环境搭建&#xff0c;以后做微服务项目的时候看着这个笔记进行搭建环境即可 一、项目微服务划分图 二、Linux安装Docker 三、Docker安装mysql / redis 四、Vscode下载安装 五、谷粒项目结构创建&a…

碎片化学习Python的又一神作:termux

什么是Termux&#xff1f; 据Termux官网介绍&#xff0c;Termux是一个Android终端仿真器和Linux环境应用程序&#xff0c;运行于内部存储&#xff08;不在SD卡上&#xff09;&#xff0c;无需root或设置。 系统自动进行最小化安装&#xff0c;使用APT软件包管理器安装其它软件…

【成为红帽工程师】第三天 web服务器

目录 一、www简介 二、网址及http简介 三、www服务器的类型 四、www服务器的基本配置 五、相关实验 一、www简介 &#xff08;一&#xff09;什么是www www是world wide web的缩写&#xff0c;也就是全球信息广播的意思。通常说的上网就是使用www来查询 用户所需要的信息…

【十问十答】回归模型知识点

1. 线性回归的假设是什么 线性回归有四个假设&#xff1a; 线性&#xff1a;自变量&#xff08;x&#xff09;和因变量&#xff08;y&#xff09;之间应该存在线性关系&#xff0c;这意味着x值的变化也应该在相同方向上改变y值。 独立性&#xff1a;特征应该相互独立&#xf…

[附源码]java毕业设计大学生足球预约信息

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【Java基础】泛型+反射+枚举+Lambda表达式 知识点总结

【大家好&#xff0c;我是爱干饭的猿&#xff0c;本文重点介绍Java基础&#xff1a;泛型、反射、枚举、Lambda表达式知识点总结。 后续会继续分享其他重要知识点总结&#xff0c;如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下吧】 上一篇文章&#x…