Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用.net通过odbc访问Hive

使用.net通过odbc访问Hive

作者头像
张子阳
发布于 2018-09-29 07:08:34
发布于 2018-09-29 07:08:34
4.2K00
代码可运行
举报
运行总次数:0
代码可运行

写入数据到Hive表(命令行) 这篇文章中,我们通过命令行的方式和hive进行了交互。但在通常情况下,是通过编程的方式来操作Hive,Hive提供了JDBC和ODBC接口,因为公司的数据处理程序是使用.net开发并运行在windows server上的,因此这篇文章将介绍如何通过ODBC来访问Hive。

说明:ODBC:Open Database Connectivity,开放数据库连接,是微软开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。

JDBC:Java Database Connectivity,Java数据库连接,是用于Java编程语言和数据库之间的数据库无关连接的标准Java API。

1. 配置hive-site.xml

hive-site.xml是Hive的配置文件,位于$HIVE_HOME/conf文件夹下,在其中添加如下配置:

<property> <name>hive.server2.authentication</name> <value>NONE</value> <description> Expects one of nosasl, none, ldap, kerberos, pam, custom. Client authentication types. NONE: no authentication check LDAP: LDAP/AD based authentication KERBEROS: Kerberos/GSSAPI authentication CUSTOM: Custom authentication provider (Use with property hive.server2.custom.authentication.class) PAM: Pluggable authentication module NOSASL: Raw transport </description> </property>

远程访问Hive,有好几种身份验证方式,因为我们的Hive服务仅在局域网中访问,简单起见,可以配置为NONE,也就是不进行身份验证,NONE也是hive.server2.authentication的默认值。

2. 确认hiveserver2服务已经运行

hive需要先作为服务运行起来,第三方应用才可以进行连接,使用下面的命令启动hive服务:

hive --service hiveserver2 2018-07-25 11:40:51: Starting HiveServer2

这个服务的默认端口号是10000。同时,还提供了一个web UI,默认端口号是10002,可以通过浏览器直接访问:

图1. Hive Web UI

3. 下载、安装和配置ODBC Connector

可以从这里下载各个版本的HIVE ODBC:http://archive.mapr.com/tools/MapR-ODBC/MapR_Hive/

Windows上odbc安装和配置说明:Install the Hive ODBC Connector on Windows

windows上的安装很简单,一路next,安装完成后从“开始”菜单中找到:MapR Hive ODBC Connector 2.1 (64-bit),打开 64-bit ODBC Administrato,可以看到下面的界面:

图2. 点击“添加”

图3. 选择“MapR Hive ODBC Connector”

按照下图这样配置,注意修改Hosts为运行Hive服务的主机IP:

图4. 选择“MapR Hive ODBC Connector”

点击“Test”,你可能会遇到这样一个错误:User: root is not allowed to impersonate root.

此时,可以修改$HADOOP_HOME/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服务后,再次执行点击“Test”,成功后可以看到下面的界面:

提示:如何重启Hadoop可以参看:linux上安装和配置Hadoop(单节点)

图5. 成功连接至hive

4. 编写.Net Core控制台程序访问Hive

配置好了ODBC数据源之后,新建一个.Net Core项目,首先通过NuGet包管理器安装 System.Data.Odbc。

图6. 安装System.Data.Odbc

接下来编写代码就很容易了,都是熟悉的味道,我就直接贴上来了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Data;
using System.Data.Odbc;

namespace HiveClient {
    class Program {
        static void Main(string[] args) {
            string dns = "DSN=dev56;UID=root;PWD=";

            using(HiveOdbcClient client = new HiveOdbcClient(dns)) {
                string sql = "Create TEMPORARY Table golds_log_tmp(user_id bigint, accounts string, change_type string, golds bigint, log_time int) ROW FORMAT DELIMITED  FIELDS TERMINATED BY '|'";

                client.Excute(sql);

                sql = @"Insert into table golds_log_tmp values
                    (3645787,'d159159(4172194)','游戏比赛奖励',1000,1526027152),
                    (3641649, 'ffddbbgg55(4167873)', '游戏比赛奖励', 100, 1526027152),
                    (684321, '763274471(850395)', '游戏比赛奖励', 100, 1526027152)";

                client.Excute(sql);

                sql = "select * from golds_log_tmp";
                var table = client.Query(sql);
                foreach(DataRow row in table.Rows) {
                    Console.WriteLine($"{ row[0] }, {row[1]}, { row[2] }, { row[3] }, { row[4] }");
                }
            }
            Console.ReadKey();
        }
    }

    public class HiveOdbcClient:IDisposable {
        OdbcConnection _conn;

        public HiveOdbcClient(string dns) {            
            _conn = new OdbcConnection(dns);
            _conn.Open();
        }

        public void Excute(string sql) {
            OdbcCommand cmd = new OdbcCommand(sql, _conn);
            cmd.ExecuteNonQuery();
        }

        public DataTable Query(string sql) {
            DataTable table = new DataTable();
            OdbcDataAdapter adapter = new OdbcDataAdapter(sql, _conn);
            adapter.Fill(table);
            return table;
        }

        public void Dispose() {
            if (_conn != null) {
                _conn.Dispose();
            }
        }
    }
        
}

需要注意的是:执行Insert语句的部分执行的会比较久,因为通过Hive底层依然执行的是MapReduce,这是一个比较耗时的操作。如果此时查看linux的控制台,可以看到Hive的log输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Hadoop job information for Stage-1: number of mappers: 1; number of reducers:0
2018-07-25 17:59:40,983 Stage-1 map = 0%,  reduce = 0%
2018-07-25 17:59:47,238 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 2.02sec
MapReduce Total cumulative CPU time: 2 seconds 20 msec
Ended Job = job_1532510920759_0002
Stage-4 is selected by condition resolver.
Stage-3 is filtered out by condition resolver.
Stage-5 is filtered out by condition resolver.
Moving data to directory hdfs://localhost:9000/tmp/hive/root/41c5d246-48b8-47e-a321-3726bdbc3e22/_tmp_space.db/e1545b51-4bdc-4859-b6d6-ebc09acf4e66/.hive-taging_hive_2018-07-25_17-59-32_779_3671872308271402381-3/-ext-10000
Loading data to table default.golds_log_tmp
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1   Cumulative CPU: 2.02 sec   HDFS Read: 5290 HDFS Write 259 SUCCESS
Total MapReduce CPU Time Spent: 2 seconds 20 msec

至此,我们已经成功通过.Net编程的方式访问了Hive,创建了临时表、插入数据、并读取了数据。

感谢阅读,希望这篇文章能给你带来帮助!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-7-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Hadoop(五)C#操作Hive
Hive将HiveQL(类sql语言)转为MapReduce,完成数据的查询与分析,减少了编写MapReduce的复杂度。它有以下优点:
Chester Chen
2022/08/18
7600
Hadoop(五)C#操作Hive
Hive-1.2.1_02_简单操作与访问方式
1、Hive创建表格报【Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.
踏歌行
2020/10/15
4930
Hive-1.2.1_02_简单操作与访问方式
hadoop生态之hive
大数据的生态包含各种各样的组件,hive是其中之一,hive主要是作为数据仓库的工具,简化相关人员的代码工作,只要编写简单的SQL就可以实现mapreduce效果。
SRE运维实践
2021/03/04
6140
hadoop生态之hive
Hive 启用压缩
对于数据密集型任务,I/O操作和网络数据传输需要花费相当长的时间才能完成。通过在 Hive 中启用压缩功能,我们可以提高 Hive 查询的性能,并节省 HDFS 集群上的存储空间。
smartsi
2019/08/07
2K0
Hive 简单查询FetchTask
某些 SELECT 查询可以转换为一个 FETCH 任务,从而最大限度地可以减少交互的延迟。在目前情况下,查询只能是单一数据源,不能有任何的子查询,不能有任何的聚合,去重(导致RS - ReduceSinkOperator,会产生 MapReduce 任务),Lateral views 以及 Join。Fetch 任务是 Hive 中执行效率比较高的任务之一。直接遍历文件并输出结果,而不是启动 MapReduce 作业进行查询。对于简单的查询,如带有 LIMIT 语句的 SELECT * 查询,这会非常快(单位数秒级)。在这种情况下,Hive 可以通过执行 HDFS 操作来返回结果。
smartsi
2019/08/07
1.6K0
Hadoop基础教程-第11章 Hive:SQL on Hadoop(11.3 Hive 快速入门)
该文介绍了如何利用Rust开发WebAssembly项目,并介绍了WebAssembly的基本概念、基于Rust的WebAssembly项目如何构建以及如何使用Rust编写WebAssembly代码。此外,文章还介绍了如何使用WebAssembly构建Web应用程序,并提供了示例代码。
程裕强
2018/01/02
9090
Apache Hive-2.3.0 快速搭建与使用
Hive 简介 Hive 是一个基于 hadoop 的开源数据仓库工具,用于存储和处理海量结构化数据。它把海量数据存储于 hadoop 文件系统,而不是数据库,但提供了一套类数据库的数据存储和处理机制,并采用 HQL (类 SQL )语言对这些数据进行自动化管理和处理。我们可以把 Hive 中海量结构化数据看成一个个的表,而实际上这些数据是分布式存储在 HDFS 中的。 Hive 经过对语句进行解析和转换,最终生成一系列基于 hadoop 的 map/reduce 任务,通过执行这些任务完成数据处理。 Hi
程序员鹏磊
2018/02/09
1.6K0
Apache Hive-2.3.0 快速搭建与使用
Hive动态分区
hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。
云飞扬
2021/12/31
2.6K0
Hadoop基础教程-第11章 Hive:SQL on Hadoop(11.6 HQL:DML数据操纵)(草稿)
该文介绍了如何利用Hadoop和Hive进行大数据分析。首先介绍了Hadoop和Hive的基本概念,然后详细讲解了如何使用Hadoop和Hive进行数据清洗、数据转换、数据加载和查询。最后,通过一个具体的实例演示了如何使用Hadoop和Hive进行数据分析。
程裕强
2018/01/02
5560
Hive动态分区之多分区
中文分区在hive中显示为乱码,但是不影响正常使用。Mysql中也会有显示乱码的情况,但是MySQL有一个names可以设置编码格式。
云飞扬
2021/12/31
2.5K0
Hive 核心服务HiveServer2(HS2)的前世今生,最后提供代码实例
之前分享了 Hive 元数据的表,一文搞懂 Hive 元数据的表,数仓开发需要熟悉的,建议收藏
大数据学习指南
2022/11/08
1.9K0
Hive 核心服务HiveServer2(HS2)的前世今生,最后提供代码实例
Hive 本地执行模式
假设你正在运行一些复杂的 Hive 查询,我们都知道这会在后台触发 MapReduce 作业并为你提供输出。如果 Hive 中的数据比较大,这种方法比较有效,但如果 Hive 表中的数据比较少,这样会有一些问题。出现此问题的主要原因是 MapReduce 作业被触发,它是在服务器/集群上触发,因此每次运行查询时,它都会上传到服务器并在那里启动 MapReduce,然后输出。因此,为查询触发执行任务的时间消耗可能会比实际作业的执行时间要多的多。
smartsi
2019/08/07
3.1K0
我的 Hive 3.1.2 之旅 【收藏夹吃灰系列】
同样,这部也属于收藏夹吃灰系列。看在写了辣么多字儿,险些把PP坐出ZC的份儿上,各位看官来个三连呗!
Lenis
2021/04/19
2.1K0
我的 Hive 3.1.2 之旅 【收藏夹吃灰系列】
Hadoop基础教程-第12章 Hive:进阶(12.1 内置函数)(草稿)
该文是关于Hive表类型和存储格式的介绍。主要说明了Hive表类型包括内表、外表、分区表、索引表、Text表、SequenceFile表、ORC表、Parquet表等,以及不同表类型之间的区别。同时,还介绍了Hive的存储格式,包括Text格式、SequenceFile格式、ORC格式、Avro格式、JSON格式、MessagePack格式、Thrift格式和ProtoBuf格式等。此外,还提供了相关命令和示例,以帮助用户更好地理解和掌握Hive表类型和存储格式。
程裕强
2018/01/02
9590
如何使用.NET/C通过hive与Hadoop连接
连接到蜂巢中的数据库 介绍 在我开始告诉你我的问题之前,我已经把某些与我的问题相关的术语写下来了。所有的定义基本上都是维基百科的摘录。
Maynor
2021/12/07
1.1K0
写入数据到Hive表(命令行)
搭建好Hadoop和Hive的运行环境之后,首先考虑到的,就是如何将数据写入到HIVE中。这篇文章将简单、快速地介绍如何通过命令行的方式,使用insert...values、load、insert...select 语句将数据写入到hive表重。并讲解了在写入数据时遇到的问题:多个小文件,以及相应的解决方案。
张子阳
2018/09/28
9.2K0
写入数据到Hive表(命令行)
06-PDI(Kettle)读取Hive写入HDFS,读取HDFS写入HBase中
本文主要通过Kettle完成对Hive和HBase中数据的读写工作,为了便于按照文档即可实现Kettle的读写Hive和HBase,文本前面也介绍下Hive的安装过程,如何Hive已经完成安装,可跳过前面即可。 实验环境: cetnos7.4
用户2225445
2022/11/12
1.6K0
06-PDI(Kettle)读取Hive写入HDFS,读取HDFS写入HBase中
hadoop2-hive的安装和测试
========================================================
Hongten
2018/12/05
4350
hadoop2-hive的安装和测试
关于Hive命令的7个小技巧,你都清楚吗?
最近在看冰河大佬写的《海量数据处理与大数据技术实战》,该书涵盖以Hadoop为主的多款大数据技术框架实战的内容,兼顾理论与实操,是市面上难得的技术好书。本篇文章,我就分享一下从中学习到的关于Hive命令的7个小技巧,受益的朋友记得来发三连⭐支持一下哟~
大数据梦想家
2021/01/27
1.6K0
关于Hive命令的7个小技巧,你都清楚吗?
第五章 更换cdh版本,hive的安装使用,原理讲解
这里由于小编的这里在安装hive时,由于出现了启动hive时出现了和hadoop的版本不一致的原因,并且始终没有解决,所以就改变策略使用cdh版本的hadoop和hive.因为cdh版本的比较系统,兼容性好。因此要重新安装了。
全栈程序员站长
2022/08/05
1.4K0
第五章 更换cdh版本,hive的安装使用,原理讲解
相关推荐
Hadoop(五)C#操作Hive
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验