R语言与Hadoop和Hbase的联合使用

  • A+

1. 环境准备及HBase安装

文字说明部分:

首先环境准备,这里我选择了Linux Ubuntu操作系统12.04的64位版本,大家可以根据自己的使用习惯选择顺手的Linux。

R语言与Hadoop和Hbase的联合使用

但JDK一定要用Oracle SUN官方的版本,请从官网下载,操作系统的自带的OpenJDK会有各种不兼容。JDK请选择1.6.x的版本,JDK1.7版本也会有各种的不兼容情况。

http://www.oracle.com/technetwork/java/javase/downloads/index.html

Hadoop的环境安装,请参考RHadoop实践系统”Hadoop环境搭建”的一文。

Hadoop和HBase版本:hadoop-1.0.3,hbase-0.94.2

配置HBase的启动命令的环境变量,使用HBase自带的ZooKeeper
export HBASE_MANAGES_ZK=true

配置hbase-site.xml,设置访问目录,数据副本数,ZooKeeper的访问端口。

复制Hadoop环境的类库,覆盖HBase中的类库。

配置完成,启动HBase服务。

代码部分:

hbase安装

1) 下载安装hbase

  1. ~ http://www.fayea.com/apache-mirror/hbase/hbase-0.94.2/hbase-0.94.2.tar.gz
  2. ~ tar xvf hbase-0.94.2.tar.gz

2) 修改配置文件

  1. ~ cd hbase-0.94.2/
  2. ~ vi conf/hbase-env.sh
  3.     export JAVA_HOME=/root/toolkit/jdk1.6.0_29
  4.     export HBASE_HOME=/root/hbase-0.94.2
  5.     export HADOOP_INSTALL=/root/hadoop-1.0.3
  6.     export HBASE_CLASSPATH=/root/hadoop-1.0.3/conf
  7.     export HBASE_MANAGES_ZK=true
  8. ~ vi conf/hbase-site.xml
  9.     <configuration>
  10.       <property>
  11.         <name>hbase.rootdir</name>
  12.         <value>hdfs://master:9000/hbase</value>
  13.       </property>
  14.       <property>
  15.         <name>hbase.cluster.distributed</name>
  16.         <value>true</value>
  17.       </property>
  18.       <property>
  19.          <name>dfs.replication</name>
  20.          <value>1</value>
  21.       </property>
  22.       <property>
  23.         <name>hbase.zookeeper.quorum</name>
  24.         <value>master</value>
  25.       </property>
  26.       <property>
  27.           <name>hbase.zookeeper.property.clientPort</name>
  28.           <value>2181</value>
  29.       </property>
  30.       <property>
  31.         <name>hbase.zookeeper.property.dataDir</name>
  32.         <value>/root/hadoop/hdata</value>
  33.       </property>
  34.     </configuration>

3) 复制hadoop环境的配置文件和类库

  1. ~ cp ~/hadoop-1.0.3/conf/hdfs-site.xml ~/hbase-0.94.2/conf
  2.  ~ cp ~/hadoop-1.0.3/hadoop-core-1.0.3.jar ~/hbase-0.94.2/lib
  3.  ~ cp ~/hadoop-1.0.3/lib/commons-configuration-1.6.jar ~/hbase-0.94.2/lib
  4.  ~ cp ~/hadoop-1.0.3/lib/commons-collections-3.2.1.jar ~/hbase-0.94.2/lib

4) 启动hadoop和hbase

  1. ~/hadoop-1.0.3/bin/start-all.sh
  2. ~/hbase-0.94.2/bin/start-hbase.sh

5) 查看hbase进行

  1. ~ jps
  2.     12041 HMaster
  3.     12209 HRegionServer
  4.     31734 TaskTracker
  5.     31343 DataNode
  6.     31499 SecondaryNameNode
  7.     13328 Jps
  8.     31596 JobTracker
  9.     11916 HQuorumPeer
  10.     31216 NameNode

6) 打开hbase命令行客户端

  1. ~/hbase-0.94.2/bin/hbase shell
  2. HBase Shell; enter 'help<RETURN>' for list of supported commands.
  3. Type "exit<RETURN>" to leave the HBase Shell
  4. Version 0.94.2, r1395367, Sun Oct  7 19:11:01 UTC 2012
  5. hbase(main):001:0> list
  6.     TABLE
  7.     0 row(s) in 0.0150 seconds

HBase安装完成。

2. rhbase安装

文字说明部分:

安装完成HBase后,我们还需要安装Thrift,因为rhbase是通过Thrift调用HBase的。

Thrift是需要本地编译的,官方没有提供二进制安装包,首先下载thrift-0.8.0。

在thrift解压目录输入./configure,会列Thrift在当前机器所支持的语言环境,如果只是为了rhbase默认配置就可以了。
在我的配置中除了希望支持rhbase访问,还支持PHP,Python,C++。因此需要在系统中,装一些额外的类库。大家可以根据自己的要求,设置Thrift的编译参数。

编译并安装Thrift,然后启动HBase的ThriftServer服务。

最后,安装rhbase。

代码部分:

  1. 下载thrift
    1. ~ wget http://archive.apache.org/dist/thrift/0.8.0/thrift-0.8.0.tar.gz
    2. ~ tar xvf thrift-0.8.0.tar.gz
    3. ~ cd thrift-0.8.0/
  2. 下载PHP支持类库(可选)
    1. ~ sudo apt-get install php-cli
  3. 下载C++支持类库(可选)
    1. ~ sudo apt-get install libboost-dev libboost-test-dev libboost-program-options-dev libevent-dev automake libtool flex bison pkg-config g++ libssl-dev
  4. 生成编译的配置参数
    1. ~ ./configure
    2.   thrift 0.8.0
    3.   Building code generators ..... :
    4.   Building C++ Library ......... : yes
    5.   Building C (GLib) Library .... : no
    6.   Building Java Library ........ : no
    7.   Building C# Library .......... : no
    8.   Building Python Library ...... : yes
    9.   Building Ruby Library ........ : no
    10.   Building Haskell Library ..... : no
    11.   Building Perl Library ........ : no
    12.   Building PHP Library ......... : yes
    13.   Building Erlang Library ...... : no
    14.   Building Go Library .......... : no
    15.   Building TZlibTransport ...... : yes
    16.   Building TNonblockingServer .. : yes
    17.   Using Python ................. : /usr/bin/python
    18.   Using php-config ............. : /usr/bin/php-config
  5. 编译和安装
    1. ~ make
    2. ~ make install
  6. 查看thrift版本
    1. ~ thrift -version
    2.   Thrift version 0.8.0
  7. 启动HBase的Thrift Server
    1. ~ /hbase-0.94.2/bin/hbase-daemon.sh start thrift
    2.  ~ jps
    3.      12041 HMaster
    4.      12209 HRegionServer
    5.      13222 ThriftServer
    6.      31734 TaskTracker
    7.      31343 DataNode
    8.      31499 SecondaryNameNode
    9.      13328 Jps
    10.      31596 JobTracker
    11.      11916 HQuorumPeer
    12.      31216 NameNode
  8. 安装rhbase
    1. ~ R CMD INSTALL rhbase_1.1.1.tar.gz

很顺利的安装完成。

3. rhbase的相关函数

  1. hb.compact.table      hb.describe.table        hb.insert                         hb.regions.table
  2. hb.defaults                  hb.get                           hb.insert.data.frame     hb.scan
  3. hb.delete                     hb.get.data.frame      hb.list.tables                   hb.scan.ex
  4. hb.delete.table           hb.init                           hb.new.table                  hb.set.table.mode

4. hbase和rhbase的基本操作对比

  1. 建表
  2. HBASE:     create 'student_shell','info'
  3. RHBASE:    hb.new.table("student_rhbase","info")
  4. 列出所有表
  5. HBASE:     list
  6. RHBASE:    hb.list.tables()
  7. 显示表结构
  8. HBASE:     describe 'student_shell'
  9. RHBASE:    hb.describe.table("student_rhbase")
  10. 插入一条数据
  11. HBASE:     put 'student_shell','mary','info:age','19'
  12. RHBASE:    hb.insert("student_rhbase",list(list("mary","info:age", "24")))
  13. 读取数据
  14. HBASE:     get 'student_shell','mary'
  15. RHBASE:    hb.get('student_rhbase','mary')
  16. 删除表(HBASE需要两条命令,rhbase仅是一个操作)
  17. HBASE:     disable 'student_shell'
  18. HBASE:     drop 'student_shell'
  19. RHBASE:    hb.delete.table('student_rhbase')

代码部分:

Hbase Shell

  1. > create 'student_shell','info'
  2. > list
  3.     TABLE
  4.     student_shell
  5. > describe 'student_shell'
  6.    DESCRIPTION                                                          ENABLED
  7.    {NAME => 'student_shell', FAMILIES => [{NAME => 'info', DATA_BLOCK_ true
  8.    ENCODING => 'NONE', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0'
  9.    , VERSIONS => '3', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL
  10.    => '2147483647', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536
  11.    ', IN_MEMORY => 'false', ENCODE_ON_DISK => 'true', BLOCKCACHE => 't
  12.    rue'}]}
  13. >  put 'student_shell','mary','info:age','19'
  14. >  get 'student_shell','mary'
  15.   COLUMN                      CELL
  16.   info:age                   timestamp=1365414964962, value=19
  17. > disable 'student_shell'
  18. > drop 'student_shell'

rhbase script

  1. ~ R
  2. > library(rhbase)
  3. > hb.init()
  4.     <pointer: 0x16494a0>
  5.     attr(,"class")
  6.     [1] "hb.client.connection"
  7.  >hb.new.table("student_rhbase","info",opts=list(maxversions=5,x=list(maxversions=1L,compression='GZ',inmemory=TRUE)))
  8.    [1] TRUE
  9. > hb.list.tables()
  10.     $student_rhbase
  11.       maxversions compression inmemory bloomfiltertype bloomfiltervecsize
  12.     info:           5        NONE    FALSE            NONE                  0
  13.           bloomfilternbhashes blockcache timetolive
  14.     info:                   0      FALSE         -1
  15.  > hb.describe.table("student_rhbase")
  16.           maxversions compression inmemory bloomfiltertype bloomfiltervecsize
  17.     info:           5        NONE    FALSE            NONE                  0
  18.           bloomfilternbhashes blockcache timetolive
  19.     info:                   0      FALSE         -1
  20. > hb.insert("student_rhbase",list(list("mary","info:age""24")))
  21.     [1] TRUE
  22. > hb.get('student_rhbase','mary')
  23.     [[1]]
  24.     [[1]][[1]]
  25.     [1] "mary"
  26.     [[1]][[2]]
  27.     [1] "info:age"
  28.     [[1]][[3]]
  29.     [[1]][[3]][[1]]
  30.     [1] "24"
  31. > hb.delete.table('student_rhbase')
  32.     [1] TRUE

RHadoop实践系列文章的第四篇完成!希望这个四篇文章对大家有所帮助。

稍后我可能还会写一些,关于rmr算法实践,rhadoop架构方面和hive的使用的相关文章。

欢迎大家多提问题,多交流。

关于作者:

  • 张丹(Conan), 程序员Java,R,PHP,Javascript
  • weibo:@Conan_Z
  • blog: http://blog.fens.me
  • email: bsspirit@gmail.com

转载请注明出处:

http://blog.fens.me/rhadoop-hbase-rhase/

南霁月
R语言实战(中文完整版)
Excel数据可视化分析方法大全
数学建模教材(包括十大算法、matlab、lingo、spss、exce以及多种实例模型)
误差分位数的默示有效估计与\ 自回归时间序列的预测区间

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: