当前位置:首页 > CN2资讯 > 正文内容

hive单独服务器 the hive服务器中文

3天前CN2资讯

先解释一下几个名词:

  • metadata :hive元数据,即hive定义的表名,字段名,类型,分区,用户这些数据。一般存储关系型书库mysql中,在测试阶段也可以用hive内置Derby数据库。
  • metastore :hivestore服务端。主要提供将DDL,DML等语句转换为MapReduce,提交到hdfs中。
  • hiveserver2:hive服务端。提供hive服务。客户端可以通过beeline,jdbc(即用java代码链接)等多种方式链接到hive。
  • beeline:hive客户端链接到hive的一个工具。可以理解成mysql的客户端。如:navite cat 等。

其它语言访问hive主要是通过hiveserver2服务,HiveServer2(HS2)是一种能使客户端执行Hive查询的服务。HiveServer2可以支持对 HiveServer2 的嵌入式和远程访问,支持多客户端并发和身份认证。旨在为开放API客户端(如JDBC和ODBC)提供更好的支持。

会启动一个hive服务端默认端口为:10000,可以通过beeline,jdbc,odbc的方式链接到hive。hiveserver2启动的时候会先检查有没有配置hive.metastore.uris,如果没有会先启动一个metastore服务,然后在启动hiveserver2。如果有配置hive.metastore.uris。会连接到远程的metastore服务。这种方式是最常用的。部署在图如下:

Python连接Hive

Python3访问hive需要安装的依赖有:

  • pip3 install thrift
  • pip3 install PyHive
  • pip3 install sasl
  • pip3 install thrift_sasl

这里有一个Python访问Hive的工具类:

# -*- coding:utf-8 -*- from pyhive import hive class HiveClient(object): """docstring for HiveClient""" def __init__(self, host='hadoop-master',port=10000,username='hadoop',password='hadoop',database='hadoop',auth='LDAP'): """ create connection to hive server2 """ self.conn = hive.Connection(host=host, port=port, username=username, password=password, database=database, auth=auth) def query(self, sql): """ query """ with self.conn.cursor() as cursor: cursor.execute(sql) return cursor.fetchall() def insert(self, sql): """ insert action """ with self.conn.cursor() as cursor: cursor.execute(sql) # self.conn.commit() # self.conn.rollback() def close(self): """ close connection """ self.conn.close()

使用的时候,只需要导入,然后创建一个对象实例即可,传入sql调用query方法完成查询。

# 拿一个连接 hclient = hive.HiveClient() # 执行查询操作 ... # 关闭连接 hclient.close()

注意:在insert插入方法中,我将self.conn.commit()和self.conn.rollback()即回滚注释了,这是传统关系型数据库才有的事务操作,Hive中是不支持的。

Java连接Hive

Java作为大数据的基础语言,连接hive自然是支持的很好的,这里介绍通过jdbc和mybatis两种方法连接hive。

1. Jdbc连接

java通过jdbc连接hiveserver,跟传统的jdbc连接mysql方法一样。

需要hive-jdbc依赖:

<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>1.2.1</version> </dependency>

代码跟连接mysql套路一样,都是使用的DriverManager.getConnection(url, username, password):

@NoArgsConstructor @AllArgsConstructor @Data @ToString public class HiveConfigModel { private String url = "jdbc:hive2://localhost:10000"; private String username = "hadoop"; private String password = "hadoop"; } @Test public void test(){ // 初始化配置 HiveConfigModel hiveConfigModel = ConfigureContext.getInstance("hive-config.properties") .addClass(HiveConfigModel.class) .getModelProperties(HiveConfigModel.class); try { Connection conn = DriverManager.getConnection(hiveConfigModel.getUrl(), hiveConfigModel.getUsername(), hiveConfigModel.getPassword()); String sql = "show tables"; PreparedStatement preparedStatement = conn.prepareStatement(sql); ResultSet rs = preparedStatement.executeQuery(); List<String> tables = new ArrayList<>(); while (rs.next()){ tables.add(rs.getString(1)); } System.out.println(tables); } catch (SQLException e) { e.printStackTrace(); } }

在hive-jdbc-1.2.1.jar的META-INF下有个services目录,里面有个java.sql.Driver文件,内容是:

org.apache.hive.jdbc.HiveDriver

java.sql.DriverManager使用spi实现了服务接口与服务实现分离以达到解耦,在这里jdbc的实现org.apache.hive.jdbc.HiveDriver根据java.sql.Driver提供的统一规范实现逻辑。客户端使用jdbc时不需要去改变代码,直接引入不同的spi接口服务即可。

DriverManager.getConnection(url, username, password)

这样即可拿到连接,前提是具体实现需要遵循相应的spi规范。

2. 整合mybatis

通常都会使用mybatis来做dao层访问数据库,访问hive也是类似的。

配置文件sqlConfig.xml:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="production"> <environment id="production"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="org.apache.hive.jdbc.HiveDriver"/> <property name="url" value="jdbc:hive2://master:10000/default"/> <property name="username" value="hadoop"/> <property name="password" value="hadoop"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/hive/test/test.xml"/> </mappers> </configuration>

mapper代码省略,实现代码:

public classTestMapperImpl implements TestMapper { private static SqlSessionFactory sqlSessionFactory = HiveSqlSessionFactory.getInstance().getSqlSessionFactory(); @Override public int getTestCount(String dateTime) { SqlSession sqlSession = sqlSessionFactory.openSession(); TestMapper testMapper = sqlSession.getMapper(TestMapper.class); int count = testMapper.getTestCount(dateTime); sqlSession.close(); return count; } }



    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/20616.html

    分享给朋友:

    “hive单独服务器 the hive服务器中文” 的相关文章

    探索美国冷门VPS:高性价比与个性化服务的优选

    在谈论VPS(虚拟专用服务器)时,人们往往会联想到那些知名的品牌和服务,而美国冷门VPS市场却是一个值得关注的领域。这些冷门VPS提供商虽然在整体市场中的知名度较低,但却为特定的用户群体和需求提供了颇具价值的服务。我在研究这个市场时,发现不少提供商在某些方面有着相当的优势,让我对这个冷门领域充满了好...

    Digital-VM优惠活动揭秘:享受五折折扣和稳定续费

    Digital-VM优惠概述 Digital-VM简介 Digital-VM是一家专注于提供基于KVM架构的VPS主机服务商,凭借其强大的服务器性能和丰富的网络资源,已经逐渐在市场中站稳了脚跟。如果你在寻找高可靠性、灵活配置的VPS主机,Digital-VM绝对值得一试。它在全球多个地区建立了数据中...

    选择合适的云服务器配置:1c1g与1c2g的优缺点分析

    云服务器的配置选项相当多,其中1c1g和1c2g经常被提及。这两种配置分别代表1个CPU核心和不同的内存容量。1c1g代表1GB内存,而1c2g则有2GB内存。从我个人的经验来看,这两种配置在实际使用中各有其独特的优势。 1c1g配置详解 1c1g的配置相对基础,1个CPU核心加上1GB内存,特别适...

    Gcore VPS评测:高性能云计算虚拟专用服务器的最佳选择

    Gcore VPS是一款基于云计算的虚拟专用服务器,近年来备受用户推崇。我发现它不仅仅是一台服务器,而是为各种应用和业务需求提供了一种灵活可靠的解决方案。从高负载网站到应用程序的托管,Gcore VPS都能很好地满足这些需求。 了解Gcore VPS的定义及功能,首先可以知道它是针对企业和个人用户推...

    RFCHOST评论:高性能VPS与流媒体解锁的完美选择

    RFCHOST概述 RFCHOST是一家自2015年成立的公司,隶属于上海花卷科技。作为一家新兴的网络服务企业,RFCHOST专注于提供国际线路深层挖掘与构造网络通信服务的一体化解决方案。我一直关注着这个快速发展的品牌,尤其是它在香港和洛杉矶VPS业务上的持续投入与创新。 随着全球数字化进程的加速,...

    GA Cloud:全球化一站式云计算服务,优化您的企业数据管理

    GA Cloud成立于2021年,实际上是我对云计算服务界的一次全新探索。作为一家致力于全球化一站式云计算服务的公司,GA Cloud在市场中逐渐凸显出它的实力和影响力。我们在香港本地拥有8个以上的POP接入点,同时也在马来西亚、美国、日本、欧洲等地设立了多个数据中心。目前,我们的数据机柜数量已超过...