經過Thrift實現C#與Hbase交流

      近期着手的一個項目須要將我方數據存儲到Hadoop的大數據環境,因爲本人是.net平臺的開發者,沒有怎麼接觸過大數據(由於他實在是過高大尚了)。但還好baidu, google後,仍是很找到了解決辦法,就是C#寫數據到hbase,而後大數據開發者在從hbase讀取數據進行多維度處理,如將一部分歷史數據轉移到hive,或者是將一部分數據推送到機器學習庫進行學習。html

1、獲取hbase的thrift定義,並生成c#類

1.1 到hbase源碼地址獲取thrift的定義


注意Hbase的版本必定要與運行的Hbase對應。c#

請選擇thrift,而不是thrift2,緣由thrift接口看上更爲好用機器學習

1.2 獲取thrift,生成c#代碼

   thrift生成代碼能夠參考的我《半小時入Thriftmaven

2、啓動hbase的thrift服務

輸入以下命令:oop

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

默認的thrift端口是9090,能夠在hbase-site.xml配置文件中修改默認端口。學習

3、用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寫入,讀取,刪除等功用。測試

4、測試結果

成功寫入。大數據

5、總結

1. 注意選擇thrift和版本,經過查看maven的依賴得到google

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

3. hbase的rowKey+列Key相同時,會對數據進行修改

相關文章
相關標籤/搜索