Hbase(六) hbase Java API

一、

幾個主要 Hbase API 類和數據模型之間的對應關係:

1、 HBaseAdmin
關係: org.apache.hadoop.hbase.client.HBaseAdmin
作用:提供了一個接口來管理 HBase 數據庫的表信息。它提供的方法包括:創建表,刪 除表,列出表項,使表有效或無效,以及添加或刪除表列族成員等。

2、 HBaseConfiguration
關係: org.apache.hadoop.hbase.HBaseConfiguration
作用:對 HBase 進行配置

3、 HTableDescriptor
關係: org.apache.hadoop.hbase.HTableDescriptor
作用:包含了表的名字極其對應表的列族

4、 HColumnDescriptor
關係: org.apache.hadoop.hbase.HColumnDescriptor
作用:維護着關於列族的信息,例如版本號,壓縮設置等。它通常在創建表或者爲表添 加列族的時候使用。列族被創建後不能直接修改,只能通過刪除然後重新創建的方式。
列族被刪除的時候,列族裏面的數據也會同時被刪除。

5、 HTable
關係: org.apache.hadoop.hbase.client.HTable
作用:可以用來和 HBase 表直接通信。此方法對於更新操作來說是非線程安全的。

6、 Put
關係: org.apache.hadoop.hbase.client.Put
作用:用來對單個行執行添加操作

7、 Get
關係: org.apache.hadoop.hbase.client.Get
作用:用來獲取單個行的相關信息

8、 Result
關係: org.apache.hadoop.hbase.client.Result
作用:存儲 Get 或者 Scan 操作後獲取表的單行值。使用此類提供的方法可以直接獲取值 或者各種 Map 結構( key-value 對)

 二、具體增刪改查    代碼具體實現:

一、

幾個主要 Hbase API 類和數據模型之間的對應關係:

1、 HBaseAdmin
關係: org.apache.hadoop.hbase.client.HBaseAdmin
作用:提供了一個接口來管理 HBase 數據庫的表信息。它提供的方法包括:創建表,刪 除表,列出表項,使表有效或無效,以及添加或刪除表列族成員等。

2、 HBaseConfiguration
關係: org.apache.hadoop.hbase.HBaseConfiguration
作用:對 HBase 進行配置

3、 HTableDescriptor
關係: org.apache.hadoop.hbase.HTableDescriptor
作用:包含了表的名字極其對應表的列族

4、 HColumnDescriptor
關係: org.apache.hadoop.hbase.HColumnDescriptor
作用:維護着關於列族的信息,例如版本號,壓縮設置等。它通常在創建表或者爲表添 加列族的時候使用。列族被創建後不能直接修改,只能通過刪除然後重新創建的方式。
列族被刪除的時候,列族裏面的數據也會同時被刪除。

5、 HTable
關係: org.apache.hadoop.hbase.client.HTable
作用:可以用來和 HBase 表直接通信。此方法對於更新操作來說是非線程安全的。

6、 Put
關係: org.apache.hadoop.hbase.client.Put
作用:用來對單個行執行添加操作

7、 Get
關係: org.apache.hadoop.hbase.client.Get
作用:用來獲取單個行的相關信息

8、 Result
關係: org.apache.hadoop.hbase.client.Result
作用:存儲 Get 或者 Scan 操作後獲取表的單行值。使用此類提供的方法可以直接獲取值 或者各種 Map 結構( key-value 對)

 二、具體增刪改查    代碼具體實現:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354

355

356

357

358

359

360

361

362

package HbaseDome;

 

 

 

import java.util.List;

 

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.Cell;

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.TableName;

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

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;

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

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

import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.Table;

import org.apache.hadoop.hbase.util.Bytes;

 

 

 

public class Hbasedome implements HBaseDemoInterface{

 

     

    static Configuration conf =null;

    private static final String ZKconnect="192.168.123.212:2181,192.168.123.213:2181,192.168.123.214:2181";

    static{

        conf=HBaseConfiguration.create();

        conf.set("hbase.zookeeper.quorum", ZKconnect);

    }

//  static String tableName="student";

//  static String[] family={"lie01","lie02"};

     

     

    public static void main(String[] args) {

        Hbasedome a =new Hbasedome();

         String tableName="student11";

         String[] family={"lie01","lie02"};

        try {

            HTableDescriptor htds =new HTableDescriptor(tableName);

            for(int z=0;z<family.length;z++){

                HColumnDescriptor h=new HColumnDescriptor(family[z]);

                htds.addFamily(h);

            }

//          a.descTable("table03");

//          a.createTable(tableName, htds);

//          a.descTable("table03");

//          a.getAllTables();

//          a.createTable(tableName,family);

//          a.getResult("table03", "usr001");

//          a.dropTable("user1");

//          a.getAllTables();

//          a.putData("table03", "usr005", "liezu01", "name", "liu");

//          a.getResult("table03", "usr001");

//          a.getResultScann("table03");

//          a.getResultScann("table03","");

             

            Result result = a.getResult("table03""usr001");

            System.out.println(result.toString());

            List<Cell> cells = result.listCells();

            for (int i = 0; i < cells.size(); i++) {

                Cell cell = cells.get(i);

                System.out.println(cell.toString());

    //          printCell(cell);

            }

         

//          List<KeyValue> list = result.list();

//          for (int i = 0; i < list.size(); i++) {

//              KeyValue kv = list.get(i);

//              printKeyValye(kv);

//          }

        catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

 

         

    }

    public static void printKeyValye(KeyValue kv) {

        System.out.println(Bytes.toString(kv.getRow()) + "\t" + Bytes.toString(kv.getFamily()) + "\t" + Bytes.toString(kv.getQualifier()) + "\t" + Bytes.toString(kv.getValue()) + "\t" + kv.getTimestamp());

    }

    public static void printCell(Cell cell) {

        System.out.println(Bytes.toString(cell.getRow()) + "\t" + Bytes.toString(cell.getFamily()) + "\t" + Bytes.toString(cell.getQualifier()) + "\t" + Bytes.toString(cell.getValue()) + "\t" + cell.getTimestamp());

    }

    //創建表

    @Override

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

        HBaseAdmin admin=new HBaseAdmin(conf);

        HTableDescriptor desc =new HTableDescriptor(tableName);

         

        for(int i=0;i<family.length;i++){

            desc.addFamily(new HColumnDescriptor(family[i]));

            System.out.println("11111111111"+family[i]);

        }

        if(admin.tableExists(tableName)){

            System.out.println("表已經存在,別瞎輸行嗎");

//          System.exit(0);

        }else{

            admin.createTable(desc);

            System.out.println("表創建成功");

        }

    }

 

    //創建表

    @Override

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

        HBaseAdmin admin=new HBaseAdmin(conf);

        boolean tableExists1 = admin.tableExists(Bytes.toBytes(tableName));

        System.out.println(tableExists1 ? "表已存在" "表不存在");

        admin.createTable(htds);

        boolean tableExists = admin.tableExists(Bytes.toBytes(tableName));

        System.out.println(tableExists ? "創建表成功" "創建失敗");

    }

 

     

    @Override

    public void descTable(String tableName) throws Exception {

        HBaseAdmin admin=new HBaseAdmin(conf);

        HTable table=new HTable(conf, tableName);

        HTableDescriptor desc =table.getTableDescriptor();

        HColumnDescriptor[] columnFamilies = desc.getColumnFamilies();

     

        for(HColumnDescriptor t:columnFamilies){

            System.out.println(Bytes.toString(t.getName()));

        }

         

    }

 

    //// 這種方式是替換該表tableName的所有列簇

    @Override

    public void modifyTable(String tableName) throws Exception {

        HBaseAdmin admin=new HBaseAdmin(conf);

        HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(tableName));

        htd.addFamily(new HColumnDescriptor(Bytes.toBytes("cf3")));

        htd.addFamily(new HColumnDescriptor(Bytes.toBytes("cf2")));

        admin.modifyTable(tableName, htd);

 

        // 刪除該表tableName當中的特定的列簇

        // admin.deleteColumn(tableName, "cf3");

 

        System.out.println("修改成功");

         

    }

 

    @Override

    public void getAllTables() throws Exception {

        HBaseAdmin admin =new HBaseAdmin(conf);

         

        String[] tableNames = admin.getTableNames();

        for(int i=0;i<tableNames.length;i++){

            System.out.println(tableNames[i]);

        }

    }

 

    //更新數據  插入數據

    @Override

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

            throws Exception {

        HTable htable=new HTable(conf, Bytes.toBytes(tableName));

        Put put=new Put(Bytes.toBytes(rowKey));

        put.add(Bytes.toBytes(familyName), Bytes.toBytes(columnName), Bytes.toBytes(value));

        htable.put(put);

         

    }

 

    //爲表添加數據

    @Override

    public void addData(String tableName, String rowKey, String[] column1, String[] value1, String[] column2,

            String[] value2) throws Exception {

         

        Put put=new Put(Bytes.toBytes(rowKey));

        HTable htable=new HTable(conf, Bytes.toBytes(tableName));

        HColumnDescriptor[] columnFamilies = htable.getTableDescriptor().getColumnFamilies();

        for(int i=0;i<=columnFamilies.length;i++){

            String nameAsString = columnFamilies[i].getNameAsString();

            if(nameAsString.equals("lie01")){

                for(int j=0;j<column1.length;j++){

                    put.add(Bytes.toBytes(nameAsString), Bytes.toBytes(column1[j]),Bytes.toBytes(value1[j]));

                }

            }

            if(nameAsString.equals("lie02")){

                for(int j=0;j<column2.length;j++){

                    put.add(Bytes.toBytes(nameAsString), Bytes.toBytes(column2[j]),Bytes.toBytes(value2[j]));

                }

            }

             

        }

        htable.put(put);

        System.out.println("addData ok!");

    }

 

    //根據rowkey 查詢

    @Override

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

        Get get=new Get(Bytes.toBytes(rowKey));

        HTable htable=new HTable(conf, Bytes.toBytes(tableName));

        Result result=htable.get(get);

//      for(KeyValue k:result.list()){

//          System.out.println(Bytes.toString(k.getFamily()));

//          System.out.println(Bytes.toString(k.getQualifier()));

//          System.out.println(Bytes.toString(k.getValue()));

//          System.out.println(k.getTimestamp());

//      }

        return result;

    }

 

    //查詢指定的某列

    @Override

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

        Get get=new Get(Bytes.toBytes(rowKey));

        HTable htable=new HTable(conf, Bytes.toBytes(tableName));

        get.addColumn(Bytes.toBytes(familyName),Bytes.toBytes(columnName));

        Result result=htable.get(get);

        for(KeyValue k:result.list()){

            System.out.println(Bytes.toString(k.getFamily()));

            System.out.println(Bytes.toString(k.getQualifier()));

            System.out.println(Bytes.toString(k.getValue()));

            System.out.println(k.getTimestamp());

        }

        return result;

    }

 

     

    //遍歷查詢表

    @Override

    public ResultScanner getResultScann(String tableName) throws Exception {

     

        Scan scan=new Scan();

        ResultScanner rs =null;

        HTable htable=new HTable(conf, tableName);

        try{

            rs=htable.getScanner(scan);

            for(Result r: rs){

                for(KeyValue kv:r.list()){

     

                    System.out.println(Bytes.toString(kv.getRow()));

                    System.out.println(Bytes.toString(kv.getFamily()));

                    System.out.println(Bytes.toString(kv.getQualifier()));

                    System.out.println(Bytes.toString(kv.getValue()));

                    System.out.println(kv.getTimestamp());

                }

            }

        }finally{

            rs.close();

        }

        return rs;

    }

 

    @Override

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

         

        ResultScanner rs =null;

        HTable htable=new HTable(conf, tableName);

        try{

            rs=htable.getScanner(scan);

            for(Result r: rs){

                for(KeyValue kv:r.list()){

     

                    System.out.println(Bytes.toString(kv.getRow()));

                    System.out.println(Bytes.toString(kv.getFamily()));

                    System.out.println(Bytes.toString(kv.getQualifier()));

                    System.out.println(Bytes.toString(kv.getValue()));

                    System.out.println(kv.getTimestamp());

                }

            }

        }finally{

            rs.close();

        }      

        return rs;

    }

 

    //查詢表中的某一列

    @Override

    public Result getResultByColumn(String tableName, String rowKey, String familyName, String columnName)

            throws Exception {

         

         

        HTable htable=new HTable(conf, tableName);

        Get get=new Get(Bytes.toBytes(rowKey));

        get.addColumn(Bytes.toBytes(familyName),Bytes.toBytes(columnName));

        Result result=htable.get(get);

        for(KeyValue kv: result.list()){

 

            System.out.println(Bytes.toString(kv.getFamily()));

            System.out.println(Bytes.toString(kv.getQualifier()));

            System.out.println(Bytes.toString(kv.getValue()));

            System.out.println(kv.getTimestamp());

             

        }

        return result;

    }

 

     

    //查詢某列數據的某個版本

    @Override

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

            int versions) throws Exception {

     

        HTable htable=new HTable(conf, tableName);

        Get get =new Get(Bytes.toBytes(rowKey));

        get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));

        get.setMaxVersions(versions);

        Result result=htable.get(get);

         

        for(KeyValue kv: result.list()){

 

            System.out.println(Bytes.toString(kv.getFamily()));

            System.out.println(Bytes.toString(kv.getQualifier()));

            System.out.println(Bytes.toString(kv.getValue()));

            System.out.println(kv.getTimestamp());

             

        }

 

        return result;

    }

 

    //刪除指定某列

    @Override

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

 

        HTable htable=new HTable(conf, tableName);

//      Delete delete1=new Delete(Bytes.toBytes(rowKey));

        Delete de =new Delete(Bytes.toBytes(rowKey));

        de.deleteColumn(Bytes.toBytes(falilyName), Bytes.toBytes(columnName));

        htable.delete(de);

    }

 

     

    //刪除指定的某個rowkey

    @Override

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

        HTable htable=new HTable(conf, tableName);

 

        Delete de =new Delete(Bytes.toBytes(rowKey));

         htable.delete(de);

         

    }

 

    //讓該表失效

    @Override

    public void disableTable(String tableName) throws Exception {

        HBaseAdmin admin=new HBaseAdmin(conf);

        admin.disableTable(tableName);

         

    }

 

    //刪除表

    @Override

    public void dropTable(String tableName) throws Exception {

         

        HBaseAdmin admin=new HBaseAdmin(conf);

        admin.disableTable(tableName);

        admin.deleteTable(tableName);

         

    }

 

}

  

  

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

package com.ghgj.hbase.test1610;

 

import java.io.IOException;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

 

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.Cell;

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.TableName;

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;

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

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

import org.apache.hadoop.hbase.util.Bytes;

 

public class HBaseAPIDemo1610 implements HBaseDemoInterface {

 

    private static final String ROWKEY = "p001";

    private static final String ROWKEY2 = "p002";

    private static final String FAMILY1 = "cf1";

    private static final String FAMILY2 = "cf2";

    private static final String KEY = "name";

    private static final String VALUE = "huangbo";

 

    private static final String TABLE_NAME = "person";

    private static final String[] COLUMN_FAMILY = new String[] { FAMILY1, FAMILY2 };

 

    static Configuration conf = null;

    static HBaseAdmin admin = null;

    static HTable table = null;

 

    static {

        try {

            conf = HBaseConfiguration.create();

            conf.set("hbase.zookeeper.quorum""hadoop03:2181,hadoop04:2181,hadoop05:2181");

            admin = new HBaseAdmin(conf);

            table = new HTable(conf, TABLE_NAME);

 

        catch (IOException e) {

            // e.printStackTrace();

            System.out.println("報錯");

        }

    }

 

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

        HBaseAPIDemo1610 hbase = new HBaseAPIDemo1610();

 

        // 測試創建表

        hbase.createTable(TABLE_NAME, COLUMN_FAMILY);

 

        // 測試創建表

        HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(TABLE_NAME));

        for (int i = 0; i < COLUMN_FAMILY.length; i++) {

            HColumnDescriptor cf1 = new HColumnDescriptor(COLUMN_FAMILY[i]);

            htd.addFamily(cf1);

        }

        hbase.createTable(TABLE_NAME, htd);

 

        // 查看錶屬性

        hbase.descTable(TABLE_NAME);

 

        // 查詢所有的表

        hbase.getAllTables();

 

        // 測試修改表

        hbase.modifyTable(TABLE_NAME);

 

        // 插入數據

        hbase.putData(TABLE_NAME, ROWKEY, FAMILY1, KEY, VALUE);

 

        // 測試插入一堆數據

        String[] column1 = new String[] { "name1""age""province" };

        String[] value1 = new String[] { "huangbo""33""xinjiang" };

        String[] column2 = new String[] { "gender" };

        String[] value2 = new String[] { "male" };

        hbase.addData(TABLE_NAME, ROWKEY2, column1, value1, column2, value2);

 

        // 通過rowkey查詢數據

        Result result = hbase.getResult(TABLE_NAME, ROWKEY2);

        System.out.println(result.toString());

        List<KeyValue> list = result.list();

        for (int i = 0; i < list.size(); i++) {

            KeyValue kv = list.get(i);

            printKeyValye(kv);

        }

 

        // 通過rowkey, family, province查詢數據

        Result result1 = hbase.getResult(TABLE_NAME, ROWKEY2, FAMILY1, "province");

        List<Cell> cells = result1.listCells();

        for (int i = 0; i < cells.size(); i++) {

            Cell cell = cells.get(i);

            printCell(cell);

        }

 

        // 掃描全表數據

        ResultScanner resultScann = hbase.getResultScann(TABLE_NAME);

        printResultScanner(resultScann);

         

        /*Iterator<Result> iterator = resultScann.iterator();

        while(iterator.hasNext()){

            Result next = iterator.next();

        }*/

 

        // 通過scan掃描全表數據,scan中可以加入一些過濾條件

        Scan scan = new Scan();

        scan.setStartRow(Bytes.toBytes("user"));

        scan.setStopRow(Bytes.toBytes("zk002"));

        scan.setTimeRange(1488252774189l, 1488252774191l);

        ResultScanner resultScann1 = hbase.getResultScann(TABLE_NAME, scan);

        printResultScanner(resultScann1);

 

        // 兩種方式查詢最大版本數的hbase數據

        Result resultByVersion = hbase.getResultByVersion(TABLE_NAME, ROWKEY, FAMILY1, "name"3);

        printResult(resultByVersion);

        System.out.println("-------------------");

        ResultScanner rs = hbase.getResultByVersion(ROWKEY, FAMILY1, "name"3);

        printResultScanner(rs);

 

        // 刪除表

        hbase.dropTable(TABLE_NAME);

    }

 

    public static void printResultScanner(ResultScanner resultScann) {

        for (Result result : resultScann) {

            printResult(result);

        }

    }

 

    public static void printResult(Result result) {

        List<Cell> cells = result.listCells();

        for (int i = 0; i < cells.size(); i++) {

            Cell cell = cells.get(i);

            printCell(cell);

        }

    }

 

    public static void printCell(Cell cell) {

        System.out.println(Bytes.toString(cell.getRow()) + "\t" + Bytes.toString(cell.getFamily()) + "\t" + Bytes.toString(cell.getQualifier()) + "\t" + Bytes.toString(cell.getValue()) + "\t" + cell.getTimestamp());

    }

 

    public static void printKeyValye(KeyValue kv) {

        System.out.println(Bytes.toString(kv.getRow()) + "\t" + Bytes.toString(kv.getFamily()) + "\t" + Bytes.toString(kv.getQualifier()) + "\t" + Bytes.toString(kv.getValue()) + "\t" + kv.getTimestamp());

    }

 

    // create 'tablename','cf1','cf2'

    @Override

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

        HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(tableName));

        for (int i = 0; i < family.length; i++) {

            HColumnDescriptor cf1 = new HColumnDescriptor(family[i]);

            htd.addFamily(cf1);

        }

        admin.createTable(htd);

        boolean tableExists = admin.tableExists(Bytes.toBytes(tableName));

        System.out.println(tableExists ? "創建表成功" "創建失敗");

    }

 

    @Override

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

        admin.createTable(htd);

        boolean tableExists = admin.tableExists(Bytes.toBytes(tableName));

        System.out.println(tableExists ? "創建表成功" "創建失敗");

    }

 

    // desc 'person'

    @Override

    public void descTable(String tableName) throws Exception {

        HTableDescriptor tableDescriptor = table.getTableDescriptor();

        HColumnDescriptor[] columnFamilies = tableDescriptor.getColumnFamilies();

        for (HColumnDescriptor hcd : columnFamilies) {

            // System.out.println(hcd.toString()+"\t");

            System.out.println(Bytes.toString(hcd.getName()));

        }

    }

 

    @Override

    public void modifyTable(String tableName) throws Exception {

        // 這種方式是替換該表tableName的所有列簇

        HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(tableName));

        htd.addFamily(new HColumnDescriptor(Bytes.toBytes("cf3")));

        htd.addFamily(new HColumnDescriptor(Bytes.toBytes("cf2")));

        admin.modifyTable(tableName, htd);

 

        // 刪除該表tableName當中的特定的列簇

        // admin.deleteColumn(tableName, "cf3");

 

        System.out.println("修改成功");

    }

 

    // list

    @Override

    public void getAllTables() throws Exception {

        TableName[] listTableNames = admin.listTableNames();

        for (TableName tn : listTableNames) {

            System.out.println(tn.toString());

        }

    }

 

    // put 'tablename','rowkey','familyname:key','value'

    @Override

    public void putData(String tableName, String rowKey, String familyName, String columnName, String value) throws Exception {

        // HTable table = new HTable(conf, tableName);

        Put put = new Put(Bytes.toBytes(rowKey));

        put.add(Bytes.toBytes(familyName), Bytes.toBytes(columnName), Bytes.toBytes(value));

        table.put(put);

        System.out.println("插入成功");

    }

 

    /**

     * @param tableName

     *            表名

     * @param rowKey

     *            rowkey

     * @param column1

     *            第一個列簇的key數組

     * @param value1

     *            第一個列簇的value數組,key數組和value數組長度必須一樣

     * @param column2

     *            第二列簇的key數組

     * @param value2

     *            第二個列簇的values數組, 同上同理

     * @throws Exception

     */

    @Override

    public void addData(String tableName, String rowKey, String[] column1, String[] value1, String[] column2, String[] value2) throws Exception {

        List<Put> puts = new ArrayList<Put>();

 

        for (int i = 0; i < column1.length; i++) {

            Put put = new Put(Bytes.toBytes(rowKey));

            put.add(Bytes.toBytes(FAMILY1), Bytes.toBytes(column1[i]), Bytes.toBytes(value1[i]));

            puts.add(put);

        }

 

        for (int i = 0; i < column2.length; i++) {

            Put put = new Put(Bytes.toBytes(rowKey));

            put.add(Bytes.toBytes(FAMILY2), Bytes.toBytes(column2[i]), Bytes.toBytes(value2[i]));

            puts.add(put);

        }

 

        table.put(puts);

        System.out.println("插入一堆數據成功");

    }

 

    // get 'tablename','rowkey'

    @Override

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

        Get get = new Get(Bytes.toBytes(rowKey));

        Result result = table.get(get);

        return result;

    }

 

    @Override

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

        Get get = new Get(Bytes.toBytes(rowKey));

        get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));

        Result result = table.get(get);

        return result;

    }

 

    @Override

    public ResultScanner getResultScann(String tableName) throws Exception {

        Scan scan = new Scan();

        ResultScanner scanner = table.getScanner(scan);

        // ResultScanner scanner = table.getScanner(Bytes.toBytes(FAMILY2));

        // ResultScanner scanner = table.getScanner(Bytes.toBytes(FAMILY1),

        // Bytes.toBytes("name1"));

        return scanner;

    }

 

    @Override

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

        return table.getScanner(scan);

    }

 

    @Override

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

        return null;

    }

 

    // get 'person','p001',{COLUMNS => 'cf1:name', VERSIONS => 3}

    @Override

    public Result getResultByVersion(String tableName, String rowKey, String familyName, String columnName, int versions) throws Exception {

        Get get = new Get(Bytes.toBytes(rowKey));

        get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));

        get.setMaxVersions(versions);

        Result result = table.get(get);

        return result;

    }

 

    public ResultScanner getResultByVersion(String rowKey, String familyName, String columnName, int versions) throws Exception {

        Scan scan = new Scan(Bytes.toBytes(rowKey), Bytes.toBytes(rowKey));

        scan.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));

        scan.setMaxVersions(versions);

        ResultScanner scanner = table.getScanner(scan);

        return scanner;

    }

 

    @Override

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

 

    }

 

    @Override

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

 

    }

 

    @Override

    public void disableTable(String tableName) throws Exception {

        admin.disableTable(tableName);

    }

 

    @Override

    public void dropTable(String tableName) throws Exception {

        try {

            admin.deleteTable(tableName);

        catch (Exception e) {

            // e.printStackTrace();

            disableTable(tableName);

            admin.deleteTable(tableName);

            System.out.println("ssssssss");

        finally {

            boolean tableExists = admin.tableExists(Bytes.toBytes(tableName));

            System.out.println(tableExists ? "刪除失敗" "刪除成功");

        }

    }

}

 

  

  

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

package com.ghgj.hbase.test1610;

 

import java.io.IOException;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

 

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.Cell;

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.TableName;

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;

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

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

import org.apache.hadoop.hbase.util.Bytes;

 

public class HBaseAPIDemo1610 implements HBaseDemoInterface {

 

    private static final String ROWKEY = "p001";

    private static final String ROWKEY2 = "p002";

    private static final String FAMILY1 = "cf1";

    private static final String FAMILY2 = "cf2";

    private static final String KEY = "name";

    private static final String VALUE = "huangbo";

 

    private static final String TABLE_NAME = "person";

    private static final String[] COLUMN_FAMILY = new String[] { FAMILY1, FAMILY2 };

 

    static Configuration conf = null;

    static HBaseAdmin admin = null;

    static HTable table = null;

 

    static {

        try {

            conf = HBaseConfiguration.create();

            conf.set("hbase.zookeeper.quorum""hadoop03:2181,hadoop04:2181,hadoop05:2181");

            admin = new HBaseAdmin(conf);

            table = new HTable(conf, TABLE_NAME);

 

        catch (IOException e) {

            // e.printStackTrace();

            System.out.println("報錯");

        }

    }

 

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

        HBaseAPIDemo1610 hbase = new HBaseAPIDemo1610();

 

        // 測試創建表

        hbase.createTable(TABLE_NAME, COLUMN_FAMILY);

 

        // 測試創建表

        HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(TABLE_NAME));

        for (int i = 0; i < COLUMN_FAMILY.length; i++) {

            HColumnDescriptor cf1 = new HColumnDescriptor(COLUMN_FAMILY[i]);

            htd.addFamily(cf1);

        }

        hbase.createTable(TABLE_NAME, htd);

 

        // 查看錶屬性

        hbase.descTable(TABLE_NAME);

 

        // 查詢所有的表

        hbase.getAllTables();

 

        // 測試修改表

        hbase.modifyTable(TABLE_NAME);

 

        // 插入數據

        hbase.putData(TABLE_NAME, ROWKEY, FAMILY1, KEY, VALUE);

 

        // 測試插入一堆數據

        String[] column1 = new String[] { "name1""age""province" };

        String[] value1 = new String[] { "huangbo""33""xinjiang" };

        String[] column2 = new String[] { "gender" };

        String[] value2 = new String[] { "male" };

        hbase.addData(TABLE_NAME, ROWKEY2, column1, value1, column2, value2);

 

        // 通過rowkey查詢數據

        Result result = hbase.getResult(TABLE_NAME, ROWKEY2);

        System.out.println(result.toString());

        List<KeyValue> list = result.list();

        for (int i = 0; i < list.size(); i++) {

            KeyValue kv = list.get(i);

            printKeyValye(kv);

        }

 

        // 通過rowkey, family, province查詢數據

        Result result1 = hbase.getResult(TABLE_NAME, ROWKEY2, FAMILY1, "province");

        List<Cell> cells = result1.listCells();

        for (int i = 0; i < cells.size(); i++) {

            Cell cell = cells.get(i);

            printCell(cell);

        }

 

        // 掃描全表數據

        ResultScanner resultScann = hbase.getResultScann(TABLE_NAME);

        printResultScanner(resultScann);

         

        /*Iterator<Result> iterator = resultScann.iterator();

        while(iterator.hasNext()){

            Result next = iterator.next();

        }*/

 

        // 通過scan掃描全表數據,scan中可以加入一些過濾條件

        Scan scan = new Scan();

        scan.setStartRow(Bytes.toBytes("user"));

        scan.setStopRow(Bytes.toBytes("zk002"));

        scan.setTimeRange(1488252774189l, 1488252774191l);

        ResultScanner resultScann1 = hbase.getResultScann(TABLE_NAME, scan);

        printResultScanner(resultScann1);

 

        // 兩種方式查詢最大版本數的hbase數據

        Result resultByVersion = hbase.getResultByVersion(TABLE_NAME, ROWKEY, FAMILY1, "name"3);

        printResult(resultByVersion);

        System.out.println("-------------------");

        ResultScanner rs = hbase.getResultByVersion(ROWKEY, FAMILY1, "name"3);

        printResultScanner(rs);

 

        // 刪除表

        hbase.dropTable(TABLE_NAME);

    }

 

    public static void printResultScanner(ResultScanner resultScann) {

        for (Result result : resultScann) {

            printResult(result);

        }

    }

 

    public static void printResult(Result result) {

        List<Cell> cells = result.listCells();

        for (int i = 0; i < cells.size(); i++) {

            Cell cell = cells.get(i);

            printCell(cell);

        }

    }

 

    public static void printCell(Cell cell) {

        System.out.println(Bytes.toString(cell.getRow()) + "\t" + Bytes.toString(cell.getFamily()) + "\t" + Bytes.toString(cell.getQualifier()) + "\t" + Bytes.toString(cell.getValue()) + "\t" + cell.getTimestamp());

    }

 

    public static void printKeyValye(KeyValue kv) {

        System.out.println(Bytes.toString(kv.getRow()) + "\t" + Bytes.toString(kv.getFamily()) + "\t" + Bytes.toString(kv.getQualifier()) + "\t" + Bytes.toString(kv.getValue()) + "\t" + kv.getTimestamp());

    }

 

    // create 'tablename','cf1','cf2'

    @Override

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

        HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(tableName));

        for (int i = 0; i < family.length; i++) {

            HColumnDescriptor cf1 = new HColumnDescriptor(family[i]);

            htd.addFamily(cf1);

        }

        admin.createTable(htd);

        boolean tableExists = admin.tableExists(Bytes.toBytes(tableName));

        System.out.println(tableExists ? "創建表成功" "創建失敗");

    }

 

    @Override

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

        admin.createTable(htd);

        boolean tableExists = admin.tableExists(Bytes.toBytes(tableName));

        System.out.println(tableExists ? "創建表成功" "創建失敗");

    }

 

    // desc 'person'

    @Override

    public void descTable(String tableName) throws Exception {

        HTableDescriptor tableDescriptor = table.getTableDescriptor();

        HColumnDescriptor[] columnFamilies = tableDescriptor.getColumnFamilies();

        for (HColumnDescriptor hcd : columnFamilies) {

            // System.out.println(hcd.toString()+"\t");

            System.out.println(Bytes.toString(hcd.getName()));

        }

    }

 

    @Override

    public void modifyTable(String tableName) throws Exception {

        // 這種方式是替換該表tableName的所有列簇

        HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(tableName));

        htd.addFamily(new HColumnDescriptor(Bytes.toBytes("cf3")));

        htd.addFamily(new HColumnDescriptor(Bytes.toBytes("cf2")));

        admin.modifyTable(tableName, htd);

 

        // 刪除該表tableName當中的特定的列簇

        // admin.deleteColumn(tableName, "cf3");

 

        System.out.println("修改成功");

    }

 

    // list

    @Override

    public void getAllTables() throws Exception {

        TableName[] listTableNames = admin.listTableNames();

        for (TableName tn : listTableNames) {

            System.out.println(tn.toString());

        }

    }

 

    // put 'tablename','rowkey','familyname:key','value'

    @Override

    public void putData(String tableName, String rowKey, String familyName, String columnName, String value) throws Exception {

        // HTable table = new HTable(conf, tableName);

        Put put = new Put(Bytes.toBytes(rowKey));

        put.add(Bytes.toBytes(familyName), Bytes.toBytes(columnName), Bytes.toBytes(value));

        table.put(put);

        System.out.println("插入成功");

    }

 

    /**

     * @param tableName

     *            表名

     * @param rowKey

     *            rowkey

     * @param column1

     *            第一個列簇的key數組

     * @param value1

     *            第一個列簇的value數組,key數組和value數組長度必須一樣

     * @param column2

     *            第二列簇的key數組

     * @param value2

     *            第二個列簇的values數組, 同上同理

     * @throws Exception

     */

    @Override

    public void addData(String tableName, String rowKey, String[] column1, String[] value1, String[] column2, String[] value2) throws Exception {

        List<Put> puts = new ArrayList<Put>();

 

        for (int i = 0; i < column1.length; i++) {

            Put put = new Put(Bytes.toBytes(rowKey));

            put.add(Bytes.toBytes(FAMILY1), Bytes.toBytes(column1[i]), Bytes.toBytes(value1[i]));

            puts.add(put);

        }

 

        for (int i = 0; i < column2.length; i++) {

            Put put = new Put(Bytes.toBytes(rowKey));

            put.add(Bytes.toBytes(FAMILY2), Bytes.toBytes(column2[i]), Bytes.toBytes(value2[i]));

            puts.add(put);

        }

 

        table.put(puts);

        System.out.println("插入一堆數據成功");

    }

 

    // get 'tablename','rowkey'

    @Override

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

        Get get = new Get(Bytes.toBytes(rowKey));

        Result result = table.get(get);

        return result;

    }

 

    @Override

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

        Get get = new Get(Bytes.toBytes(rowKey));

        get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));

        Result result = table.get(get);

        return result;

    }

 

    @Override

    public ResultScanner getResultScann(String tableName) throws Exception {

        Scan scan = new Scan();

        ResultScanner scanner = table.getScanner(scan);

        // ResultScanner scanner = table.getScanner(Bytes.toBytes(FAMILY2));

        // ResultScanner scanner = table.getScanner(Bytes.toBytes(FAMILY1),

        // Bytes.toBytes("name1"));

        return scanner;

    }

 

    @Override

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

        return table.getScanner(scan);

    }

 

    @Override

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

        return null;

    }

 

    // get 'person','p001',{COLUMNS => 'cf1:name', VERSIONS => 3}

    @Override

    public Result getResultByVersion(String tableName, String rowKey, String familyName, String columnName, int versions) throws Exception {

        Get get = new Get(Bytes.toBytes(rowKey));

        get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));

        get.setMaxVersions(versions);

        Result result = table.get(get);

        return result;

    }

 

    public ResultScanner getResultByVersion(String rowKey, String familyName, String columnName, int versions) throws Exception {

        Scan scan = new Scan(Bytes.toBytes(rowKey), Bytes.toBytes(rowKey));

        scan.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));

        scan.setMaxVersions(versions);

        ResultScanner scanner = table.getScanner(scan);

        return scanner;

    }

 

    @Override

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

 

    }

 

    @Override

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

 

    }

 

    @Override

    public void disableTable(String tableName) throws Exception {

        admin.disableTable(tableName);

    }

 

    @Override

    public void dropTable(String tableName) throws Exception {

        try {

            admin.deleteTable(tableName);

        catch (Exception e) {

            // e.printStackTrace();

            disableTable(tableName);

            admin.deleteTable(tableName);

            System.out.println("ssssssss");

        finally {

            boolean tableExists = admin.tableExists(Bytes.toBytes(tableName));

            System.out.println(tableExists ? "刪除失敗" "刪除成功");

        }

    }

}

一、

幾個主要 Hbase API 類和數據模型之間的對應關係:

1、 HBaseAdmin
關係: org.apache.hadoop.hbase.client.HBaseAdmin
作用:提供了一個接口來管理 HBase 數據庫的表信息。它提供的方法包括:創建表,刪 除表,列出表項,使表有效或無效,以及添加或刪除表列族成員等。

2、 HBaseConfiguration
關係: org.apache.hadoop.hbase.HBaseConfiguration
作用:對 HBase 進行配置

3、 HTableDescriptor
關係: org.apache.hadoop.hbase.HTableDescriptor
作用:包含了表的名字極其對應表的列族

4、 HColumnDescriptor
關係: org.apache.hadoop.hbase.HColumnDescriptor
作用:維護着關於列族的信息,例如版本號,壓縮設置等。它通常在創建表或者爲表添 加列族的時候使用。列族被創建後不能直接修改,只能通過刪除然後重新創建的方式。
列族被刪除的時候,列族裏面的數據也會同時被刪除。

5、 HTable
關係: org.apache.hadoop.hbase.client.HTable
作用:可以用來和 HBase 表直接通信。此方法對於更新操作來說是非線程安全的。

6、 Put
關係: org.apache.hadoop.hbase.client.Put
作用:用來對單個行執行添加操作

7、 Get
關係: org.apache.hadoop.hbase.client.Get
作用:用來獲取單個行的相關信息

8、 Result
關係: org.apache.hadoop.hbase.client.Result
作用:存儲 Get 或者 Scan 操作後獲取表的單行值。使用此類提供的方法可以直接獲取值 或者各種 Map 結構( key-value 對)

 二、具體增刪改查    代碼具體實現:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354

355

356

357

358

359

360

361

362

package HbaseDome;

 

 

 

import java.util.List;

 

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.Cell;

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.TableName;

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

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;

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

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

import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.Table;

import org.apache.hadoop.hbase.util.Bytes;

 

 

 

public class Hbasedome implements HBaseDemoInterface{

 

     

    static Configuration conf =null;

    private static final String ZKconnect="192.168.123.212:2181,192.168.123.213:2181,192.168.123.214:2181";

    static{

        conf=HBaseConfiguration.create();

        conf.set("hbase.zookeeper.quorum", ZKconnect);

    }

//  static String tableName="student";

//  static String[] family={"lie01","lie02"};

     

     

    public static void main(String[] args) {

        Hbasedome a =new Hbasedome();

         String tableName="student11";

         String[] family={"lie01","lie02"};

        try {

            HTableDescriptor htds =new HTableDescriptor(tableName);

            for(int z=0;z<family.length;z++){

                HColumnDescriptor h=new HColumnDescriptor(family[z]);

                htds.addFamily(h);

            }

//          a.descTable("table03");

//          a.createTable(tableName, htds);

//          a.descTable("table03");

//          a.getAllTables();

//          a.createTable(tableName,family);

//          a.getResult("table03", "usr001");

//          a.dropTable("user1");

//          a.getAllTables();

//          a.putData("table03", "usr005", "liezu01", "name", "liu");

//          a.getResult("table03", "usr001");

//          a.getResultScann("table03");

//          a.getResultScann("table03","");

             

            Result result = a.getResult("table03""usr001");

            System.out.println(result.toString());

            List<Cell> cells = result.listCells();

            for (int i = 0; i < cells.size(); i++) {

                Cell cell = cells.get(i);

                System.out.println(cell.toString());

    //          printCell(cell);

            }

         

//          List<KeyValue> list = result.list();

//          for (int i = 0; i < list.size(); i++) {

//              KeyValue kv = list.get(i);

//              printKeyValye(kv);

//          }

        catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

 

         

    }

    public static void printKeyValye(KeyValue kv) {

        System.out.println(Bytes.toString(kv.getRow()) + "\t" + Bytes.toString(kv.getFamily()) + "\t" + Bytes.toString(kv.getQualifier()) + "\t" + Bytes.toString(kv.getValue()) + "\t" + kv.getTimestamp());

    }

    public static void printCell(Cell cell) {

        System.out.println(Bytes.toString(cell.getRow()) + "\t" + Bytes.toString(cell.getFamily()) + "\t" + Bytes.toString(cell.getQualifier()) + "\t" + Bytes.toString(cell.getValue()) + "\t" + cell.getTimestamp());

    }

    //創建表

    @Override

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

        HBaseAdmin admin=new HBaseAdmin(conf);

        HTableDescriptor desc =new HTableDescriptor(tableName);

         

        for(int i=0;i<family.length;i++){

            desc.addFamily(new HColumnDescriptor(family[i]));

            System.out.println("11111111111"+family[i]);

        }

        if(admin.tableExists(tableName)){

            System.out.println("表已經存在,別瞎輸行嗎");

//          System.exit(0);

        }else{

            admin.createTable(desc);

            System.out.println("表創建成功");

        }

    }

 

    //創建表

    @Override

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

        HBaseAdmin admin=new HBaseAdmin(conf);

        boolean tableExists1 = admin.tableExists(Bytes.toBytes(tableName));

        System.out.println(tableExists1 ? "表已存在" "表不存在");

        admin.createTable(htds);

        boolean tableExists = admin.tableExists(Bytes.toBytes(tableName));

        System.out.println(tableExists ? "創建表成功" "創建失敗");

    }

 

     

    @Override

    public void descTable(String tableName) throws Exception {

        HBaseAdmin admin=new HBaseAdmin(conf);

        HTable table=new HTable(conf, tableName);

        HTableDescriptor desc =table.getTableDescriptor();

        HColumnDescriptor[] columnFamilies = desc.getColumnFamilies();

     

        for(HColumnDescriptor t:columnFamilies){

            System.out.println(Bytes.toString(t.getName()));

        }

         

    }

 

    //// 這種方式是替換該表tableName的所有列簇

    @Override

    public void modifyTable(String tableName) throws Exception {

        HBaseAdmin admin=new HBaseAdmin(conf);

        HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(tableName));

        htd.addFamily(new HColumnDescriptor(Bytes.toBytes("cf3")));

        htd.addFamily(new HColumnDescriptor(Bytes.toBytes("cf2")));

        admin.modifyTable(tableName, htd);

 

        // 刪除該表tableName當中的特定的列簇

        // admin.deleteColumn(tableName, "cf3");

 

        System.out.println("修改成功");

         

    }

 

    @Override

    public void getAllTables() throws Exception {

        HBaseAdmin admin =new HBaseAdmin(conf);

         

        String[] tableNames = admin.getTableNames();

        for(int i=0;i<tableNames.length;i++){

            System.out.println(tableNames[i]);

        }

    }

 

    //更新數據  插入數據

    @Override

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

            throws Exception {

        HTable htable=new HTable(conf, Bytes.toBytes(tableName));

        Put put=new Put(Bytes.toBytes(rowKey));

        put.add(Bytes.toBytes(familyName), Bytes.toBytes(columnName), Bytes.toBytes(value));

        htable.put(put);

         

    }

 

    //爲表添加數據

    @Override

    public void addData(String tableName, String rowKey, String[] column1, String[] value1, String[] column2,

            String[] value2) throws Exception {

         

        Put put=new Put(Bytes.toBytes(rowKey));

        HTable htable=new HTable(conf, Bytes.toBytes(tableName));

        HColumnDescriptor[] columnFamilies = htable.getTableDescriptor().getColumnFamilies();

        for(int i=0;i<=columnFamilies.length;i++){

            String nameAsString = columnFamilies[i].getNameAsString();

            if(nameAsString.equals("lie01")){

                for(int j=0;j<column1.length;j++){

                    put.add(Bytes.toBytes(nameAsString), Bytes.toBytes(column1[j]),Bytes.toBytes(value1[j]));

                }

            }

            if(nameAsString.equals("lie02")){

                for(int j=0;j<column2.length;j++){

                    put.add(Bytes.toBytes(nameAsString), Bytes.toBytes(column2[j]),Bytes.toBytes(value2[j]));

                }

            }

             

        }

        htable.put(put);

        System.out.println("addData ok!");

    }

 

    //根據rowkey 查詢

    @Override

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

        Get get=new Get(Bytes.toBytes(rowKey));

        HTable htable=new HTable(conf, Bytes.toBytes(tableName));

        Result result=htable.get(get);

//      for(KeyValue k:result.list()){

//          System.out.println(Bytes.toString(k.getFamily()));

//          System.out.println(Bytes.toString(k.getQualifier()));

//          System.out.println(Bytes.toString(k.getValue()));

//          System.out.println(k.getTimestamp());

//      }

        return result;

    }

 

    //查詢指定的某列

    @Override

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

        Get get=new Get(Bytes.toBytes(rowKey));

        HTable htable=new HTable(conf, Bytes.toBytes(tableName));

        get.addColumn(Bytes.toBytes(familyName),Bytes.toBytes(columnName));

        Result result=htable.get(get);

        for(KeyValue k:result.list()){

            System.out.println(Bytes.toString(k.getFamily()));

            System.out.println(Bytes.toString(k.getQualifier()));

            System.out.println(Bytes.toString(k.getValue()));

            System.out.println(k.getTimestamp());

        }

        return result;

    }

 

     

    //遍歷查詢表

    @Override

    public ResultScanner getResultScann(String tableName) throws Exception {

     

        Scan scan=new Scan();

        ResultScanner rs =null;

        HTable htable=new HTable(conf, tableName);

        try{

            rs=htable.getScanner(scan);

            for(Result r: rs){

                for(KeyValue kv:r.list()){

     

                    System.out.println(Bytes.toString(kv.getRow()));

                    System.out.println(Bytes.toString(kv.getFamily()));

                    System.out.println(Bytes.toString(kv.getQualifier()));

                    System.out.println(Bytes.toString(kv.getValue()));

                    System.out.println(kv.getTimestamp());

                }

            }

        }finally{

            rs.close();

        }

        return rs;

    }

 

    @Override

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

         

        ResultScanner rs =null;

        HTable htable=new HTable(conf, tableName);

        try{

            rs=htable.getScanner(scan);

            for(Result r: rs){

                for(KeyValue kv:r.list()){

     

                    System.out.println(Bytes.toString(kv.getRow()));

                    System.out.println(Bytes.toString(kv.getFamily()));

                    System.out.println(Bytes.toString(kv.getQualifier()));

                    System.out.println(Bytes.toString(kv.getValue()));

                    System.out.println(kv.getTimestamp());

                }

            }

        }finally{

            rs.close();

        }      

        return rs;

    }

 

    //查詢表中的某一列

    @Override

    public Result getResultByColumn(String tableName, String rowKey, String familyName, String columnName)

            throws Exception {

         

         

        HTable htable=new HTable(conf, tableName);

        Get get=new Get(Bytes.toBytes(rowKey));

        get.addColumn(Bytes.toBytes(familyName),Bytes.toBytes(columnName));

        Result result=htable.get(get);

        for(KeyValue kv: result.list()){

 

            System.out.println(Bytes.toString(kv.getFamily()));

            System.out.println(Bytes.toString(kv.getQualifier()));

            System.out.println(Bytes.toString(kv.getValue()));

            System.out.println(kv.getTimestamp());

             

        }

        return result;

    }

 

     

    //查詢某列數據的某個版本

    @Override

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

            int versions) throws Exception {

     

        HTable htable=new HTable(conf, tableName);

        Get get =new Get(Bytes.toBytes(rowKey));

        get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));

        get.setMaxVersions(versions);

        Result result=htable.get(get);

         

        for(KeyValue kv: result.list()){

 

            System.out.println(Bytes.toString(kv.getFamily()));

            System.out.println(Bytes.toString(kv.getQualifier()));

            System.out.println(Bytes.toString(kv.getValue()));

            System.out.println(kv.getTimestamp());

             

        }

 

        return result;

    }

 

    //刪除指定某列

    @Override

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

 

        HTable htable=new HTable(conf, tableName);

//      Delete delete1=new Delete(Bytes.toBytes(rowKey));

        Delete de =new Delete(Bytes.toBytes(rowKey));

        de.deleteColumn(Bytes.toBytes(falilyName), Bytes.toBytes(columnName));

        htable.delete(de);

    }

 

     

    //刪除指定的某個rowkey

    @Override

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

        HTable htable=new HTable(conf, tableName);

 

        Delete de =new Delete(Bytes.toBytes(rowKey));

         htable.delete(de);

         

    }

 

    //讓該表失效

    @Override

    public void disableTable(String tableName) throws Exception {

        HBaseAdmin admin=new HBaseAdmin(conf);

        admin.disableTable(tableName);

         

    }

 

    //刪除表

    @Override

    public void dropTable(String tableName) throws Exception {

         

        HBaseAdmin admin=new HBaseAdmin(conf);

        admin.disableTable(tableName);

        admin.deleteTable(tableName);

         

    }

 

}

  

  

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

package com.ghgj.hbase.test1610;

 

import java.io.IOException;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

 

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.Cell;

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.TableName;

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;

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

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

import org.apache.hadoop.hbase.util.Bytes;

 

public class HBaseAPIDemo1610 implements HBaseDemoInterface {

 

    private static final String ROWKEY = "p001";

    private static final String ROWKEY2 = "p002";

    private static final String FAMILY1 = "cf1";

    private static final String FAMILY2 = "cf2";

    private static final String KEY = "name";

    private static final String VALUE = "huangbo";

 

    private static final String TABLE_NAME = "person";

    private static final String[] COLUMN_FAMILY = new String[] { FAMILY1, FAMILY2 };

 

    static Configuration conf = null;

    static HBaseAdmin admin = null;

    static HTable table = null;

 

    static {

        try {

            conf = HBaseConfiguration.create();

            conf.set("hbase.zookeeper.quorum""hadoop03:2181,hadoop04:2181,hadoop05:2181");

            admin = new HBaseAdmin(conf);

            table = new HTable(conf, TABLE_NAME);

 

        catch (IOException e) {

            // e.printStackTrace();

            System.out.println("報錯");

        }

    }

 

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

        HBaseAPIDemo1610 hbase = new HBaseAPIDemo1610();

 

        // 測試創建表

        hbase.createTable(TABLE_NAME, COLUMN_FAMILY);

 

        // 測試創建表

        HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(TABLE_NAME));

        for (int i = 0; i < COLUMN_FAMILY.length; i++) {

            HColumnDescriptor cf1 = new HColumnDescriptor(COLUMN_FAMILY[i]);

            htd.addFamily(cf1);

        }

        hbase.createTable(TABLE_NAME, htd);

 

        // 查看錶屬性

        hbase.descTable(TABLE_NAME);

 

        // 查詢所有的表

        hbase.getAllTables();

 

        // 測試修改表

        hbase.modifyTable(TABLE_NAME);

 

        // 插入數據

        hbase.putData(TABLE_NAME, ROWKEY, FAMILY1, KEY, VALUE);

 

        // 測試插入一堆數據

        String[] column1 = new String[] { "name1""age""province" };

        String[] value1 = new String[] { "huangbo""33""xinjiang" };

        String[] column2 = new String[] { "gender" };

        String[] value2 = new String[] { "male" };

        hbase.addData(TABLE_NAME, ROWKEY2, column1, value1, column2, value2);

 

        // 通過rowkey查詢數據

        Result result = hbase.getResult(TABLE_NAME, ROWKEY2);

        System.out.println(result.toString());

        List<KeyValue> list = result.list();

        for (int i = 0; i < list.size(); i++) {

            KeyValue kv = list.get(i);

            printKeyValye(kv);

        }

 

        // 通過rowkey, family, province查詢數據

        Result result1 = hbase.getResult(TABLE_NAME, ROWKEY2, FAMILY1, "province");

        List<Cell> cells = result1.listCells();

        for (int i = 0; i < cells.size(); i++) {

            Cell cell = cells.get(i);

            printCell(cell);

        }

 

        // 掃描全表數據

        ResultScanner resultScann = hbase.getResultScann(TABLE_NAME);

        printResultScanner(resultScann);

         

        /*Iterator<Result> iterator = resultScann.iterator();

        while(iterator.hasNext()){

            Result next = iterator.next();

        }*/

 

        // 通過scan掃描全表數據,scan中可以加入一些過濾條件

        Scan scan = new Scan();

        scan.setStartRow(Bytes.toBytes("user"));

        scan.setStopRow(Bytes.toBytes("zk002"));

        scan.setTimeRange(1488252774189l, 1488252774191l);

        ResultScanner resultScann1 = hbase.getResultScann(TABLE_NAME, scan);

        printResultScanner(resultScann1);

 

        // 兩種方式查詢最大版本數的hbase數據

        Result resultByVersion = hbase.getResultByVersion(TABLE_NAME, ROWKEY, FAMILY1, "name"3);

        printResult(resultByVersion);

        System.out.println("-------------------");

        ResultScanner rs = hbase.getResultByVersion(ROWKEY, FAMILY1, "name"3);

        printResultScanner(rs);

 

        // 刪除表

        hbase.dropTable(TABLE_NAME);

    }

 

    public static void printResultScanner(ResultScanner resultScann) {

        for (Result result : resultScann) {

            printResult(result);

        }

    }

 

    public static void printResult(Result result) {

        List<Cell> cells = result.listCells();

        for (int i = 0; i < cells.size(); i++) {

            Cell cell = cells.get(i);

            printCell(cell);

        }

    }

 

    public static void printCell(Cell cell) {

        System.out.println(Bytes.toString(cell.getRow()) + "\t" + Bytes.toString(cell.getFamily()) + "\t" + Bytes.toString(cell.getQualifier()) + "\t" + Bytes.toString(cell.getValue()) + "\t" + cell.getTimestamp());

    }

 

    public static void printKeyValye(KeyValue kv) {

        System.out.println(Bytes.toString(kv.getRow()) + "\t" + Bytes.toString(kv.getFamily()) + "\t" + Bytes.toString(kv.getQualifier()) + "\t" + Bytes.toString(kv.getValue()) + "\t" + kv.getTimestamp());

    }

 

    // create 'tablename','cf1','cf2'

    @Override

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

        HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(tableName));

        for (int i = 0; i < family.length; i++) {

            HColumnDescriptor cf1 = new HColumnDescriptor(family[i]);

            htd.addFamily(cf1);

        }

        admin.createTable(htd);

        boolean tableExists = admin.tableExists(Bytes.toBytes(tableName));

        System.out.println(tableExists ? "創建表成功" "創建失敗");

    }

 

    @Override

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

        admin.createTable(htd);

        boolean tableExists = admin.tableExists(Bytes.toBytes(tableName));

        System.out.println(tableExists ? "創建表成功" "創建失敗");

    }

 

    // desc 'person'

    @Override

    public void descTable(String tableName) throws Exception {

        HTableDescriptor tableDescriptor = table.getTableDescriptor();

        HColumnDescriptor[] columnFamilies = tableDescriptor.getColumnFamilies();

        for (HColumnDescriptor hcd : columnFamilies) {

            // System.out.println(hcd.toString()+"\t");

            System.out.println(Bytes.toString(hcd.getName()));

        }

    }

 

    @Override

    public void modifyTable(String tableName) throws Exception {

        // 這種方式是替換該表tableName的所有列簇

        HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(tableName));

        htd.addFamily(new HColumnDescriptor(Bytes.toBytes("cf3")));

        htd.addFamily(new HColumnDescriptor(Bytes.toBytes("cf2")));

        admin.modifyTable(tableName, htd);

 

        // 刪除該表tableName當中的特定的列簇

        // admin.deleteColumn(tableName, "cf3");

 

        System.out.println("修改成功");

    }

 

    // list

    @Override

    public void getAllTables() throws Exception {

        TableName[] listTableNames = admin.listTableNames();

        for (TableName tn : listTableNames) {

            System.out.println(tn.toString());

        }

    }

 

    // put 'tablename','rowkey','familyname:key','value'

    @Override

    public void putData(String tableName, String rowKey, String familyName, String columnName, String value) throws Exception {

        // HTable table = new HTable(conf, tableName);

        Put put = new Put(Bytes.toBytes(rowKey));

        put.add(Bytes.toBytes(familyName), Bytes.toBytes(columnName), Bytes.toBytes(value));

        table.put(put);

        System.out.println("插入成功");

    }

 

    /**

     * @param tableName

     *            表名

     * @param rowKey

     *            rowkey

     * @param column1

     *            第一個列簇的key數組

     * @param value1

     *            第一個列簇的value數組,key數組和value數組長度必須一樣

     * @param column2

     *            第二列簇的key數組

     * @param value2

     *            第二個列簇的values數組, 同上同理

     * @throws Exception

     */

    @Override

    public void addData(String tableName, String rowKey, String[] column1, String[] value1, String[] column2, String[] value2) throws Exception {

        List<Put> puts = new ArrayList<Put>();

 

        for (int i = 0; i < column1.length; i++) {

            Put put = new Put(Bytes.toBytes(rowKey));

            put.add(Bytes.toBytes(FAMILY1), Bytes.toBytes(column1[i]), Bytes.toBytes(value1[i]));

            puts.add(put);

        }

 

        for (int i = 0; i < column2.length; i++) {

            Put put = new Put(Bytes.toBytes(rowKey));

            put.add(Bytes.toBytes(FAMILY2), Bytes.toBytes(column2[i]), Bytes.toBytes(value2[i]));

            puts.add(put);

        }

 

        table.put(puts);

        System.out.println("插入一堆數據成功");

    }

 

    // get 'tablename','rowkey'

    @Override

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

        Get get = new Get(Bytes.toBytes(rowKey));

        Result result = table.get(get);

        return result;

    }

 

    @Override

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

        Get get = new Get(Bytes.toBytes(rowKey));

        get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));

        Result result = table.get(get);

        return result;

    }

 

    @Override

    public ResultScanner getResultScann(String tableName) throws Exception {

        Scan scan = new Scan();

        ResultScanner scanner = table.getScanner(scan);

        // ResultScanner scanner = table.getScanner(Bytes.toBytes(FAMILY2));

        // ResultScanner scanner = table.getScanner(Bytes.toBytes(FAMILY1),

        // Bytes.toBytes("name1"));

        return scanner;

    }

 

    @Override

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

        return table.getScanner(scan);

    }

 

    @Override

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

        return null;

    }

 

    // get 'person','p001',{COLUMNS => 'cf1:name', VERSIONS => 3}

    @Override

    public Result getResultByVersion(String tableName, String rowKey, String familyName, String columnName, int versions) throws Exception {

        Get get = new Get(Bytes.toBytes(rowKey));

        get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));

        get.setMaxVersions(versions);

        Result result = table.get(get);

        return result;

    }

 

    public ResultScanner getResultByVersion(String rowKey, String familyName, String columnName, int versions) throws Exception {

        Scan scan = new Scan(Bytes.toBytes(rowKey), Bytes.toBytes(rowKey));

        scan.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));

        scan.setMaxVersions(versions);

        ResultScanner scanner = table.getScanner(scan);

        return scanner;

    }

 

    @Override

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

 

    }

 

    @Override

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

 

    }

 

    @Override

    public void disableTable(String tableName) throws Exception {

        admin.disableTable(tableName);

    }

 

    @Override

    public void dropTable(String tableName) throws Exception {

        try {

            admin.deleteTable(tableName);

        catch (Exception e) {

            // e.printStackTrace();

            disableTable(tableName);

            admin.deleteTable(tableName);

            System.out.println("ssssssss");

        finally {

            boolean tableExists = admin.tableExists(Bytes.toBytes(tableName));

            System.out.println(tableExists ? "刪除失敗" "刪除成功");

        }

    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章