前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用.net通过odbc访问Hive

使用.net通过odbc访问Hive

作者头像
张子阳
发布2018-09-29 15:08:34
3.9K0
发布2018-09-29 15:08:34
举报

写入数据到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
复制
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
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 配置hive-site.xml
  • 2. 确认hiveserver2服务已经运行
  • hive --service hiveserver2 2018-07-25 11:40:51: Starting HiveServer2
    • 3. 下载、安装和配置ODBC Connector
      • 4. 编写.Net Core控制台程序访问Hive
      相关产品与服务
      多因子身份认证
      多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档