端末とCRUD操作のためのJava APIの使用のHBase

まず、  実験の目的

端末と使用した実験のJava API のためのHBaseを非リレーショナルデータベースの構造とどのようにリレーショナルデータベースフィリピン使用する方法を知って、比較の非リレーショナルデータベースとリレーショナルデータベースを理解し、操作するために学ぶために、CRUD操作可能のHBaseを

第二に、  実験の内容

教師は、可能な限り完全なコンテンツを提供し、どのくらいあなたはずっと書くのですか

第三に、  実験的なアイデア、構造

最初に HBaseのLinuxのコマンドラインに道の下で達成テーブル、CRUD操作を構築します

その後、使用 Elipseを使用したJava でプログラミングをのHBase 構成表、CRUD操作。

第四に、  実験結果

HBaseのは、次のようにテーブルを作成してコマンドを作成します。

 

この時点で、それが作成されます SNAME、Ssex、セージ、Sdept:「学生」の表では、属性 、コースを。HBaseのテーブルには、テーブル名を入れて最初の操作コマンドの後に独自のデフォルトデータを作成することなく、キーラインとして、デフォルトの属性を持つことになりますので。「学生」の表を作成した後、describeコマンドによって、基本的な情報「学生」の表を表示することができます。スクリーンショットには、次のコマンドを実行します。

 

そして、実行のHBase の追加は、検索操作を変更します。データを追加する場合、 HBaseのは、自動的にタイムスタンプデータを追加することは変更する必要があるとき、単に、すなわちHBaseのは、それによって操作「に」完成、新バージョンを生成します、直接データを追加し、追加され、古いバージョンがまだありますテーブルを作成するときに予約が、最新バージョンのほんの数を残して、定期的にシステムゴミデータは、保存されたのバージョン番号を指定することができます。

 

1. データを追加します。

HBaseの注意、putコマンドを使用してデータを追加:データの一方のみ行がテーブルの列であり、すなわち、セルデータを追加するので、直接挿入シェルコマンドデータ効率は、一般に、実用的なアプリケーションでは、非常に低いですデータプログラミング動作を使用して。

 この場合、データのLiYing行という名前のテーブルの学校の生徒数95001、95001のラインキーを追加します。HBaseのテーブルには、テーブル名を入れて最初の操作コマンドの後に独自のデフォルトデータを作成することなく、キーラインとして、デフォルトの属性を持つことになりますので。

この場合、ある 95001 ラインでのコース列グループの数学の列のデータを追加します。

 

2. データの削除

HBaseと削除データ操作コマンドとDELETEALL、それらの間の差を削除する:1データを削除するための削除、逆の操作が置かれ、データの行を削除するように動作可能な2 DELETEALLを...

この時点で削除コラムSsex 95001行の下に学生にテーブル内のすべてのデータを。

DELETEALL コマンド

DELETEALL「学生は」、「95001」削除するコマンド 95001 行にあるデータのすべての行のすべての列を。

 

3. データを表示

HBaseのデータを表示するための2つのコマンドがあります:1 getコマンドは、データ線のテーブルを表示するために使用され、2スキャンコマンドは、テーブル内のすべてのデータを表示するために使用されます...

取得コマンドを

戻り値のデータ「学生」テーブル「95001」行。

スキャンコマンド

これが返されます「学生全体のデータテーブルを。

また、基本的な履歴データを照会することができます

ルックアップテーブルの歴史のバージョンでは、2つのステップが必要です。

(1)。表を作成するとき、保存されたバージョンの数を指定する(それを仮定するように指定されている 5)

(2)データを挿入し、データの過去のバージョンを生成するためにデータを更新し、重要:ここでデータを有するインサートと更新データはコマンドを入れて

(3)場合、クエリ、過去のバージョンのクエリ指定された数。デフォルトでは、最新のデータをチェックアウトします。(1〜5の実効値)

 

4. 表を削除します。

テーブルには2つのステップを持って削除し、テーブルを聞かせする最初のステップは、テーブルを削除する2番目のステップは使用できません。

 

使用 Elipseのためのプログラミングを HBaseの検索を変更するには追加および削除

コード:

  1 import org.apache.hadoop.conf.Configuration;
  2 import org.apache.hadoop.hbase.*;
  3 import org.apache.hadoop.hbase.client.*;
  4 import java.io.IOException;
  5  
  6 public class ExampleForHbase
  7 {
  8     public static Configuration configuration;
  9     public static Connection connection;
 10     public static Admin admin;
 11  
 12     //主函数中的语句请逐句执行,只需删除其前的//即可,如:执行insertRow时请将其他语句注释
 13     public static void main(String[] args)throws IOException
 14     {
 15         //创建一个表,表名为Score,列族为sname,course
 16         //createTable("Score",new String[]{"sname","course"});
 17  
 18         //在Score表中插入一条数据,其行键为95001,sname为Mary(因为sname列族下没有子列所以第四个参数为空)
 19         //等价命令:put 'Score','95001','sname','Mary'
 20         //insertRow("Score", "95001", "sname", "", "Mary");
 21         //在Score表中插入一条数据,其行键为95001,course:Math为88(course为列族,Math为course下的子列)
 22         //等价命令:put 'Score','95001','score:Math','88'
 23         //insertRow("Score", "95001", "course", "Math", "88");
 24         //在Score表中插入一条数据,其行键为95001,course:English为85(course为列族,English为course下的子列)
 25         //等价命令:put 'Score','95001','score:English','85'
 26         //insertRow("Score", "95001", "course", "English", "85");
 27  
 28         //1、删除Score表中指定列数据,其行键为95001,列族为course,列为Math
 29         //执行这句代码前请deleteRow方法的定义中,将删除指定列数据的代码取消注释注释,将删除制定列族的代码注释
 30         //等价命令:delete 'Score','95001','score:Math'
 31         //deleteRow("Score", "95001", "course", "Math");
 32  
 33         //2、删除Score表中指定列族数据,其行键为95001,列族为course(95001的Math和English的值都会被删除)
 34         //执行这句代码前请deleteRow方法的定义中,将删除指定列数据的代码注释,将删除制定列族的代码取消注释
 35         //等价命令:delete 'Score','95001','score'
 36         //deleteRow("Score", "95001", "course", "");
 37  
 38         //3、删除Score表中指定行数据,其行键为95001
 39         //执行这句代码前请deleteRow方法的定义中,将删除指定列数据的代码注释,以及将删除制定列族的代码注释
 40         //等价命令:deleteall 'Score','95001'
 41         //deleteRow("Score", "95001", "", "");
 42  
 43         //查询Score表中,行键为95001,列族为course,列为Math的值
 44         //getData("Score", "95001", "course", "Math");
 45         //查询Score表中,行键为95001,列族为sname的值(因为sname列族下没有子列所以第四个参数为空)
 46         //getData("Score", "95001", "sname", "");
 47  
 48         //删除Score表
 49         //deleteTable("Score");
 50     }
 51  
 52     //建立连接
 53     public static void init()
 54     {
 55         configuration  = HBaseConfiguration.create();
 56         configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
 57         try
 58         {
 59             connection = ConnectionFactory.createConnection(configuration);
 60             admin = connection.getAdmin();
 61         }
 62         catch (IOException e)
 63         {
 64             e.printStackTrace();
 65         }
 66     }
 67     //关闭连接
 68     public static void close()
 69     {
 70         try
 71         {
 72             if(admin != null)
 73             {
 74                 admin.close();
 75             }
 76             if(null != connection)
 77             {
 78                 connection.close();
 79             }
 80         }
 81         catch (IOException e)
 82         {
 83             e.printStackTrace();
 84         }
 85     }
 86  
 87     /**
 88      * 建表。HBase的表中会有一个系统默认的属性作为主键,主键无需自行创建,默认为put命令操作中表名后第一个数据,因此此处无需创建id列
 89      * @param myTableName 表名
 90      * @param colFamily 列族名
 91      * @throws IOException
 92      */
 93     public static void createTable(String myTableName,String[] colFamily) throws IOException 
 94     {
 95  
 96         init();
 97         TableName tableName = TableName.valueOf(myTableName);
 98  
 99         if(admin.tableExists(tableName))
100         {
101             System.out.println("talbe is exists!");
102         }
103         else 
104         {
105             HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);
106             for(String str:colFamily)
107             {
108                 HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(str);
109                 hTableDescriptor.addFamily(hColumnDescriptor);
110             }
111             admin.createTable(hTableDescriptor);
112             System.out.println("create table success");
113         }
114         close();
115     }
116     /**
117      * 删除指定表
118      * @param tableName 表名
119      * @throws IOException
120      */
121     public static void deleteTable(String tableName) throws IOException 
122     {
123         init();
124         TableName tn = TableName.valueOf(tableName);
125         if (admin.tableExists(tn)) 
126         {
127             admin.disableTable(tn);
128             admin.deleteTable(tn);
129         }
130         close();
131     }
132  
133     /**
134      * 查看已有表
135      * @throws IOException
136      */
137     public static void listTables() throws IOException 
138     {
139         init();
140         HTableDescriptor hTableDescriptors[] = admin.listTables();
141         for(HTableDescriptor hTableDescriptor :hTableDescriptors)
142         {
143             System.out.println(hTableDescriptor.getNameAsString());
144         }
145         close();
146     }
147     /**
148      * 向某一行的某一列插入数据
149      * @param tableName 表名
150      * @param rowKey 行键
151      * @param colFamily 列族名
152      * @param col 列名(如果其列族下没有子列,此参数可为空)
153      * @param val 值
154      * @throws IOException
155      */
156     public static void insertRow(String tableName,String rowKey,String colFamily,String col,String val) throws IOException 
157     {
158         init();
159         Table table = connection.getTable(TableName.valueOf(tableName));
160         Put put = new Put(rowKey.getBytes());
161         put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());
162         table.put(put);
163         table.close();
164         close();
165     }
166  
167     /**
168      * 删除数据
169      * @param tableName 表名
170      * @param rowKey 行键
171      * @param colFamily 列族名
172      * @param col 列名
173      * @throws IOException
174      */
175     public static void deleteRow(String tableName,String rowKey,String colFamily,String col) throws IOException 
176     {
177         init();
178         Table table = connection.getTable(TableName.valueOf(tableName));
179         Delete delete = new Delete(rowKey.getBytes());
180         //删除指定列族的所有数据
181         //delete.addFamily(colFamily.getBytes());
182         //删除指定列的数据
183         //delete.addColumn(colFamily.getBytes(), col.getBytes());
184  
185         table.delete(delete);
186         table.close();
187         close();
188     }
189     /**
190      * 根据行键rowkey查找数据
191      * @param tableName 表名
192      * @param rowKey 行键
193      * @param colFamily 列族名
194      * @param col 列名
195      * @throws IOException
196      */
197     public static void getData(String tableName,String rowKey,String colFamily,String col)throws  IOException
198     {
199         init();
200         Table table = connection.getTable(TableName.valueOf(tableName));
201         Get get = new Get(rowKey.getBytes());
202         get.addColumn(colFamily.getBytes(),col.getBytes());
203         Result result = table.get(get);
204         showCell(result);
205         table.close();
206         close();
207     }
208     /**
209      * 格式化输出
210      * @param result
211      */
212     public static void showCell(Result result)
213     {
214         Cell[] cells = result.rawCells();
215         for(Cell cell:cells)
216         {
217             System.out.println("RowName:"+new String(CellUtil.cloneRow(cell))+" ");
218             System.out.println("Timetamp:"+cell.getTimestamp()+" ");
219             System.out.println("column Family:"+new String(CellUtil.cloneFamily(cell))+" ");
220             System.out.println("row Name:"+new String(CellUtil.cloneQualifier(cell))+" ");
221             System.out.println("value:"+new String(CellUtil.cloneValue(cell))+" ");
222         }
223     }
224 }

 

建表成功

 

在执行完代码中的所有插入操作以后可以看到表中数据为:

 

 

执行三个不同层次的删除操作后表中已经没有数据了

 

再重新执行一个插入数据的操作

然后执行第一个getData操作

 

再执行第二个getData操作

 最后删除表。

五、 心得体会

做实验的时候要细心,注意具体导入的是哪个地方的jar

 

おすすめ

転載: www.cnblogs.com/ku1274755259/p/11108808.html