[原创]使用C++(通过Thrift)访问/操作/读写Hbase

转载必须注明出处:http://www.codelast.com/

无奈,网上关于C++访问Hbase的文章实在太少,所以只好自己折腾一下,然后写出来了。

要使用C++访问Hbase,可以走的途径少之又少,据说当前最好的方法就是通过Thrift来实现:http://thrift.apache.org/

所以本文分成几部分:(1)安装Thrift;(2)用Thrift 生成访问Hbase所需的C++文件;(3)在程序中通过Thrift来访问Hbase。

另外,本文只包含读写Hbase数据的例子,不包含配置Hbase的方法,如需这些内容,请自行搜索。

首先声明一下,本文基于以下环境:
Read More

[原创] log4cxx在Linux下的安装、使用

简单地说,log4cxx就是一个记录日志的C++库(程序运行的时候要保存一些日志到文件,以供将来查看),它是从著名的Java日志库log4j移植而来的,并且它是Apache的一个项目,质量有保证,不用犹豫了,就用它吧!

补一句:Apache声称log4cxx的速度快、灵活性好,但是,速度快是第一位的,灵活性是第二位的("Log4cxx claims to be fast and flexible: speed first, flexibility second."),所以,担心日志记录性能的同学更可以选择log4cxx啦。

但是,这玩意的安装、编译稍微有点麻烦,如果遇到了问题,没耐心的人可能就没兴趣折腾了,我在这里把自己遇到的问题记一下。

系统环境:RHEL 5.3,64位

 

Read More

[原创]从零开始一步步教你:用C++开发一个简单的hadoop分布式计算应用程序

 

假设你有上百G的数据,你要统计出这些数据中,含有某些你感兴趣的内容的数据的有多少条,你会怎么做?在硬件条件允许的情况下,用hadoop并行计算是一个不错的选择。

为了使本文得以清晰地说明,我们不妨假设如下的情况:

Read More

C++ logging libraries / 一些写日志的C++库

文章来源:http://www.codelast.com/

 

(1)google-glog

Logging library for C++

文档:http://google-glog.googlecode.com/svn/trunk/doc/glog.html

 

(2)loglite

A small logging library(依赖于boost,一个号称轻量级的库竟然依赖于boost,非常雷人吧)

文章来源:http://www.codelast.com/

(3)rlog

C++ logging libraryRead More

C++中的explicit关键字

c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有”显式”那么必然就有”隐式”,那么什么是显示而什么又是隐式的呢?

如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:

Read More

C++ TR1 和 C++0x

 

C++ Technical Report 1 (TR1)是ISO/IEC TR 19768, C++ Library Extensions(函式库扩充)的一般名称。TR1是一份文件,内容提出了对C++标准函式库的追加项目。这些追加项目包括了正则表达式、智能指针、哈希表、随机数生成器等。TR1自己并非标准,他是一份草稿文件。然而他所提出的项目很有可能成为下次的官方标准。这份文件的目标在于「为扩充的C++标准函式库建立更为广泛的现成实作品」。

Read More

C++程序中统计一个目录下的文件数量

转载请注明出处:http://www.codelast.com/

 

如果一个目录下不包含其他目录,只有文件,怎么得到文件数量?这么容易的一个问题,你会用什么方法去做?

我喜欢利用shell来帮忙:

在程序中构造shell命令:ls 目录名 | wc -l

然后执行它,得到返回的结果,就结束了。

执行一个shell命令并获取其返回结果的函数示例:

std::string getCmdRes(const std::string sc)
{
  FILE* crs = popen(sc.c_str(), "r"); // execute the shell command
  char result[1024] = "0";
  fread(result, sizeof(char), sizeof(result), crs);
  if (NULL != crs)
  {
    fclose(crs);
    crs = NULL;
  }
  std::string res = result;
  return res;
}

将shell命令作为参数传入,返回的就是执行结果了,简单吧。

类似地,如果有其他可以用shell命令很容易实现的运算,我们也可以这样“偷懒”,直接在C++里“调用”它。

文章来源:http://www.codelast.com/

Read More