dotnetcore 与 hbase 之二——thrift 客户端的制作
说明
在上一篇文章dotnetcore 与 hbase 之一——hbase 环境准备结束后,我们已经有了 hbase 数据库环境。接下来就可以利用 thrift 生成 c# hbase 客户端了。如果不了解 thrift,请戳这里。
dotnet core 实现的 thrift
thrift 从 0.11.0 版本才有 netcore 的实现加入。在此之前有 .net farmwork 的实现版本。为了使用带有 dotnet core 版本我们选择最老的版本 0.11.0 进行安装。但是这有个问题, hbase 里的 thrift 版本是 0.9.0,版本不一致会导致某些传输协议不能使用,目前测试只有简单二进制协议TBinaryProtocol能用!!!
1. thrift 安装
thrift-0.11.0 可以从这里下载。
ubuntu18.04 安装 thrift 请转到这里或者自行百度。
2. thrift hbase 生成
在 hbase1.2.8 解压文件夹中查找Hbase.thrift,Linux 下可以使用命令find ./ -name Hbase.thrift进行查找。
hbase-1.2.8|⇒ find ./ -name Hbase.thrift
./hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
打开进入含有Hbase.thrift的目录,执行生成命令thrift --gen netcore Hbase.thrift。一般会有如下警告,可忽略:
[WARNING:/home/hsx/Downloads/hbase-1.2.8-src/hbase-1.2.8/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift:89] The "byte" type is a compatibility alias for "i8". Use "i8" to emphasize the signedness of this type.
执行查看命令ls -al,看生成的文件夹gen-netcore
total 40
drwxr-xr-x gen-netcore
-rw-rw-r-- Hbase.thrift
进入gen-netcore文件夹可看到一些 c#代码:
total 716K
-rw-r--r-- AlreadyExists.cs
-rw-r--r-- BatchMutation.cs
-rw-r--r-- ColumnDescriptor.cs
-rw-r--r-- Hbase.cs
-rw-r--r-- IllegalArgument.cs
-rw-r--r-- IOError.cs
-rw-r--r-- Mutation.cs
-rw-r--r-- TAppend.cs
-rw-r--r-- TCell.cs
-rw-r--r-- TColumn.cs
-rw-r--r-- TIncrement.cs
-rw-r--r-- TRegionInfo.cs
-rw-r--r-- TRowResult.cs
-rw-r--r-- TScan.cs
我们只需新建一个 dotnet 类库项目,比如dotnet new classlib -o HbaseNetCore,直接把这些文件拷贝到类库项目目录中就行。打开该项目,发现它引用了 thrift,但由于找不到引用会报错:
using Thrift;
using Thrift.Collections;
using Thrift.Protocols;
using Thrift.Protocols.Entities;
using Thrift.Protocols.Utilities;
using Thrift.Transports;
using Thrift.Transports.Client;
using Thrift.Transports.Server;
下一步介绍 thrift 项目的获取来解决该引用问题。
3. 获取 thrift 项目
打开 thrift-0.11.0 的解压文件夹,执行查找find ./ -name netcore,如下:
./lib/netcore # c#实现的thrift源码
./tutorial/netcore # c#实现的thrift使用教程
./test/netcore # 测试
我们真正需要的就是./lib/netcore中的thrift项目。事实上,./lib/中有多种语言实现的 thrift,比如:
lib|⇒ ls
as3 csharp erl java lua netcore php st
c_glib d go javame Makefile nodejs py ts
cocoa dart haxe js Makefile.am ocaml rb xml
cpp delphi hs json Makefile.in perl rs
找到./lib/netcore/thrift,将该项目拷贝至第二步中项目HbaseNetCore旁,然后 HbaseNetCore 引用 thrift 项目即可。事实上,在创建所有项目前应该创建一个解决方案来管理项目的,读者请自行创建。
4. 测试
新建测试项目来测试以上生成的客户端。具体实施请参看这里HBase and Thrift in .NET C# Tutorial。
总结
以上步骤网上基本都有教程,此处列出来的是当初让笔者困惑的地方,如对读者也有帮助,那再好不过。如读者已经悉知,请自行略过。
由于使用的 thrift 与 hbase 中的版本不一致,导致只能使用简单二进制协议TBinaryProtocol!!!
后期将做一些对HbaseNetCore项目的帮助工具。敬请期待。
dotnetcore 与 hbase 之二——thrift 客户端的制作的更多相关文章
- dotnetcore 与 hbase 之三——c# for hbase 客户端的使用
说明 在上一篇文章dotnetcore 与 hbase 之二--thrift 客户端的制作中已经可以找到 c# hbase 客户端的使用方法了,为什么这里单独列出一篇文章来讲述呢?最简单的理由就是,本 ...
- HBase之Table.put客户端流程
首先,让我们从HTable.put方法开始.由于这一节有很多方法只是简单的参数传递,我就简单略过,但是,关键的方法我还是会截图讲解,所以希望大家尽可能对照源码进行流程分析.另外,在这一节,我单单介绍p ...
- dotnetcore 与 hbase 之一——hbase 环境准备
转载请注明出处www.cnblogs.com/hsxian! 总述 这是一系列针对 .net core (c#) 读取 hbase 的教程.本人苦于找不到 c#的原生 hbase 客户端,多番寻觅之下 ...
- HBase之Table.put客户端流程(续)
上篇博文中已经谈到,有两个流程没有讲到.一个是MetaTableAccessor.getRegionLocations,另外一个是ConnectionImplementation.cacheLocat ...
- idea+maven+spring+cxf创建webservice应用(二)生成客户端程序
idea+maven+spring+cxf创建webservice应用(二)生成客户端程序,以上一篇为基础"idea+maven+spring+cxf创建webservice应用" ...
- Blazor组件自做二 : 使用JS隔离制作手写签名组件
Blazor组件自做二 : 使用JS隔离制作手写签名组件 本文相关参考链接 JavaScript 模块中的 JavaScript 隔离 Viewer.js工程 Blazor组件自做一 : 使用JS隔离 ...
- 九、 HBase SHELL、 JAVA 和 Thrift 客户端
HBase 由 Java 语言实现,同时他也是最主要最高效的客户端. 相关的类在org.apache.hadoop.hbase.client 包中.涵盖所有 增删改查 API . 主要的类包含: HT ...
- 【hbase】使用thrift with python 访问HBase
HBase 版本: 0.98.6 thrift 版本: 0.9.0 使用 thrift client with python 连接 HBase 报错: Traceback (most recent ...
- Hbase 基础 - shell 与 客户端
版权说明: 本文章版权归本人及博客园共同所有,转载请标明原文出处(http://www.cnblogs.com/mikevictor07/),以下内容为个人理解,仅供参考. 一.简介 Hbase是在 ...
随机推荐
- 设计模式-桥接模式(Bridge)
桥接模式是构造型模式之一.把抽象(Abstraction)与行为实现(Implementor)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展. 角色和职责: 1.抽象类(Abstracti ...
- HihoCoder 1496:寻找最大值(思维DP)
http://hihocoder.com/problemset/problem/1496 题意:中文. 思路:一开始做有一种想法,把所有的数都变成二进制后,最优的情况肯定是挑选所有数中最高位的1能同时 ...
- HDU 2089:不要62(数位DP)
http://acm.hdu.edu.cn/showproblem.php?pid=2089 不要62 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer) ...
- vim与系统剪切板之间的复制粘贴
背景 vim各种快捷建溜得飞起,然而与系统剪切板之间的复制粘贴一直都是我的痛. 每次需要从vim中拷贝些文字去浏览器搜索,都需要用鼠标选中vim的文字后,Ctrl+c.Ctrl+v,硬生生掐断了纯键盘 ...
- 探究Hybrid-APP技术原理
探究Hybrid-APP技术原理 author: @TiffanysBear 背景 随着Web技术的发展和移动互联网的发展,Hybrid技术已经成为一种前端开发的主流技术方案.那什么是Hybrid A ...
- Java多线程(六):wait(),notify()和notifyAll()
wait(),notify()和notifyAll()介绍 1.wait() 使当前线程等待,直到另一个线程调用notify(),notifyAll()或者中断,当前线程调用wait()之前必须持有锁 ...
- python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)
简介 上一篇,我们虽然已经将生成的最新的测试报告发出去了,但是MIMEText 只能发送正文,无法带附件,因此我还需要继续改造我们的代码,实现可以发送带有附件的邮件.发送带附件的需要导入另外一个模块 ...
- 从0系统学Android--1.3创建你的第一个 Android 项目
1.3 创建你的第一个 Android 项目 环境搭建完成后,我们就可以写下我们的第一个项目了. 1.3.1 创建 HelloWorld 项目 在 Android Studio 的欢迎页面点击 Sta ...
- Vmware centos7无法联网的问题解决
VMware三种网络连接方式的区别 : 1) bridge : 默认使用VMnet0,不提供DHCP服务 在桥接模式下,虚拟机和宿主计算机处于同等地位,虚拟机就像是一台真实主机一样存在于局域网中.因此 ...
- 集群之间配置 SSH无密码登录
集群之间配置 SSH无密码登录 配置 ssh (1)基本语法 ssh 另一台电脑的 ip 地址 (2)ssh 连接时出现 Host key verification failed 的解决方法 # ss ...