zoukankan      html  css  js  c++  java
  • 【转】在Ubuntu中安装HBase

      原博客出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/      感谢!

    在Ubuntu中安装HBase

    R利剑NoSQL系列文章,主要介绍通过R语言连接使用nosql数据库。涉及的NoSQL产品,包括RedisMongoDBHBaseHiveCassandraNeo4j。希望通过我的介绍让广大的R语言爱好者,有更多的开发选择,做出更多地激动人心的应用。

    关于作者:

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

    转载请注明出处:
    http://blog.fens.me/linux-hbase-install/

    linux-hbase

    前言

    HBase是Hadoop家族中的一个分布式数据库产品,HBase支持高并发读写,列式数据存储,高效的索引,自动分片,自动Region迁移等许多优点,已经越来越多的被界业认可并实施。

    目录

    1. 在Ubuntu中环境准备
    2. HBase安装
    3. Thrift安装

    1 在Ubuntu中环境准备

    HBase是基于Java开发的运行Hadoop平台上分布式NoSQL数据库软件,HBase没有提供Windows系统安装版本。我在这里也只介绍HBase在Linux Ubuntu系统中的安装。

    由于HBase是运行在Hadoop平台上面的,因此我们需要先安装好Hadoop的环境,Hadoop的安装请参考文章:[Hadoop历史版本安装](http://blog.fens.me/hadoop-history-source-install/)

    HBase没有提供apt的软件源安装,我们需要自己去官方网络下载HBase软件包进行安装。HBase下载页:http://www.apache.org/dyn/closer.cgi/hbase/

    系统环境:

    • Linux Ubuntu 12.04.2 LTS 64bit server
    • Java JDK 1.6.0_45
    • Hadoop 1.1.2

    2 HBase安装

    2.1 下载HBase

    
    # 通过wget命令下载
    ~ wget http://www.gaidso.com/apache/hbase/stable/hbase-0.94.18.tar.gz
    
    # 解压HBase
    ~ tar xvf hbase-0.94.18.tar.gz
    
    # 移动HBase目录到文件夹
    ~ mv hbase-0.94.18/ /home/conan/hadoop/
    
    # 进入目录
    ~ cd /home/conan/hadoop/hbase-0.94.18
    

    2.2 配置HBase

    2.2.1 修改启动文件hbase-env.sh

    
    ~ vi conf/hbase-env.sh
    
    #打开注释
    export JAVA_HOME=/home/conan/toolkit/jdk16
    export HBASE_CLASSPATH=/home/conan/hadoop/hadoop-1.1.2/conf
    export HBASE_MANAGES_ZK=true
    

    2.2.2 修改配置文件 hbase-site.xml

    
    ~ vi conf/hbase-site.xml
    
    <configuration>
    <property>
    <name>hbase.rootdir</name>
    <value>hdfs://master:9000/hbase</value>
    </property>
    
    <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    </property>
    
    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>
    
    <property>
    <name>hbase.zookeeper.quorum</name>
    <value>master</value>
    </property>
    
    <property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
    </property>
    
    <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/home/conan/hadoop/hdata</value>
    </property>
    </configuration>
    

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

    
    ~ cp ~/hadoop/hadoop-1.1.2/conf/hdfs-site.xml conf/
    ~ cp ~/hadoop/hadoop-1.1.2/hadoop-core-1.1.2.jar lib/
    ~ mkdir /home/conan/hadoop/hdata
    

    2.3 启动hadoop和hbase

    
    ~ /home/conan/hadoop/hadoop-1.1.2/bin/start-all.sh
    ~ /home/conan/hadoop/hbase-0.94.18/bin/start-hbase.sh
    
    # 查看hbase进程
    ~ jps
    13838 TaskTracker
    13541 JobTracker
    15946 HMaster
    16756 Jps
    12851 NameNode
    13450 SecondaryNameNode
    13133 DataNode
    15817 HQuorumPeer
    16283 HRegionServer
    

    2.4 打开HBase命令行客户端访问Hbase

    
    ~ bin/hbase shell
    HBase Shell; enter 'help' for list of supported commands.
    Type "exit" to leave the HBase Shell
    Version 0.94.18, r1577788, Sat Mar 15 04:46:47 UTC 2014
    
    hbase(main):002:0> help
    HBase Shell, version 0.94.18, r1577788, Sat Mar 15 04:46:47 UTC 2014
    Type 'help "COMMAND"', (e.g. 'help "get"' -- the quotes are necessary) for help on a specific command.
    Commands are grouped. Type 'help "COMMAND_GROUP"', (e.g. 'help "general"') for help on a command group.
    
    COMMAND GROUPS:
      Group name: general
      Commands: status, version, whoami
    
      Group name: ddl
      Commands: alter, alter_async, alter_status, create, describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, is_disabled, is_enabled, list, show_filters
    
      Group name: dml
      Commands: count, delete, deleteall, get, get_counter, incr, put, scan, truncate
    
      Group name: tools
      Commands: assign, balance_switch, balancer, close_region, compact, flush, hlog_roll, major_compact, move, split, unassign, zk_dump
    
      Group name: replication
      Commands: add_peer, disable_peer, enable_peer, list_peers, list_replicated_tables, remove_peer, start_replication, stop_replication
    
      Group name: snapshot
      Commands: clone_snapshot, delete_snapshot, list_snapshots, restore_snapshot, snapshot
    
      Group name: security
      Commands: grant, revoke, user_permission
    
    SHELL USAGE:
    Quote all names in HBase Shell such as table and column names.  Commas delimit
    command parameters.  Type  after entering a command to run it.
    Dictionaries of configuration used in the creation and alteration of tables are
    Ruby Hashes. They look like this:
    
      {'key1' => 'value1', 'key2' => 'value2', ...}
    
    and are opened and closed with curley-braces.  Key/values are delimited by the
    '=>' character combination.  Usually keys are predefined constants such as
    NAME, VERSIONS, COMPRESSION, etc.  Constants do not need to be quoted.  Type
    'Object.constants' to see a (messy) list of all constants in the environment.
    
    If you are using binary keys or values and need to enter them in the shell, use
    double-quote'd hexadecimal representation. For example:
    
      hbase> get 't1', "keyx03x3fxcd"
      hbase> get 't1', "key032311"
      hbase> put 't1', "testxefxff", 'f1:', "x01x33x40"
    
    The HBase shell is the (J)Ruby IRB with the above HBase-specific commands added.
    For more on the HBase Shell, see http://hbase.apache.org/docs/current/book.html
    

    2.5 HBase简单命令操作

    
    #创建一个新表student
    hbase(main):003:0> create 'student','info'
    0 row(s) in 1.2680 seconds
    
    #查看所有的表
    hbase(main):004:0> list
    TABLE
    student
    1 row(s) in 0.0330 seconds
    
    #查看student的表结构
    hbase(main):005:0> describe 'student'
    DESCRIPTION                                                 ENABLED
     'student', {NAME => 'info', DATA_BLOCK_ENCODING => 'NONE', true
      BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS
      => '3', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL =
     > '2147483647', KEEP_DELETED_CELLS => 'false', BLOCKSIZE =
     > '65536', IN_MEMORY => 'false', ENCODE_ON_DISK => 'true',
      BLOCKCACHE => 'true'}
    1 row(s) in 0.1100 seconds
    
    #同student表中插入一条数据
    hbase(main):007:0> put 'student','mary','info:age','19'
    0 row(s) in 0.0490 seconds
    
    #从student表中取出mary的数据
    hbase(main):008:0> get 'student','mary'
    COLUMN                   CELL
     info:age                timestamp=1396366643298, value=19
    1 row(s) in 0.0190 seconds
    
    #让student表失效
    hbase(main):009:0> disable 'student'
    0 row(s) in 1.2400 seconds
    
    #列出所有表
    hbase(main):010:0> list
    TABLE
    student
    1 row(s) in 0.0310 seconds
    
    #删除student表
    hbase(main):013:0>  drop 'student'
    0 row(s) in 1.1100 seconds
    
    #列出所有表
    hbase(main):014:0> list
    TABLE
    0 row(s) in 0.0400 seconds
    

    3 Thrift安装

    安装完成HBase后,我们还需要安装Thrift,因为其他语言调用HBase的时候,是通过Thrift连接的。

    Thrift是需要本地编译的,官方没有提供二进制安装包,首先下载thrift-0.9.1,Thrift下载页:http://thrift.apache.org/download

    3.1 下载thrift

    下载Thrift有两种方式,直接下载源代码发行包,或者通过git下载源代码,请选择其中一种方式下载。

    3.1.1 直接下载源代码发行包 thrift-0.9.1.tar.gz

    
    ~ wget http://apache.fayea.com/apache-mirror/thrift/0.9.1/thrift-0.9.1.tar.gz
    ~ tar xvf thrift-0.9.1.tar.gz
    ~ mv thrift-0.9.1/ /home/conan/hadoop/
    ~ cd /home/conan/hadoop/
    

    注:后文中的各种错误,都是这个包引起的

    3.1.2 通过git下载源代码

    
    ~ git clone https://git-wip-us.apache.org/repos/asf/thrift.git thrift-git
    ~ mv thrift-git/ /home/conan/hadoop/
    ~ cd /home/conan/hadoop/
    

    为了避免各种出错,建议使用git下载源代码安装

    3.2 通过thrift-0.9.1.tar.gz 发行包安装Thrift

    Thrift是需要本地编译的,在Thrift解压目录输入./configure,会列Thrift在当前机器所支持的语言环境。

    3.2.1 安装Thrift的依赖包

    
    sudo apt-get install libboost-dev libboost-test-dev libboost-program-options-dev libevent-dev automake libtool flex bison pkg-config g++ libssl-dev
    

    如果只是为了连接rhbase,默认配置就可以了。如果除了希望支持rhbase访问,还支持PHP,Python,C++等语言的访问,就需要在系统中,装一些额外的类库。大家可以根据自己的要求,安装对应的软件包并设置Thrift的编译参数。

    生成配置脚本

    
    ~  ./configure
    
    //省略部分日志输出
    
    thrift 0.9.1
    
    Building C++ Library ......... : yes
    Building C (GLib) Library .... : no
    Building Java Library ........ : yes
    Building C# Library .......... : no
    Building Python Library ...... : yes
    Building Ruby Library ........ : no
    Building Haskell Library ..... : no
    Building Perl Library ........ : no
    Building PHP Library ......... : no
    Building Erlang Library ...... : no
    Building Go Library .......... : no
    Building D Library ........... : no
    
    C++ Library:
       Build TZlibTransport ...... : yes
       Build TNonblockingServer .. : yes
       Build TQTcpServer (Qt) .... : no
    
    Java Library:
       Using javac ............... : javac
       Using java ................ : java
       Using ant ................. : /home/conan/toolkit/ant184/bin/ant
    
    Python Library:
       Using Python .............. : /usr/bin/python
    
    If something is missing that you think should be present,
    please skim the output of configure to find the missing
    component.  Details are present in config.log.
    

    我本机的已支持C++, Java与Thrift的通信。

    3.2.2 增加Python语言的通信

    虽然Python已被显示支持与Thrift但在后面编译过程中,还是缺少一些Python的库,我们需要再增加Python的依赖库

    安装Python的依赖包

    
    sudo apt-get install python-all python-all-dev python-all-dbg
    

    3.2.3 增加PHP语言的通信

    安装PHP的依赖包

    
    sudo apt-get install php5-dev php5-cli phpunit
    

    生成配置脚本

    
    ~  ./configure --enable-thrift_protocol
    
    //省略部分日志输出
    
    thrift 0.9.1
    
    Building C++ Library ......... : yes
    Building C (GLib) Library .... : no
    Building Java Library ........ : yes
    Building C# Library .......... : no
    Building Python Library ...... : yes
    Building Ruby Library ........ : no
    Building Haskell Library ..... : no
    Building Perl Library ........ : no
    Building PHP Library ......... : yes
    Building Erlang Library ...... : no
    Building Go Library .......... : no
    Building D Library ........... : no
    
    C++ Library:
       Build TZlibTransport ...... : yes
       Build TNonblockingServer .. : yes
       Build TQTcpServer (Qt) .... : no
    
    Java Library:
       Using javac ............... : javac
       Using java ................ : java
       Using ant ................. : /home/conan/toolkit/ant184/bin/ant
    
    Python Library:
       Using Python .............. : /usr/bin/python
    
    PHP Library:
       Using php-config .......... : /usr/bin/php-config
    
    If something is missing that you think should be present,
    please skim the output of configure to find the missing
    component.  Details are present in config.log.
    

    我们看到Thrift的配置中,增加了对PHP语言的支持。

    3.2.4 编译和安装

    
    # 编译Thrift
    ~ make
    
    //省略部分日志
    
    make[5]: 正在进入目录 `/home/conan/hadoop/thrift-0.9.1/lib/php/src/ext/thrift_protocol'
    make[5]: *** 没有指明目标并且找不到 makefile。 停止。
    make[5]:正在离开目录 `/home/conan/hadoop/thrift-0.9.1/lib/php/src/ext/thrift_protocol'
    make[4]: *** [src/ext/thrift_protocol/modules/thrift_protocol.so] 错误 2
    make[4]:正在离开目录 `/home/conan/hadoop/thrift-0.9.1/lib/php'
    make[3]: *** [all-recursive] 错误 1
    make[3]:正在离开目录 `/home/conan/hadoop/thrift-0.9.1/lib/php'
    make[2]: *** [all-recursive] 错误 1
    make[2]:正在离开目录 `/home/conan/hadoop/thrift-0.9.1/lib'
    make[1]: *** [all-recursive] 错误 1
    make[1]:正在离开目录 `/home/conan/hadoop/thrift-0.9.1'
    make: *** [all] 错误 2
    

    在make生成过程,出现PHP的编译错误。从Thrift的错误列表中,我们可以找到错误描述( https://issues.apache.org/jira/browse/THRIFT-2265 ),这是由于Thrift-0.9.1发行包,打包时缺少了PHP扩展文件造成的错误,并在Thrift-0.9.2版本中修复。

    所以,我们如果还想继续使用Thrift-0.9.1版本,则不能支持PHP语言。

    
    # 生成配置信息,不包括PHP模块
    ~ ./configure --without-php_extension
    
    # 编译Thrift
    ~ make
    

    编译过程中,又出现了C++编译错误。

    
    Makefile:832: 警告:覆盖关于目标“gen-cpp/ThriftTest.cpp”的命令
    Makefile:829: 警告:忽略关于目标“gen-cpp/ThriftTest.cpp”的旧命令
    /bin/bash ../../libtool --tag=CXX   --mode=link g++ -Wall -g -O2 -L/usr/lib   -o libtestgencpp.la  ThriftTest_constants.lo ThriftTest_types.lo ../../lib/cpp/libthrift.la -lssl -lcrypto -lrt -lpthread
    libtool: link: ar cru .libs/libtestgencpp.a .libs/ThriftTest_constants.o .libs/ThriftTest_types.o
    ar: .libs/ThriftTest_constants.o: No such file or directory
    make[3]: *** [libtestgencpp.la] 错误 1
    make[3]:正在离开目录 `/home/conan/hadoop/thrift-0.9.1/test/cpp'
    make[2]: *** [all-recursive] 错误 1
    make[2]:正在离开目录 `/home/conan/hadoop/thrift-0.9.1/test'
    make[1]: *** [all-recursive] 错误 1
    make[1]:正在离开目录 `/home/conan/hadoop/thrift-0.9.1'
    make: *** [all] 错误 2
    

    对于上面的2个编译错误,我决定换成git源代码的版本重新操作。

    3.2 通过git源代码安装Thrift

    运行安装命令

    
    # 进行thrift-git目录
    ~ cd /home/conan/hadoop/thrift-git
    
    # 复制0.9.1标签到新分支thrift-0.9.1
    ~ git checkout -b thrift-0.9.1 0.9.1
    
    # 产生配置脚本
    ~ ./bootstrap.sh
    
    # 生成配置信息
    ~ ./configure
    
    # 编译Thrift
    ~ make
    
    # 安装Thrift
    ~ sudo make install
    

    走了许多弯路,终于使用git源代码版本安装好了Thrift。

    查看thrift版本

    
    ~ thrift -version
    Thrift version 0.9.1
    

    接下来,我们启动HBase的Thrift Server服务

    
    # 启动HBase的Thrift服务
    ~ /home/conan/hadoop/hbase-0.94.18/bin/hbase-daemon.sh start thrift
    starting thrift, logging to /home/conan/hadoop/hbase-0.94.18/bin/../logs/hbase-conan-thrift-master.out
    
    # 检查系统进程
    ~ jps
    13838 TaskTracker
    13541 JobTracker
    15946 HMaster
    32120 Jps
    12851 NameNode
    13450 SecondaryNameNode
    13133 DataNode
    32001 ThriftServer
    15817 HQuorumPeer
    16283 HRegionServer
    

    我们看到ThriftServer已被启动,后面我们就可以使用多种语言,通过Thrift来访问HBase了,这样就完成了HBase的安装。

    转载请注明出处:
    http://blog.fens.me/linux-hbase-install/

  • 相关阅读:
    sphinx安装
    如何获取原生数据
    DOM详解
    JavaScript简单入门(补充篇)
    JavaScript的简单入门
    Java正则表达式练习
    Java反射机制(Reflect)解析
    21070118记
    CSS3设置Table奇数行和偶数行样式
    获取当前地址
  • 原文地址:https://www.cnblogs.com/zlslch/p/6039804.html
Copyright © 2011-2022 走看看