zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

HBase学习之路 (四)HBase的API操作详解大数据

HBase学习数据API 详解 操作
2023-06-13 09:20:25 时间
Eclipse环境搭建

具体的jar的引入方式可以参考http://www.cnblogs.com/qingyunzong/p/8623309.html

HBase API操作表和数据
 1 import java.io.IOException; 

 2 import java.util.Date; 

 4 import org.apache.hadoop.conf.Configuration; 

 5 import org.apache.hadoop.hbase.HBaseConfiguration; 

 6 import org.apache.hadoop.hbase.HColumnDescriptor; 

 7 import org.apache.hadoop.hbase.HTableDescriptor; 

 8 import org.apache.hadoop.hbase.TableName; 

 9 import org.apache.hadoop.hbase.client.Admin; 

 10 import org.apache.hadoop.hbase.client.Connection; 

 11 import org.apache.hadoop.hbase.client.ConnectionFactory; 

 12 import org.apache.hadoop.hbase.client.Delete; 

 13 import org.apache.hadoop.hbase.client.Get; 

 14 import org.apache.hadoop.hbase.client.Put; 

 15 import org.apache.hadoop.hbase.client.Result; 

 16 import org.apache.hadoop.hbase.client.ResultScanner; 

 17 import org.apache.hadoop.hbase.client.Scan; 

 18 import org.apache.hadoop.hbase.client.Table; 

 20 import com.study.hbase.service.HBaseUtils; 

 22 public class HBaseUtilsImpl implements HBaseUtils { 

 24 private static final String ZK_CONNECT_KEY = "hbase.zookeeper.quorum"; 

 25 private static final String ZK_CONNECT_VALUE = "hadoop1:2181,hadoop2:2181,hadoop3:2181"; 

 27 private static Connection conn = null; 

 28 private static Admin admin = null; 

 30 public static void main(String[] args) throws Exception { 

 32 getConnection(); 

 33 getAdmin(); 

 35 HBaseUtilsImpl hbu = new HBaseUtilsImpl(); 

 38 //hbu.getAllTables(); 

 40 //hbu.descTable("people"); 

 42 //String[] infos = {"info","family"}; 

 43 //hbu.createTable("people", infos); 

 45 //String[] add = {"cs1","cs2"}; 

 46 //String[] remove = {"cf1","cf2"}; 

 48 //HColumnDescriptor hc = new HColumnDescriptor("sixsixsix"); 

 50 //hbu.modifyTable("stu",hc); 

 51 //hbu.getAllTables(); 

 54 hbu.putData("huoying", "rk001", "cs2", "name", "aobama",new Date().getTime()); 

 55 hbu.getAllTables(); 

 57 conn.close(); 

 58 } 

 60 // 获取连接 

 61 public static Connection getConnection() { 

 62 // 创建一个可以用来管理hbase配置信息的conf对象 

 63 Configuration conf = HBaseConfiguration.create(); 

 64 // 设置当前的程序去寻找的hbase在哪里 

 65 conf.set(ZK_CONNECT_KEY, ZK_CONNECT_VALUE); 

 66 try { 

 67 conn = ConnectionFactory.createConnection(conf); 

 68 } catch (IOException e) { 

 69 e.printStackTrace(); 

 70 } 

 71 return conn; 

 72 } 

 74 // 获取管理员对象 

 75 public static Admin getAdmin() { 

 76 try { 

 77 admin = conn.getAdmin(); 

 78 } catch (IOException e) { 

 79 e.printStackTrace(); 

 80 } 

 81 return admin; 

 82 } 

 84 // 查询所有表 

 85 @Override 

 86 public void getAllTables() throws Exception { 

 87 //获取列簇的描述信息 

 88 HTableDescriptor[] listTables = admin.listTables(); 

 89 for (HTableDescriptor listTable : listTables) { 

 90 //转化为表名 

 91 String tbName = listTable.getNameAsString(); 

 92 //获取列的描述信息 

 93 HColumnDescriptor[] columnFamilies = listTable.getColumnFamilies(); 

 94 System.out.println("tableName:"+tbName); 

 95 for(HColumnDescriptor columnFamilie : columnFamilies) { 

 96 //获取列簇的名字 

 97 String columnFamilyName = columnFamilie.getNameAsString(); 

 98 System.out.print("/t"+"columnFamilyName:"+columnFamilyName); 

 99 } 

100 System.out.println(); 

101 } 

103 } 

105 // 创建表,传参,表名和列簇的名字 

106 @Override 

107 public void createTable(String tableName, String[] family) throws Exception { 

109 TableName name = TableName.valueOf(tableName); 

110 //判断表是否存在 

111 if(admin.tableExists(name)) { 

112 System.out.println("table已经存在!"); 

113 }else { 

114 //表的列簇示例 

115 HTableDescriptor htd = new HTableDescriptor(name); 

116 //向列簇中添加列的信息 

117 for(String str : family) { 

118 HColumnDescriptor hcd = new HColumnDescriptor(str); 

119 htd.addFamily(hcd); 

120 } 

121 //创建表 

122 admin.createTable(htd); 

123 //判断表是否创建成功 

124 if(admin.tableExists(name)) { 

125 System.out.println("table创建成功"); 

126 }else { 

127 System.out.println("table创建失败"); 

128 } 

129 } 

131 } 

133 // 创建表,传参:封装好的多个列簇 

134 @Override 

135 public void createTable(HTableDescriptor htds) throws Exception { 

136 //获得表的名字 

137 String tbName = htds.getNameAsString(); 

139 admin.createTable(htds); 

140 } 

142 // 创建表,传参,表名和封装好的多个列簇 

143 @Override 

144 public void createTable(String tableName, HTableDescriptor htds) throws Exception { 

146 TableName name = TableName.valueOf(tableName); 

148 if(admin.tableExists(name)) { 

149 System.out.println("table已经存在!"); 

150 }else { 

151 admin.createTable(htds); 

152 boolean flag = admin.tableExists(name); 

153 System.out.println(flag ? "创建成功" : "创建失败"); 

154 } 

156 } 

159 // 查看表的列簇属性 

160 @Override 

161 public void descTable(String tableName) throws Exception { 

162 //转化为表名 

163 TableName name = TableName.valueOf(tableName); 

164 //判断表是否存在 

165 if(admin.tableExists(name)) { 

166 //获取表中列簇的描述信息 

167 HTableDescriptor tableDescriptor = admin.getTableDescriptor(name); 

168 //获取列簇中列的信息 

169 HColumnDescriptor[] columnFamilies = tableDescriptor.getColumnFamilies(); 

170 for(HColumnDescriptor columnFamily : columnFamilies) { 

171 System.out.println(columnFamily); 

172 } 

174 }else { 

175 System.out.println("table不存在"); 

176 } 

178 } 

180 // 判断表存在不存在 

181 @Override 

182 public boolean existTable(String tableName) throws Exception { 

183 TableName name = TableName.valueOf(tableName); 

184 return admin.tableExists(name); 

185 } 

187 // disable表 

188 @Override 

189 public void disableTable(String tableName) throws Exception { 

191 TableName name = TableName.valueOf(tableName); 

193 if(admin.tableExists(name)) { 

194 if(admin.isTableEnabled(name)) { 

195 admin.disableTable(name); 

196 }else { 

197 System.out.println("table不是活动状态"); 

198 } 

199 }else { 

200 System.out.println("table不存在"); 

201 } 

203 } 

205 // drop表 

206 @Override 

207 public void dropTable(String tableName) throws Exception { 

208 //转化为表名 

209 TableName name = TableName.valueOf(tableName); 

210 //判断表是否存在 

211 if(admin.tableExists(name)) { 

212 //判断表是否处于可用状态 

213 boolean tableEnabled = admin.isTableEnabled(name); 

215 if(tableEnabled) { 

216 //使表变成不可用状态 

217 admin.disableTable(name); 

218 } 

219 //删除表 

220 admin.deleteTable(name); 

221 //判断表是否存在 

222 if(admin.tableExists(name)) { 

223 System.out.println("删除失败"); 

224 }else { 

225 System.out.println("删除成功"); 

226 } 

228 }else { 

229 System.out.println("table不存在"); 

230 } 

233 } 

235 // 修改表(增加和删除) 

236 @Override 

237 public void modifyTable(String tableName) throws Exception { 

238 //转化为表名 

239 TableName name = TableName.valueOf(tableName); 

240 //判断表是否存在 

241 if(admin.tableExists(name)) { 

242 //判断表是否可用状态 

243 boolean tableEnabled = admin.isTableEnabled(name); 

245 if(tableEnabled) { 

246 //使表变成不可用 

247 admin.disableTable(name); 

248 } 

249 //根据表名得到表 

250 HTableDescriptor tableDescriptor = admin.getTableDescriptor(name); 

251 //创建列簇结构对象 

252 HColumnDescriptor columnFamily1 = new HColumnDescriptor("cf1".getBytes()); 

253 HColumnDescriptor columnFamily2 = new HColumnDescriptor("cf2".getBytes()); 

255 tableDescriptor.addFamily(columnFamily1); 

256 tableDescriptor.addFamily(columnFamily2); 

257 //替换该表所有的列簇 

258 admin.modifyTable(name, tableDescriptor); 

260 }else { 

261 System.out.println("table不存在"); 

262 } 

263 } 

265 // 修改表(增加和删除) 

266 @Override 

267 public void modifyTable(String tableName, String[] addColumn, String[] removeColumn) throws Exception { 

268 //转化为表名 

269 TableName name = TableName.valueOf(tableName); 

270 //判断表是否存在 

271 if(admin.tableExists(name)) { 

272 //判断表是否可用状态 

273 boolean tableEnabled = admin.isTableEnabled(name); 

275 if(tableEnabled) { 

276 //使表变成不可用 

277 admin.disableTable(name); 

278 } 

279 //根据表名得到表 

280 HTableDescriptor tableDescriptor = admin.getTableDescriptor(name); 

281 //创建列簇结构对象,添加列 

282 for(String add : addColumn) { 

283 HColumnDescriptor addColumnDescriptor = new HColumnDescriptor(add); 

284 tableDescriptor.addFamily(addColumnDescriptor); 

285 } 

286 //创建列簇结构对象,删除列 

287 for(String remove : removeColumn) { 

288 HColumnDescriptor removeColumnDescriptor = new HColumnDescriptor(remove); 

289 tableDescriptor.removeFamily(removeColumnDescriptor.getName()); 

290 } 

292 admin.modifyTable(name, tableDescriptor); 

295 }else { 

296 System.out.println("table不存在"); 

297 } 

299 } 

301 @Override 

302 public void modifyTable(String tableName, HColumnDescriptor hcds) throws Exception { 

303 //转化为表名 

304 TableName name = TableName.valueOf(tableName); 

305 //根据表名得到表 

306 HTableDescriptor tableDescriptor = admin.getTableDescriptor(name); 

307 //获取表中所有的列簇信息 

308 HColumnDescriptor[] columnFamilies = tableDescriptor.getColumnFamilies(); 

310 boolean flag = false; 

311 //判断参数中传入的列簇是否已经在表中存在 

312 for(HColumnDescriptor columnFamily : columnFamilies) { 

313 if(columnFamily.equals(hcds)) { 

314 flag = true; 

315 } 

316 } 

317 //存在提示,不存在直接添加该列簇信息 

318 if(flag) { 

319 System.out.println("该列簇已经存在"); 

320 }else { 

321 tableDescriptor.addFamily(hcds); 

322 admin.modifyTable(name, tableDescriptor); 

323 } 

325 } 

328 /**添加数据 

329 *tableName: 表明 

330 *rowKey: 行键 

331 *familyName:列簇 

332 *columnName:列名 

333 *value: 值 

334 */ 

335 @Override 

336 public void putData(String tableName, String rowKey, String familyName, String columnName, String value) 

337 throws Exception { 

338 //转化为表名 

339 TableName name = TableName.valueOf(tableName); 

340 //添加数据之前先判断表是否存在,不存在的话先创建表 

341 if(admin.tableExists(name)) { 

343 }else { 

344 //根据表明创建表结构 

345 HTableDescriptor tableDescriptor = new HTableDescriptor(name); 

346 //定义列簇的名字 

347 HColumnDescriptor columnFamilyName = new HColumnDescriptor(familyName); 

348 tableDescriptor.addFamily(columnFamilyName); 

349 admin.createTable(tableDescriptor); 

351 } 

353 Table table = conn.getTable(name); 

354 Put put = new Put(rowKey.getBytes()); 

356 put.addColumn(familyName.getBytes(), columnName.getBytes(), value.getBytes()); 

357 table.put(put); 

359 } 

361 @Override 

362 public void putData(String tableName, String rowKey, String familyName, String columnName, String value, 

363 long timestamp) throws Exception { 

365 // 转化为表名 

366 TableName name = TableName.valueOf(tableName); 

367 // 添加数据之前先判断表是否存在,不存在的话先创建表 

368 if (admin.tableExists(name)) { 

370 } else { 

371 // 根据表明创建表结构 

372 HTableDescriptor tableDescriptor = new HTableDescriptor(name); 

373 // 定义列簇的名字 

374 HColumnDescriptor columnFamilyName = new HColumnDescriptor(familyName); 

375 tableDescriptor.addFamily(columnFamilyName); 

376 admin.createTable(tableDescriptor); 

378 } 

380 Table table = conn.getTable(name); 

381 Put put = new Put(rowKey.getBytes()); 

383 //put.addColumn(familyName.getBytes(), columnName.getBytes(), value.getBytes()); 

384 put.addImmutable(familyName.getBytes(), columnName.getBytes(), timestamp, value.getBytes()); 

385 table.put(put); 

387 } 

390 // 根据rowkey查询数据 

391 @Override 

392 public Result getResult(String tableName, String rowKey) throws Exception { 

394 Result result; 

395 TableName name = TableName.valueOf(tableName); 

396 if(admin.tableExists(name)) { 

397 Table table = conn.getTable(name); 

398 Get get = new Get(rowKey.getBytes()); 

399 result = table.get(get); 

401 }else { 

402 result = null; 

403 } 

405 return result; 

406 } 

408 // 根据rowkey查询数据 

409 @Override 

410 public Result getResult(String tableName, String rowKey, String familyName) throws Exception { 

411 Result result; 

412 TableName name = TableName.valueOf(tableName); 

413 if(admin.tableExists(name)) { 

414 Table table = conn.getTable(name); 

415 Get get = new Get(rowKey.getBytes()); 

416 get.addFamily(familyName.getBytes()); 

417 result = table.get(get); 

419 }else { 

420 result = null; 

421 } 

423 return result; 

424 } 

426 // 根据rowkey查询数据 

427 @Override 

428 public Result getResult(String tableName, String rowKey, String familyName, String columnName) throws Exception { 

430 Result result; 

431 TableName name = TableName.valueOf(tableName); 

432 if(admin.tableExists(name)) { 

433 Table table = conn.getTable(name); 

434 Get get = new Get(rowKey.getBytes()); 

435 get.addColumn(familyName.getBytes(), columnName.getBytes()); 

436 result = table.get(get); 

438 }else { 

439 result = null; 

440 } 

442 return result; 

443 } 

445 // 查询指定version 

446 @Override 

447 public Result getResultByVersion(String tableName, String rowKey, String familyName, String columnName, 

448 int versions) throws Exception { 

450 Result result; 

451 TableName name = TableName.valueOf(tableName); 

452 if(admin.tableExists(name)) { 

453 Table table = conn.getTable(name); 

454 Get get = new Get(rowKey.getBytes()); 

455 get.addColumn(familyName.getBytes(), columnName.getBytes()); 

456 get.setMaxVersions(versions); 

457 result = table.get(get); 

459 }else { 

460 result = null; 

461 } 

463 return result; 

464 } 

466 // scan全表数据 

467 @Override 

468 public ResultScanner getResultScann(String tableName) throws Exception { 

470 ResultScanner result; 

471 TableName name = TableName.valueOf(tableName); 

472 if(admin.tableExists(name)) { 

473 Table table = conn.getTable(name); 

474 Scan scan = new Scan(); 

475 result = table.getScanner(scan); 

477 }else { 

478 result = null; 

479 } 

481 return result; 

482 } 

484 // scan全表数据 

485 @Override 

486 public ResultScanner getResultScann(String tableName, Scan scan) throws Exception { 

488 ResultScanner result; 

489 TableName name = TableName.valueOf(tableName); 

490 if(admin.tableExists(name)) { 

491 Table table = conn.getTable(name); 

492 result = table.getScanner(scan); 

494 }else { 

495 result = null; 

496 } 

498 return result; 

499 } 

501 // 删除数据(指定的列) 

502 @Override 

503 public void deleteColumn(String tableName, String rowKey) throws Exception { 

505 TableName name = TableName.valueOf(tableName); 

506 if(admin.tableExists(name)) { 

507 Table table = conn.getTable(name); 

508 Delete delete = new Delete(rowKey.getBytes()); 

509 table.delete(delete); 

511 }else { 

512 System.out.println("table不存在"); 

513 } 

516 } 

518 // 删除数据(指定的列) 

519 @Override 

520 public void deleteColumn(String tableName, String rowKey, String falilyName) throws Exception { 

522 TableName name = TableName.valueOf(tableName); 

523 if(admin.tableExists(name)) { 

524 Table table = conn.getTable(name); 

525 Delete delete = new Delete(rowKey.getBytes()); 

526 delete.addFamily(falilyName.getBytes()); 

527 table.delete(delete); 

529 }else { 

530 System.out.println("table不存在"); 

531 } 

533 } 

535 // 删除数据(指定的列) 

536 @Override 

537 public void deleteColumn(String tableName, String rowKey, String falilyName, String columnName) throws Exception { 

538 TableName name = TableName.valueOf(tableName); 

539 if(admin.tableExists(name)) { 

540 Table table = conn.getTable(name); 

541 Delete delete = new Delete(rowKey.getBytes()); 

542 delete.addColumn(falilyName.getBytes(), columnName.getBytes()); 

543 table.delete(delete); 

545 }else { 

546 System.out.println("table不存在"); 

547 } 

548 } 

550 }

 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/9012.html

分布式文件系统,分布式数据库区块链并行处理(MPP)数据库,数据挖掘开源大数据平台数据中台数据分析数据开发数据治理数据湖数据采集