まず、 実験の目的
端末と使用した実験の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包