欢迎投稿

今日深度:

hbase基本语法,

hbase基本语法,


 hbase 基础命令
(以下部分摘抄网络)
============================创建blogtable表=========================
create 'blogtable', 'info','text','comment_title','comment_author','comment_text'
< !--info,text等代表的是列簇,不是具体的列,可以在插入数据是任意的添加具体的列簇-->

============================插入概要信息=========================
put 'blogtable', '1', 'info:title', 'this is doc title'
put 'blogtable', '1', 'info:author', 'javabloger'
put 'blogtable', '1', 'info:url', 'http://www.javabloger.com/index.php'

put 'blogtable', '2', 'info:title', 'this is doc title2'
put 'blogtable', '2', 'info:author', 'H.E.'
put 'blogtable', '2', 'info:url', 'http://www.javabloger.com/index.html'

============================插入正文信息=========================
put 'blogtable', '1', 'text:', 'what is this doc context ?'
put 'blogtable', '2', 'text:', 'what is this doc context2?'

< ---其中的1,2代表的是id号,只要是string就可以

==========================插入评论信息===============================
put 'blogtable', '1', 'comment_title:', 'this is doc comment_title '
put 'blogtable', '1', 'comment_author:', 'javabloger'
put 'blogtable', '1', 'comment_text:', 'this is nice doc'

put 'blogtable', '2', 'comment_title:', 'this is blog comment_title '
put 'blogtable', '2', 'comment_author:', 'H.E.'
put 'blogtable', '2', 'comment_text:', 'this is nice blog'

==========================搜索方式================================
scan 'blogtable' ,{COLUMNS => ['text:','info:title'] }  —> 列出 文章的内容和标题

scan 'blogtable' , {COLUMNS => 'info:url' , STARTROW => '2'}    —> 根据范围列出 文章的内容和标题

===>get与scan的区别,get方式的执行最终也是转换成scan的方式,get一般要带id号,否则查询内容?

get 'blogtable','1'    —> 列出 文章id 等于1的数据

get 'blogtable','1', {COLUMN => 'info'}    —> 列出 文章id 等于1 的 info 的头(Head)内容

get 'blogtable','1', {COLUMN => 'text'}   —> 列出 文章id 等于1 的 text  的具体(Body)内容

get 'blogtable','1', {COLUMN => ['text','info:author']}  —> 列出 文章id 等于1 的内容和作者(Body/Author)内容
(以上部分摘抄网络)

=========================查询所有的数据库名称=======================
list
=========================查看某表结构===============================
describe ‘表名’
=========================统计表中的记录数===========================
count '表名'    该统计的是所有的行记录。同一行名称的只能算是1条记录

名称  命令表达式  

创建表                              create '表名称', '列名称1','列名称2','列名称N'   
添加记录                          put '表名称', '行名称', '列名称:', '值'
查看记录                          get '表名称', '行名称'
查看表中的记录总数        count  '表名称'
删除记录                delete  '表名' ,'行名称' , '列名称'
删除一张表              先要屏蔽该表,才能对该表进行删除,第一步 disable '表名称' 第二步  drop '表名称'
查看所有记录            scan "表名称"  
某个表某个列中所有数据  scan "表名称" , ['列名称:']
更新记录                就是重写一遍进行覆盖


------------------------------------简单的程序使用----------------------------------


示例程序:
/**
 *
 */

import java.io.IOException;
import java.util.List;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;

public class HBaseTest {

     static HBaseConfiguration cfg = null;
     static {
            Configuration HBASE_CONFIG = new Configuration();
            HBASE_CONFIG.set("hbase.zookeeper.quorum", "xxx.xxx.xxx.193,xxx.xxx.xxx.194,xxx.xxx.xxx.221");
            HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181");
             cfg = new HBaseConfiguration();
//            cfg = new HBaseConfiguration();
        
        }   
        
    public void createTables() throws IOException{
        HBaseAdmin admin = new HBaseAdmin(cfg);
        if(!admin.tableExists("tableForTest")){
            HTableDescriptor tableDesc = new HTableDescriptor("tableForTest");
            //增加列簇
            tableDesc.addFamily(new HColumnDescriptor("name"));
            tableDesc.addFamily(new HColumnDescriptor("salary"));
            tableDesc.addFamily(new HColumnDescriptor("department"));
            tableDesc.addFamily(new HColumnDescriptor("age"));
            tableDesc.addFamily(new HColumnDescriptor("sex"));
            admin.createTable(tableDesc);
        }
    }
    
    public void addRecords() throws IOException{
        HTable table = new HTable(cfg,"tableForTest");
        
        Put row = new Put(String.format("row%09d", 1).getBytes());
        
        row.add("name".getBytes(), null, "name1".getBytes());
        row.add("salary".getBytes(),null,"$1000".getBytes());
        row.add("department".getBytes(),null,"aramy".getBytes());
        row.add("age".getBytes(),null,"24".getBytes());
        row.add("sex".getBytes(),null,"male".getBytes());
        
        Put row1 = new Put(String.format("row%09d", 2).getBytes());
        
        row1.add("name".getBytes(), null, "name2".getBytes());
        row1.add("salary".getBytes(),null,"$2000".getBytes());
        row1.add("department".getBytes(),null,"aramy".getBytes());
        row1.add("age".getBytes(),null,"28".getBytes());
        row1.add("sex".getBytes(),null,"female".getBytes());
        
        Put row2 = new Put("3".getBytes());
        
        row2.add("name".getBytes(), null, "name3".getBytes());
        row2.add("salary".getBytes(),null,"$3000".getBytes());
        row2.add("department".getBytes(),null,"aramy".getBytes());
        row2.add("age".getBytes(),null,"26".getBytes());
        row2.add("sex".getBytes(),null,"female".getBytes());
        
        table.put(row);
        table.put(row1);
        table.put(row3);
    }
    
    public void getRow() throws IOException{
        HTable table = new HTable(cfg,"tableForTest");
        
        Get row = new Get("1".getBytes());
        
        row.addColumn("name".getBytes());
        
        Result result = table.get(row);
        
        List<KeyValue> list = result.list();
        
        for(KeyValue kv:list){
            System.out.println(new String(kv.getKey())+" "+new String(kv.getValue()));
        }
    }
    
    public void delete() throws IOException{
        //删除表
        HBaseAdmin hAdmin = new HBaseAdmin(cfg);
        
        if (hAdmin.tableExists("tableForTest")) {
        
               hAdmin.disableTable("tableForTest");
        
               hAdmin.deleteTable("tableForTest");
        
        }
    }
    
    public static void main(String[] args) throws IOException {
        HBaseTest test = new HBaseTest();
        
        test.addRecords();
        
        test.getRow();
    }
}

问题:(windows环境,172网段)
12/08/07 17:34:59 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=xxx.xxx.xxx.221:2181,xxx.xxx.xxx.194:2181,xxx.xxx.xxx.193:2181 sessionTimeout=180000 watcher=hconnection
12/08/07 17:34:59 INFO zookeeper.ClientCnxn: Opening socket connection to server /xxx.xxx.xxx.193:2181
12/08/07 17:35:08 INFO zookeeper.ClientCnxn: Socket connection established to xxx.xxx.xxx.193/xxx.xxx.xxx.193:2181, initiating session
12/08/07 17:35:08 INFO zookeeper.ClientCnxn: Session establishment complete on server xxx.xxx.xxx.193/xxx.xxx.xxx.193:2181, sessionid = 0x139006921560002, negotiated timeout = 180000
12/08/07 17:35:22 INFO ipc.HbaseRPC: Server at xxx.xxx.xxx.205/xxx.xxx.xxx.205:60020 could not be reached after 1 tries, giving up.

心得:
    总是遇到Server at xxx.xxx.xxx.205/xxx.xxx.xxx.205:60020 could not be reached after 1 tries,当时怀疑的是我的机器连不到192的ip(后来验证,的确是如此,本机是172的网段,服务器是192的网段,首先要连接192网段的时候,解析的xxx.xxx.xxx.205,是没有hbase服务的)。
    后来发现又或许是由于user.name不是root(这也是个问题,即使在同一网段下,没有root权限访问受限的),访问不到192上root权限的hbase。移植程序到192的机器上,这次应该ok了吧?发现还是有问题。。。
    
    (xxx.xxx.xxx.221,linux环境)
12/08/07 18:03:32 INFO zookeeper.ZooKeeper: Client environment:user.name=root
12/08/07 18:03:32 INFO zookeeper.ZooKeeper: Client environment:user.home=/root
12/08/07 18:03:32 INFO zookeeper.ZooKeeper: Client environment:user.dir=/data/HBaseTest
12/08/07 18:03:32 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=localhost:2181 sessionTimeout=180000 watcher=hconnection
12/08/07 18:03:32 INFO zookeeper.ClientCnxn: Opening socket connection to server localhost/xxx.xxx.xxx.205:2181
12/08/07 18:03:33 WARN zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.ConnectException: Connection refused
        at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
        at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:574)
        at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1119)
12/08/07 18:03:34 INFO zookeeper.ClientCnxn: Opening socket connection to server localhost/xxx.xxx.xxx.205:2181



悲剧了,这下该如何解决?为什么读到的server是localhost?(因为连接到本机会默认的识别本机的hostname),又为什么session for server 是null?查了半天资料也没看到网上有什么解决办法,说是classpath的问题。没办法继续找找吧(这个问题困扰了一个下午,后来结合了网上的结论和阅读了一些相关资料,发现查找的时候会查找本机的hostname)

问题解决了,不是由于classpath的问题,和/etc/hosts有关,通过不断的调整测试,发现
原来的/etc/hosts文件是
xxx.xxx.xxx.221  5.xxx.com
xxx.xxx.xxx.194  pp.xxx.com
xxx.xxx.xxx.193  pp2.xxx.com
127.0.0.1        localhost.domain localhost

现在被我更改为
此时我的/etc/hosts文件是
xxx.xxx.xxx.221  5.xxx.com
xxx.xxx.xxx.194  pp.xxx.com
xxx.xxx.xxx.193  pp2.xxx.com
127.0.0.1        localhost

www.htsjk.Com true http://www.htsjk.com/hbase/42143.html NewsArticle hbase基本语法, hbase 基础命令 (以下部分摘抄网络) ============================创建blogtable表========================= create 'blogtable', 'info','text','comment_title','comment_author','comment_text' !--info,t...
相关文章
    暂无相关文章
评论暂时关闭