惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
MyScale Blog
MyScale Blog
Y
Y Combinator Blog
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Proofpoint News Feed
Google DeepMind News
Google DeepMind News
V
Vulnerabilities – Threatpost
T
The Blog of Author Tim Ferriss
云风的 BLOG
云风的 BLOG
Recorded Future
Recorded Future
N
News and Events Feed by Topic
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 【当耐特】
N
Netflix TechBlog - Medium
博客园 - 叶小钗
B
Blog
Vercel News
Vercel News
T
Tenable Blog
T
The Exploit Database - CXSecurity.com
Spread Privacy
Spread Privacy
T
Threat Research - Cisco Blogs
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Last Week in AI
Last Week in AI
F
Fortinet All Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Microsoft Security Blog
Microsoft Security Blog
S
Securelist
Microsoft Azure Blog
Microsoft Azure Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Palo Alto Networks Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
D
DataBreaches.Net
Cyberwarzone
Cyberwarzone
Engineering at Meta
Engineering at Meta
Martin Fowler
Martin Fowler
G
GRAHAM CLULEY
Project Zero
Project Zero
Cisco Talos Blog
Cisco Talos Blog
A
Arctic Wolf
C
CERT Recently Published Vulnerability Notes
L
LangChain Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
Check Point Blog
A
About on SuperTechFans
W
WeLiveSecurity
The GitHub Blog
The GitHub Blog

博客园 - SamDragon

如何通过LangChain实现记忆功能的总结 基于LangChain的Ai应用开发平台 .net CPU和内存爆高的分析与处理01 前端导出Excel和打印介绍 ApiTemplate:.net后端项目模板完善与总结 Jenkins之Nunit的应用 jenkins发布application且并运行 Jenkins基础系统之完整的.net项目编译 Jenkins基础系统之更换镜像源 记一次业余项目的敏捷开发实践 奉上简单的.Net后端开发模板 C#之委托如此简单 cordova环境搭建 Linux实现免密码登录 ElasticSearch安装及运行的坑 Autofac 应用于IIS托管的WEB程序,注册程序集被回收的问题 OpenLayer实现路径运动 对SVN的落地与实践总结 Jenkins配置从节点
通过Thrift实现C#与Hbase交流
SamDragon · 2019-05-26 · via 博客园 - SamDragon

      近期着手的一个项目需要将我方数据存储到Hadoop的大数据环境,由于本人是.net平台的开发者,没有怎么接触过大数据(因为他实在是太高大尚了)。但还好baidu, google后,还是很找到了解决办法,就是C#写数据到hbase,然后大数据开发者在从hbase读取数据进行多维度处理,如将一部分历史数据转移到hive,或者是将一部分数据推送到机器学习库进行学习。

一、获取hbase的thrift定义,并生成c#类

1.1 到hbase源码地址获取thrift的定义


注意Hbase的版本一定要与运行的Hbase对应。

请选择thrift,而不是thrift2,原因thrift接口看上更为好用

1.2 获取thrift,生成c#代码

   thrift生成代码可以参考的我《半小时入Thrift

二、启动hbase的thrift服务

输入如下命令:

hbase-daemon.sh start thrift
hbase-daemons.sh start thrift (集群版本)

默认的thrift端口是9090,可以在hbase-site.xml配置文件中修改默认端口。

三、用C#编写测试代码

var transport = new TSocket("10.34.51.62", 9090);
            TProtocol protocol = new TBinaryProtocol(transport);
            var client = new Hbase.Client(protocol);
            transport.Open();
            var tabls = client.getTableNames();
            foreach(var t in tabls)
            {
                Console.WriteLine(Encoding.Default.GetString(t));
            }
            //
            Mutation mutation = new Mutation();
            mutation.Column = Encoding.UTF8.GetBytes("personal_data:abc");
            mutation.Value = Encoding.UTF8.GetBytes("Hello");
            client.mutateRow(Encoding.UTF8.GetBytes("emp"), Encoding.UTF8.GetBytes("008"), new List<Mutation> { mutation }, null);
            Console.WriteLine("add success");
            var row = client.getRow(Encoding.UTF8.GetBytes("emp"), Encoding.UTF8.GetBytes("008"), null);
            foreach (var r in row)
            { 
                Console.WriteLine(Encoding.UTF8.GetString(r.Row));
                foreach(var c in r.Columns)
                {
                    Console.WriteLine("-- " + Encoding.UTF8.GetString(c.Key) + ":" + Encoding.UTF8.GetString(c.Value.Value));
                }
            }
            client.deleteAllRow(Encoding.UTF8.GetBytes("emp"), Encoding.UTF8.GetBytes("008"), null);
            Console.WriteLine("delete success");
            Console.ReadKey();
            transport.Close();

上述代码实现了hbase写入,读取,删除等功用。

四、测试结果

成功写入。

五、总结

1. 注意选择thrift和版本,通过查看maven的依赖获得

2. 使用thirft版本,而不是thrift2

3. hbase的rowKey+列Key相同时,会对数据进行修改