zoukankan      html  css  js  c++  java
  • windows下C#通过Thrift操作HBase

    1。到apache官网下载Thrift源码, http://thrift.apache.org/download,我这里下载的是thrift-0.10.0

    2。到apach官网下载thrift.exe, http://thrift.apache.org/download, 这里下载的是thrift-0.10.0.exe

    3。将下载下来的thrift-0.10.0.exe放到thrift-0.10.0/tutorial/目录下去

    4。在windows命令行运行如下这两条命令:

      thrift-0.10.0.exe --gen csharp tutorial.thrift

      thrift-0.10.0.exe --gen csharp shared.thrift

    运行完以后就会在当前目录下生成一个名为gen-csharp的目录,到时候需要把这下面的源码文件添加到项目中去

    5。用vs打开thrift-0.10.0/lib/csharp/src/Thrift.sln解决方案,并编译得到Thrift.dll

    6。用vs新建自己的项目,将之前生成的源码添加进来,并引入Thrift.dll库。

    下面就是Client端的代码

    using System;
    using Thrift;
    using Thrift.Protocol;
    using Thrift.Server;
    using Thrift.Transport;
    
    namespace CSharpTutorial
    {
        public class CSharpClient
        {
            public static void Main()
            {
                try
                {
                    TTransport transport = new TSocket("localhost", 9090);
                    TProtocol protocol = new TBinaryProtocol(transport);
                    Calculator.Client client = new Calculator.Client(protocol);
    
                    transport.Open();
                    try
                    {
                        client.ping();
                        Console.WriteLine("ping()");
    
                        int sum = client.add(1, 1);
                        Console.WriteLine("1+1={0}", sum);
    
                        Work work = new Work();
    
                        work.Op = Operation.DIVIDE;
                        work.Num1 = 1;
                        work.Num2 = 0;
                        try
                        {
                            int quotient = client.calculate(1, work);
                            Console.WriteLine("Whoa we can divide by 0");
                        }
                        catch (InvalidOperation io)
                        {
                            Console.WriteLine("Invalid operation: " + io.Why);
                        }
    
                        work.Op = Operation.SUBTRACT;
                        work.Num1 = 15;
                        work.Num2 = 10;
                        try
                        {
                            int diff = client.calculate(1, work);
                            Console.WriteLine("15-10={0}", diff);
                        }
                        catch (InvalidOperation io)
                        {
                            Console.WriteLine("Invalid operation: " + io.Why);
                        }
    
                        SharedStruct log = client.getStruct(1);
                        Console.WriteLine("Check log: {0}", log.Value);
    
                    }
                    finally
                    {
                        transport.Close();
                    }
                }
                catch (TApplicationException x)
                {
                    Console.WriteLine(x.StackTrace);
                }
    
            }
        }
    }

    下面是Server端代码

    using System;
    using System.Collections.Generic;
    using Thrift.Server;
    using Thrift.Transport;
    
    namespace CSharpTutorial
    {
        public class CalculatorHandler : Calculator.Iface
        {
            Dictionary<int, SharedStruct> log;
    
            public CalculatorHandler()
            {
                log = new Dictionary<int, SharedStruct>();
            }
    
            public void ping()
            {
                Console.WriteLine("ping()");
            }
    
            public int add(int n1, int n2)
            {
                Console.WriteLine("add({0},{1})", n1, n2);
                return n1 + n2;
            }
    
            public int calculate(int logid, Work work)
            {
                Console.WriteLine("calculate({0}, [{1},{2},{3}])", logid, work.Op, work.Num1, work.Num2);
                int val = 0;
                switch (work.Op)
                {
                    case Operation.ADD:
                        val = work.Num1 + work.Num2;
                        break;
    
                    case Operation.SUBTRACT:
                        val = work.Num1 - work.Num2;
                        break;
    
                    case Operation.MULTIPLY:
                        val = work.Num1 * work.Num2;
                        break;
    
                    case Operation.DIVIDE:
                        if (work.Num2 == 0)
                        {
                            InvalidOperation io = new InvalidOperation();
                            io.WhatOp = (int)work.Op;
                            io.Why = "Cannot divide by 0";
                            throw io;
                        }
                        val = work.Num1 / work.Num2;
                        break;
    
                    default:
                        {
                            InvalidOperation io = new InvalidOperation();
                            io.WhatOp = (int)work.Op;
                            io.Why = "Unknown operation";
                            throw io;
                        }
                }
    
                SharedStruct entry = new SharedStruct();
                entry.Key = logid;
                entry.Value = val.ToString();
                log[logid] = entry;
    
                return val;
            }
    
            public SharedStruct getStruct(int key)
            {
                Console.WriteLine("getStruct({0})", key);
                return log[key];
            }
    
            public void zip()
            {
                Console.WriteLine("zip()");
            }
        }
    
        public class CSharpServer
        {
            public static void Main()
            {
                try
                {
                    CalculatorHandler handler = new CalculatorHandler();
                    Calculator.Processor processor = new Calculator.Processor(handler);
                    TServerTransport serverTransport = new TServerSocket(9090);
                    TServer server = new TSimpleServer(processor, serverTransport);
    
                    // Use this for a multithreaded server
                    // server = new TThreadPoolServer(processor, serverTransport);
    
                    Console.WriteLine("Starting the server...");
                    server.Serve();
                }
                catch (Exception x)
                {
                    Console.WriteLine(x.StackTrace);
                }
                Console.WriteLine("done.");
            }
        }
    }
  • 相关阅读:
    os.path.basename()和os.path.splitext()
    关于pytorch中@和*的用处
    Python | os.path.join() method
    SURF (Speeded Up Robust Features,加速稳健特征)
    Canny算子
    医学影像中常见名词解释
    sigmod、tanh、ReLU激活函数的实现
    plt.gca()坐标轴移动
    损失函数和梯度下降解释
    torch和numpy的相互转换
  • 原文地址:https://www.cnblogs.com/smallcroco-blog/p/6836158.html
Copyright © 2011-2022 走看看