日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

HBase的编程实践(实验3_熟悉常用的HBase操作)

發(fā)布時間:2023/12/13 综合教程 47 生活家
生活随笔 收集整理的這篇文章主要介紹了 HBase的编程实践(实验3_熟悉常用的HBase操作) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HBase的編程實踐

? 準備工作:啟動、關閉hbase之類的(以及該過程可能遇到的bug)

一、Hbase中使用Shell命令:

① HBase中創(chuàng)建表:(create 命令:第一個變量是表名,然后是列族名)

? 增加數據

② put:(put 命令:第一個變量是表名,第二個變量是行鍵,第三個變量開始就是添加列族情況啦(列限定符可選)

? 刪除數據

③ delete命令:

□ put 的反向操作:

刪除 一行中的所有數據:

刪除 表:

? 查看數據:

□ get: 查看的是一行中的數據

□ scan: 查看的是表中的全部數據

?查詢表歷史數據:

查詢表的歷史版本,需要兩步。

? 退出HBase數據庫操作:


⑤ 命令: exit

、Hbase編程實踐:

? 準備工作:導入jar包:

例子:創(chuàng)建表,插入數據、查看表中數據

三、實驗:熟悉常用的HBase 操作:

(一)編程實現以下指定功能,并用 Hadoop 提供的 HBase Shell 命令完成相同任務:

列出 HBase所有的表的相關信息,例如表名;
在終端打印出指定的表的所有記錄數據;
向已經創(chuàng)建好的表添加和刪除指定的列族或列;
清空指定的表的所有記錄數據;
統(tǒng)計表的行數。

(二)現有以下關系型數據庫中的表和數據,要求將其轉換為適合于HBase存儲的表并插入數據:

學生表(Student)、課程表(Course)、選課表(SC):同時,請編程完成以下指定功能:

....

? 準備工作:

■ 先啟動hadoop,再啟動hbase;(關閉:關閉先關hbase,再關閉hadoop

□ 啟動hadoop:

ssh localhost
cd /usr/local/hadoop
./sbin/start-dfs.sh

啟動hbase:(因為hbase 咱將其bin 目錄配置了環(huán)境變量,相當于全局變量了,在終端命令可以直接使用, 而hadoop 沒有配置系統(tǒng)的全局變量,所以需要切換到其安裝目錄下的sbin 目錄)

start-hbase.sh

□ 進入shell界面

hbase shell

□關閉hbase:

stop-hbase.sh

□關閉hadoop:

cd /usr/local/hadoop
./sbin/stop-dfs.sh

可能遇到bug:org.apache.hadoop.hbase.PleaseHoldException:Maste is initializing

logs中報錯:master.HMaster: Master failed to complete initialization after 900000ms. Please consider submitting a bug report including a thread dump of this process.

master.SplitLogManger:error while splitting logs in [hdfs:// localhost:9000/hbase/WALS...]

屋漏偏逢連夜雨:又卡住。。。。。

解決:ctr+c,關閉hbase、關閉hadoop,然后,關掉shell,重啟,然后重新登錄。。。(ssh localhost 又發(fā)現。。。,直覺,這個問題無傷大雅,跳過它)

Failed to connect to https://changelogs.ubuntu.com/meta-relese-lts.Check your Internet connection or proxy settings.

詭異的事。。。(前一秒成功創(chuàng)建了一張表,下一秒卡死)

日志顯示:【詭異的地方是在,我創(chuàng)建的表格名為user 就卡住,創(chuàng)建叫其他名字的表格就沒事】

警告:WARN[ProcExecTimeout] assignment.AssignmentManger:STUCK Region-In-Transition rit=OPENING, location=null,table=user,region=d7e...

然后又:ERROR:master.HMasterCommandLine:Master exiting。。。

至此越搞越多bug,我選擇重新安裝(因為重新安裝對于解決問題的是一個優(yōu)解,為什么不重新安裝呢,辦法沒有高低貴賤,高效即最好。)

也許一開始的原因在于刪除表的命令輸入先后順序有問題,我是先輸入:truncate 'user' (‘user’ 是表名) 然后輸入 drop 'user' #停用表之后才能刪除

(好像輸入 drop命令前已經停表了哈哈哈)問題不大,重新裝一下即可

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

一、Hbase中使用Shell命令:

① HBase中創(chuàng)建表:(create 命令:第一個變量是表名,然后是列族名)

語法:create '表名稱','列族名稱1','列族名稱2','列族名稱N'

create 'student','Sname','Ssex','Sage','Sdept','course'

通過命令 describe 'student' 進行查看表的結構:(desc ‘表名’,查看表的結構)

接下來是hbase 常規(guī)操作(增刪改查)

? 增加數據

② put:(put 命令:第一個變量是表名,第二個變量是行鍵,第三個變量開始就是添加列族情況啦(列限定符可選)

注意 put 命令:一次只能為一個表的一行數據的一個列,也就是一次只能給一個單元格添加一個數據

所以直接用shell命令插入數據效率很低,在實際應用中,一般都是利用編程操作數據。

語法:put '表名稱','行名稱','列名稱:','值'

例子:student表添加了學號為95001,名字為LiYing的一行數據,其行鍵為95001。

put 'student', '95001','Sname','LiYing'

例子:為95001行下的course列族的math列添加了一個數據:

  put 'student','95001','course:math','80'

在表格中的樣子(大概如此,變量名不一定對得上哦,我只是為了展示表格的形式):

? 刪除數據

③ delete命令:

□ put 的反向操作:

刪除 一行中的所有數據:

刪除 表:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

□ put 的反向操作:

  delete 'student','95001','Sname:firstName'

刪除 一行中的所有數據:

  deleteall 'student','95001'

刪除表 :

disable 'student'      #讓表不可用
drop 'student'         #刪除表

? 查看數據:

□ get: 查看的是一行中的數據

□ scan: 查看的是表中的全部數據

 get 'student','95001'

scan 'student'

還可以查詢部分細節(jié)的數據等等細節(jié)的數據,例如:查詢 某個列族的數據:

?查詢表歷史數據:

查詢表的歷史版本,需要兩步。
1、在創(chuàng)建表的時候,指定保存的版本數(假設指定為5)

  create 'teacher',{NAME=>'username',VERSIONS=>5}

2、插入數據然后更新數據,使其產生歷史版本數據,注意:這里插入數據和更新數據都是用put命令

put 'teacher','91001','username','Mary'
put 'teacher','91001','username','Mary1'
put 'teacher','91001','username','Mary2'
put 'teacher','91001','username','Mary3'
put 'teacher','91001','username','Mary4'  
put 'teacher','91001','username','Mary5'

3、查詢時,指定查詢的歷史版本數。默認會查詢出最新的數據

  get 'teacher','91001',{COLUMN=>'username',VERSIONS=>3}

? 退出HBase數據庫操作

⑤ 命令: exit

注意:這里退出HBase數據庫是退出對數據庫表的操作,而不是停止啟動HBase數據庫后臺運行。

、Hbase編程實踐:

? 準備工作:導入jar包:

導包步驟:File -》 Project Structure -》Libraries -》+ -》選擇需要導入的包,然后記得導入完成后,點擊一下 Apply,再點 Ok

(1) 進入到“/usr/local/hbase/lib”目錄,選中該目錄下的所有jar文件(注意,不要選中client-facing-thirdparty、ruby、shaded-clients和zkcli這四個目錄)

(2) 進入到“/usr/local/hbase/lib/client-facing-thirdparty”目錄, 選中該目錄下的所有jar文件。

例子:創(chuàng)建表,插入數據,查看表中數據

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
 
import java.io.IOException;
public class ExampleForHBase {
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;
    public static void main(String[] args)throws IOException{
        init();    //主要操作就是為了連接到數據庫hbase
        createTable("student",new String[]{"score"});    //創(chuàng)建表,shell命令:create '表名','列族名1','列族名2','列族名3' ...
        insertData("student","zhangsan","score","English","69"); //shell命令: put 'student','張三','score:English','69'
        insertData("student","zhangsan","score","Math","86");
        insertData("student","zhangsan","score","Computer","77");
        getData("student", "zhangsan", "score","English");
        close();
    }
 
    public static void init(){
        configuration  = HBaseConfiguration.create();
        configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
        try{
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
 
    public static void close(){
        try{
            if(admin != null){
                admin.close();
            }
            if(null != connection){
                connection.close();
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
 
    public static void createTable(String myTableName,String[] colFamily) throws IOException {
        TableName tableName = TableName.valueOf(myTableName);
        if(admin.tableExists(tableName)){
            System.out.println("talbe is exists!");
        }else {
            TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
            for(String str:colFamily){
                ColumnFamilyDescriptor family = 
ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(str)).build();
                tableDescriptor.setColumnFamily(family);
            }
            admin.createTable(tableDescriptor.build());
        } 
    }
 
    public static void insertData(String tableName,String rowKey,String colFamily,String col,String val) throws IOException { 
        Table table = connection.getTable(TableName.valueOf(tableName));
        Put put = new Put(rowKey.getBytes());
        put.addColumn(colFamily.getBytes(),col.getBytes(), val.getBytes());
        table.put(put);
        table.close(); 
    }
 
    public static void getData(String tableName,String rowKey,String colFamily, String col)throws  IOException{ 
        Table table = connection.getTable(TableName.valueOf(tableName));
        Get get = new Get(rowKey.getBytes());
        get.addColumn(colFamily.getBytes(),col.getBytes());
        Result result = table.get(get);
        System.out.println(new String(result.getValue(colFamily.getBytes(),col==null?null:col.getBytes())));
        table.close(); 
    }
}

運行程序后,到終端輸入:scan ‘student’ 查看一下

三、實驗:熟悉常用的HBase 操作:

(一)編程實現以下指定功能,并用 Hadoop 提供的 HBase Shell 命令完成相同任務:

列出 HBase所有的表的相關信息,例如表名;
在終端打印出指定的表的所有記錄數據;
向已經創(chuàng)建好的表添加和刪除指定的列族或列;
清空指定的表的所有記錄數據;
統(tǒng)計表的行數。

1.列出 HBase所有的表的相關信息,例如表名

■ HBase ShellList

Java Api:

/**
* 同樣是正常的建立 數據庫連接,執(zhí)行操作,然后最后關閉連接
* 重點是:HTableDescriptor hTableDescriptors[] = admin.listTables(); 獲取到 表格列表,然后遍歷
*/
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; import org.apache.hadoop.hbase.client.*; import java.io.IOException; public class Test_1 { public static Configuration configuration; public static Connection connection; public static Admin admin; /** * 建立連接 */ public static void init() { configuration = HBaseConfiguration.create(); configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase"); try { connection = ConnectionFactory.createConnection(configuration); admin = connection.getAdmin(); } catch (IOException e) { e.printStackTrace(); } } /** * 關閉連接 */ public static void close() { try { if (admin != null) { admin.close(); } if (null != connection) { connection.close(); } } catch (IOException e) { e.printStackTrace(); } } /** * * 查看已有表,通過方法listTables() * * @throws IOException * */ public static void listTables() throws IOException { init(); HTableDescriptor hTableDescriptors[] = admin.listTables(); for (HTableDescriptor hTableDescriptor : hTableDescriptors) { System.out.println(hTableDescriptor.getNameAsString()); } close(); } public static void main(String[] args) { Test_1 t = new Test_1(); try { System.out.println("以下為Hbase 數據庫中所存的表信息"); t.listTables(); } catch (IOException e) { e.printStackTrace(); } } }

2.在終端打印出指定的表的所有記錄數據;

HBase Shell:scan 'student'

Java Api:

/**
* 同樣是正常的建立 數據庫連接,執(zhí)行操作,然后最后關閉連接
* 重點是:
* Table table = connection.getTable(TableName.valueOf(tableName));獲取到表格對象
* Scan scan = new Scan(); ResultScanner scanner = table.getScanner(scan); 然后通過Scanner對象,獲取到ResultScanner掃描結果對象,遍歷輸出
*/
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; import org.apache.hadoop.hbase.client.*; import java.io.IOException; import java.util.Scanner; public class Test_2 { public static Configuration configuration; public static Connection connection; public static Admin admin; // 建立連接 public static void init() { configuration = HBaseConfiguration.create(); configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase"); try { connection = ConnectionFactory.createConnection(configuration); admin = connection.getAdmin(); } catch (IOException e) { e.printStackTrace(); } } // 關閉連接 public static void close() { try { if (admin != null) { admin.close(); } if (null != connection) { connection.close(); } } catch (IOException e) { e.printStackTrace(); } } /** * * 根據表名查找表信息 * */ public static void getData(String tableName) throws IOException { init(); Table table = connection.getTable(TableName.valueOf(tableName)); Scan scan = new Scan(); ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { showCell((result)); } close(); } /** * * 格式化輸出 * * @param result * */ public static void showCell(Result result) { Cell[] cells = result.rawCells(); for (Cell cell : cells) { System.out.println("RowName(行鍵):" + new String(CellUtil.cloneRow(cell)) + " "); System.out.println("Timetamp(時間戳):" + cell.getTimestamp() + " "); System.out.println("column Family(列簇):" + new String(CellUtil.cloneFamily(cell)) + " "); System.out.println("column Name(列名):" + new String(CellUtil.cloneQualifier(cell)) + " "); System.out.println("value:(值)" + new String(CellUtil.cloneValue(cell)) + " "); System.out.println(); } } public static void main(String[] args) throws IOException { // TODO Auto-generated method stub Test_2 t = new Test_2(); System.out.println("請輸入要查看的表名"); Scanner scan = new Scanner(System.in); String tableName = scan.nextLine(); System.out.println("信息如下:"); t.getData(tableName); } }

3,向已經創(chuàng)建好的表添加和刪除指定的列族或列:

HBase Shell

put 'student','95003','Sname','wangjinxuan'     (添加列)

put 'student','95003','Sname:nickName','wang'    (添加列族)

put 'student','95003','Sname:firstName','jinxuan' (添加列族)

put的反向操作的delete:

delete 'student' ,’95003’,’Sname’

delete 'student' ,’95003’,’Sname:nickName’

deleteall 'student' ,’95003’  (刪除整個行記錄)


Java Api:

/**
 * hbase只關注rowkey,column Family(列族),并沒有說在創(chuàng)建表的時候指定cq(列限定修飾符)有多少,這也是hbase列式存儲的特點,
 *     所以在hbase API中是沒有提供delete 一個列下的所有數據的
 * 
 *     同樣是正常的建立 數據庫連接,執(zhí)行操作,然后最后關閉連接
 * 1,Table table = connection.getTable(TableName.valueOf(tableName)); 先獲取到表
 * 2,插入:(① 創(chuàng)建Put對象,② 然后通過方法 addColumn將列、列限定符、值 放到put對象,③ 最后將put對象put到表格)
 *     Put put = new Put(rowKey.getBytes());
 *  put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());
 *  table.put(put);        
 * 3,刪除:
 * Table table = connection.getTable(TableName.valueOf(tableName)); 同樣首先獲取到表
 * Delete delete = new Delete(rowKey.getBytes());    //通過傳入行鍵,new一個刪除對象    
 * //刪除對象添加要被刪除的列或列族                        
 * ① 刪除指定列族的所有數據(此情況是列族下無列限定符時的情況):delete.addFamily(colFamily.getBytes());        
 * ② 刪除指定列的數據(此列主要說的是列限定修飾符):delete.addColumn(colFamily.getBytes(), col.getBytes());
 * table.delete(delete); //最后就是表格delete掉 delete對象
 */

import java.io.IOException;
import java.util.Scanner;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Delete;
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.client.Table;

public class Test_3 {
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;

    // 建立連接
    public static void init() {
        configuration = HBaseConfiguration.create();
        configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");
        try {
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 關閉連接
    public static void close() {
        try {
            if (admin != null) {
                admin.close();
            }
            if (null != connection) {
                connection.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 向某一行的某一列插入數據
     * 
     * @param tableName 表名
     * @param rowKey    行鍵
     * @param colFamily 列族名
     * @param col       列名(如果其列族下沒有子列,此參數可為空)
     * @param val       值
     * @throws IOException
     */
    public static void insertRow(String tableName, String rowKey, String colFamily, String col, String val)throws IOException {
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Put put = new Put(rowKey.getBytes());
        put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());
        table.put(put);
        table.close();
        close();
    }

    /**
     * 根據表名查找表信息
     */
    public static void getData(String tableName) throws IOException {
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Scan scan = new Scan();
        ResultScanner scanner = table.getScanner(scan);
        for (Result result : scanner) {
            showCell((result));
        }
        close();
    }
    /**
     * 
      * 格式化輸出
     * 
     * @param result
     * 
     */
    public static void showCell(Result result) {
        Cell[] cells = result.rawCells();
        for (Cell cell : cells) {
            System.out.println("RowName(行鍵):" + new String(CellUtil.cloneRow(cell)) + " ");
            System.out.println("Timetamp(時間戳):" + cell.getTimestamp() + " ");
            System.out.println("column Family(列簇):" + new String(CellUtil.cloneFamily(cell)) + " ");
            System.out.println("column Name(列名):" + new String(CellUtil.cloneQualifier(cell)) + " ");
            System.out.println("value:(值)" + new String(CellUtil.cloneValue(cell)) + " ");
            System.out.println();
        }
    }
    /**
     * 
     * 刪除數據
     * 
     * @param tableName 表名
     * 
     * @param rowKey    行鍵
     * 
     * @param colFamily 列族名
     * 
     * @param col       列名
     * 
     * @throws IOException
     * 
     */
    public static void deleteRow(String tableName, String rowKey, String colFamily, String col) throws IOException {
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Delete delete = new Delete(rowKey.getBytes());
        if(col == null) {
            //刪除指定列族的所有數據(此情況是列族下無列限定符時的情況)
            delete.addFamily(colFamily.getBytes());
            table.delete(delete);
            table.close();
        }else {
            //刪除指定列的數據(此列主要說的是列限定修飾符)
            delete.addColumn(colFamily.getBytes(), col.getBytes());
            table.delete(delete);
            table.close();
        }
        close();
    }

    public static void main(String[] args) {
        Test_3 t = new Test_3();
        boolean flag = true;
        while (flag){
            System.out.println("------------向已經創(chuàng)建好的表中添加和刪除指定的列簇或列--------------------");
            System.out.println("              請輸入您要進行的操作   1- 添加          2-刪除                       ");
            Scanner scan = new Scanner(System.in);
            String choose1 = scan.nextLine();
            switch (choose1) {
            case "1":
                try {
                    //put 'student','95003','Sname','wangjinxuan'     (添加列)
                    //put 'student','95003','Sname:nickName','wang'    (添加列族)
                    //put 'student','95003','Sname:firstName','jinxuan'  (添加列族)
//                    t.insertRow(tableName, rowKey, colFamily, col, val);
                    t.insertRow("student", "95003", "Sname",null, "wangjingxuan");
                    t.insertRow("student", "95003", "Sname", "nickName", "wang");
                    t.insertRow("student", "95003", "Sname", "firstName", "jingxuan");
                    System.out.println("插入成功:");
                    t.getData(tableName);
                } catch (IOException e) {
                    e.getMessage();
                }
                break;
            case "2":
                try {
                    System.out.println("----------------------刪除前,表的原本信息如下---------------------");
                    t.getData(tableName);
                    //delete 'student' ,’95003’,’Sname’
                    //delete 'student' ,’95003’,’Sname:nickName’
//                    t.deleteRow(tableName, rowKey, colFamily, col);    
                    t.deleteRow("student", "95003", "Sname", "firstName");    
                    System.out.println("-----------------------刪除成功-----------------------------
");
                    System.out.println("---------------------刪除后,表的信息如下---------------------");
                    t.getData(tableName);
                } catch (IOException e) {
                    e.getMessage();
                }
                break;
            }
            System.out.println(" 你要繼續(xù)操作嗎? 是-true 否-false ");
            flag = scan.nextBoolean();
        }
        System.out.println("   程序已退出!    ");
    }
}

4,清空指定的表的所有記錄數據:

HBase Shell:truncate 'student'

Java Api:

import java.io.IOException;
import java.util.Scanner;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.HBaseAdmin;
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.client.Table;
import org.apache.hadoop.hbase.util.Bytes;
public class Test_4 {
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;
    // 建立連接
    public static void init() {
        configuration = HBaseConfiguration.create();
        configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");
        try {
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // 關閉連接
    public static void close() {
        try {
            if (admin != null) {
                admin.close();
            }
            if (null != connection) {
                connection.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 
     * 清空制定的表的所有記錄數據
     * 
     * @param args
     * 
     * @throws IOException
     * 
     */
    public static void clearRows(String tableName) throws IOException {
        init();
        HBaseAdmin admin1 = new HBaseAdmin(configuration);
        // 讀取了之前表的表名 列簇等信息,然后再進行刪除操作。
        HTableDescriptor tDescriptor = admin1.getTableDescriptor(Bytes.toBytes(tableName));
        // 總思想是先將原表結構保留下來,然后進行刪除,再重新依據保存的信息重新創(chuàng)建表。
        TableName tablename = TableName.valueOf(tableName);
        // 刪除表
        admin.disableTable(tablename);
        admin.deleteTable(tablename);
        // 重新建表
        admin.createTable(tDescriptor);
        close();
    }
    /**
     * 
     * 根據表名查找表信息
     * 
     */
    public static void getData(String tableName) throws IOException {
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Scan scan = new Scan();
        ResultScanner scanner = table.getScanner(scan);
        for (Result result : scanner){
            showCell((result));
        }
        close();
    }

    /**
     * 
     * 格式化輸出
     * 
     * @param result
     * 
     */
    public static void showCell(Result result) {
        Cell[] cells = result.rawCells();
        for (Cell cell : cells) {
            System.out.println("RowName(行鍵):" + new String(CellUtil.cloneRow(cell)) + " ");
            System.out.println("Timetamp(時間戳):" + cell.getTimestamp() + " ");
            System.out.println("column Family(列簇):" + new String(CellUtil.cloneFamily(cell)) + " ");
            System.out.println("column Name(列名):" + new String(CellUtil.cloneQualifier(cell)) + " ");
            System.out.println("value:(值)" + new String(CellUtil.cloneValue(cell)) + " ");
            System.out.println();
        }
    }

    public static void main(String[] args) {
        Test_4 test_4 = new Test_4();
        Scanner scan = new Scanner(System.in);
        System.out.println("請輸入要清空的表名");
        String tableName = scan.nextLine();
        try {
            System.out.println("表原來的信息:");
            test_4.getData(tableName);
            test_4.clearRows(tableName);
            System.out.println("表已清空:");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5,統(tǒng)計表的行數:

HBase Shellcount 'student'

Java Api:

import java.io.IOException;
import java.util.Scanner;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
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.client.Table;
public class Test_5 {
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;
    //建立連接
    public static void init() {
        configuration = HBaseConfiguration.create();
        configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");
        try {
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // 關閉連接
    public static void close() {
        try {
            if (admin != null) {
                admin.close();
            }
            if (null != connection) {
                connection.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void countRows(String tableName) throws IOException{
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Scan scan = new Scan();
        ResultScanner scanner = table.getScanner(scan);
        int num = 0;
        for (Result result = scanner.next(); result != null; result = scanner.next()){
            num++;
        }
        System.out.println("行數:" + num);
        scanner.close();
        close();
    }
    public static void main(String[] args) throws IOException {
        Test_5 test_5 = new Test_5();
        Scanner scan = new Scanner(System.in);
        System.out.println("請輸入要統(tǒng)計行數的表名");
        String tableName = scan.nextLine();
        test_5.countRows(tableName);
    }
}

(二)現有以下關系型數據庫中的表和數據,要求將其轉換為適合于HBase存儲的表并插入數據:

學生表(Student)、課程表(Course)、選課表(SC):同時,請編程完成以下指定功能:

create 'Student','S_No','S_Name','S_Sex','S_Age'
put 'Student','s001','S_No','2015001'
put 'Student','s001','S_Name','Zhangsan'
put 'Student','s001','S_Sex','male'
put 'Student','s001','S_Age','23'
put 'Student','s002','S_No','2015002'
put 'Student','s002','S_Name','Mary'
put 'Student','s002','S_Sex','female'
put 'Student','s002','S_Age','22'
put 'Student','s003','S_No','2015003'
put 'Student','s003','S_Name','Lisi'
put 'Student','s003','S_Sex','male'
put 'Student','s003','S_Age','24'
—————————————————————————————————————————————————————————————————————————————
create 'Course','C_No','C_Name','C_Credit'
put 'Course','c001','C_No','123001'
put 'Course','c001','C_Name','Math'
put 'Course','c001','C_Credit','2.0'
put 'Course','c002','C_No','123002'
put 'Course','c002','C_Name','Computer'
put 'Course','c002','C_Credit','5.0'
put 'Course','c003','C_No','123003'
put 'Course','c003','C_Name','English'
put 'Course','c003','C_Credit','3.0'
————————————————————————————————————————————————————————————————————————————————
put 'SC','sc001','SC_Sno','2015001'
put 'SC','sc001','SC_Cno','123001'
put 'SC','sc001','SC_Score','86'
put 'SC','sc002','SC_Sno','2015001'
put 'SC','sc002','SC_Cno','123003'
put 'SC','sc002','SC_Score','69'
put 'SC','sc003','SC_Sno','2015002'
put 'SC','sc003','SC_Cno','123002'
put 'SC','sc003','SC_Score','77'
put 'SC','sc004','SC_Sno','2015002'
put 'SC','sc004','SC_Cno','123003'
put 'SC','sc004','SC_Score','99'
put 'SC','sc005','SC_Sno','2015003'
put 'SC','sc005','SC_Cno','123001'
put 'SC','sc005','SC_Score','98'
put 'SC','sc006','SC_Sno','2015003'
put 'SC','sc006','SC_Cno','123002'
put 'SC','sc006','SC_Score','95'

同時,請編程完成以下指定功能:

① createTable(String tableName, String[] fields):創(chuàng)建表,參數tableName為表的名稱,字符串數組fields為存儲記錄各個域名稱的數組。

(域名稱即列族名稱啦)要求當HBase已經存在名為tableName的表的時候,先刪除原有的表,然后再創(chuàng)建新的表。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;

import java.io.IOException;

public class CreateTable {
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;

    public static void createTable(String tableName, String[] fields) throws IOException {
        init();
        TableName tablename = TableName.valueOf(tableName);
        if (admin.tableExists(tablename)) {
            System.out.println("table is exists!");
            admin.disableTable(tablename);
            admin.deleteTable(tablename);
        }
        HTableDescriptor hTableDescriptor = new HTableDescriptor(tablename);
        for (String str : fields) {
            HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(str);
            hTableDescriptor.addFamily(hColumnDescriptor);
        }
        admin.createTable(hTableDescriptor);
        close();
    }

    public static void init() {
        configuration = HBaseConfiguration.create();
        configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");
        try {
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void close() {
        try {
            if (admin != null) {
                admin.close();
            }
            if (null != connection) {
                connection.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String[] fields = {"Score"};
        try {
            createTable("person", fields);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

②addRecord(String tableName, String row, String[] fields, String[] values): 向表tableName、行row(用S_Name表示)和字符串數組files指定的單元格中添加對應的數據values。其中fields中每個元素如果對應的列族下還有相應的列限定符的話,用"columnFamily:column"表示。例如,同時向"Math"、“Computer Science”、"English"三列添加成績時,字符串數組fields為{“Score:Math”, “Score: Computer Science”, “Score:English”},數組values存儲這三門課的成績。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;

import java.io.IOException;

public class AddRecord {
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;

    public static void addRecord(String tableName, String row, String[] fields, String[] values) throws IOException {
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        for (int i = 0; i != fields.length; i++) {
            Put put = new Put(row.getBytes());
            String[] cols = fields[i].split(":");
            put.addColumn(cols[0].getBytes(), cols[1].getBytes(), values[i].getBytes());
            table.put(put);
        }
        table.close();
        close();
    }

    public static void init() {
        configuration = HBaseConfiguration.create();
        configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");
        try {
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void close() {
        try {
            if (admin != null) {
                admin.close();
            }
            if (null != connection) {
                connection.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String[] fields = {"Score:Math", "Score:Computer Science", "Score:English"};
        String[] values = {"99", "80", "100"};
        try {
            addRecord("person", "Score", fields, values);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

③ scanColumn(String tableName, String column): 瀏覽表tableName某一列的數據,如果某一行記錄中該列數據不存在,則返回null。要求當參數column為某一列族名稱時,如果底下有若干個列限定符,則要列出每個列限定符代表的列的數據;當參數column為某一列具體名稱(例如"Score:Math")時,只需要列出該列的數據。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;

public class ScanColumn {
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;

    public static void scanColumn(String tableName, String column) throws IOException {
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Scan scan = new Scan();
        scan.addFamily(Bytes.toBytes(column));
        ResultScanner scanner = table.getScanner(scan);
        for (Result result = scanner.next(); result != null; result = scanner.next()) {
            showCell(result);
        }
        table.close();
        close();
    }

    public static void showCell(Result result) {
        Cell[] cells = result.rawCells();
        for (Cell cell : cells) {
            System.out.println("RowName:" + new String(CellUtil.cloneRow(cell)) + " ");
            System.out.println("Timetamp:" + cell.getTimestamp() + " ");
            System.out.println("column Family:" + new String(CellUtil.cloneFamily(cell)) + " ");
            System.out.println("row Name:" + new String(CellUtil.cloneQualifier(cell)) + " ");
            System.out.println("value:" + new String(CellUtil.cloneValue(cell)) + " ");
        }
    }

    public static void init() {
        configuration = HBaseConfiguration.create();
        configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");
        try {
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 關閉連接
    public static void close() {
        try {
            if (admin != null) {
                admin.close();
            }
            if (null != connection) {
                connection.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try {
            scanColumn("person", "Score");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

④ modifyData(String tableName, String row, String column):修改表tableName,行row(可以用學生姓名S_Name表示),列column指定的單元格的數據。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;

import java.io.IOException;

public class ModifyData {

    public static long ts;
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;

    public static void modifyData(String tableName, String row, String column, String val) throws IOException {
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Put put = new Put(row.getBytes());
        Scan scan = new Scan();
        ResultScanner resultScanner = table.getScanner(scan);
        for (Result r : resultScanner) {
            for (Cell cell : r.getColumnCells(row.getBytes(), column.getBytes())) {
                ts = cell.getTimestamp();
            }
        }
        put.addColumn(row.getBytes(), column.getBytes(), ts, val.getBytes());
        table.put(put);
        table.close();
        close();
    }

    public static void init() {
        configuration = HBaseConfiguration.create();
        configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");
        try {
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void close() {
        try {
            if (admin != null) {
                admin.close();
            }
            if (null != connection) {
                connection.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try {
            modifyData("person", "Score", "Math", "100");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

⑤ deleteRow(String tableName, String row):刪除表tableName中row指定的行的記錄。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;

import java.io.IOException;

public class ModifyData {

    public static long ts;
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;

    public static void modifyData(String tableName, String row, String column, String val) throws IOException {
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Put put = new Put(row.getBytes());
        Scan scan = new Scan();
        ResultScanner resultScanner = table.getScanner(scan);
        for (Result r : resultScanner) {
            for (Cell cell : r.getColumnCells(row.getBytes(), column.getBytes())) {
                ts = cell.getTimestamp();
            }
        }
        put.addColumn(row.getBytes(), column.getBytes(), ts, val.getBytes());
        table.put(put);
        table.close();
        close();
    }

    public static void init() {
        configuration = HBaseConfiguration.create();
        configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");
        try {
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void close() {
        try {
            if (admin != null) {
                admin.close();
            }
            if (null != connection) {
                connection.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try {
            modifyData("person", "Score", "Math", "100");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

參考:

《HBase2.2.2安裝和編程實踐指南_廈大數據庫實驗室博客 (xmu.edu.cn)》

實驗3 熟悉常用的 HBase 操作https://blog.csdn.net/qq_38648558/article/details/83033050

《實驗3_熟悉常用的HBase操作》https://blog.csdn.net/qq_50596778/article/details/120552574


總結

以上是生活随笔為你收集整理的HBase的编程实践(实验3_熟悉常用的HBase操作)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产成人亚洲在线观看 | 久操视频在线观看 | 在线免费中文字幕 | 日韩一区二区三区免费视频 | 99热999| 丁香花在线观看免费完整版视频 | 精品成人a区在线观看 | 狠狠艹夜夜干 | 1000部18岁以下禁看视频 | 国产精品资源在线观看 | 亚洲影音先锋 | 久久深夜福利免费观看 | 国产精品久久久久久久久久妇女 | 国产系列在线观看 | 三级黄色网址 | 色网站在线观看 | 国产精品久久视频 | 日韩欧美国产成人 | 欧美日韩高清在线观看 | 在线日韩精品视频 | 中文区中文字幕免费看 | 黄色毛片一级 | 成年人在线免费看视频 | 国产成人精品一区一区一区 | 国产伦理一区二区三区 | 黄色精品一区二区 | 999国内精品永久免费视频 | 最近中文字幕免费av | 夜色资源站国产www在线视频 | 99精品视频在线观看免费 | 狠狠躁日日躁狂躁夜夜躁av | 亚洲天堂免费视频 | 国产福利精品在线观看 | 亚洲综合视频在线 | 国产精品18久久久久vr手机版特色 | www.夜夜爽 | 777奇米四色 | 国产一区二区精品久久91 | 欧美久久久久久久久中文字幕 | www黄色软件| 成人免费视频免费观看 | 日韩免费在线网站 | 亚洲一区二区三区四区精品 | 欧美 另类 交 | 午夜久草| 欧美aa一级 | 国产在线欧美日韩 | 日日夜夜天天 | 91免费高清视频 | 91丨九色丨91啦蝌蚪老版 | 日韩三级av | 成人精品国产免费网站 | 男女精品久久 | 日日夜夜精品网站 | 日p视频| 免费高清在线一区 | 亚洲欧美成人综合 | 婷婷在线免费视频 | 婷婷四房综合激情五月 | 99婷婷| 日本中文字幕免费观看 | 日本中文字幕网址 | 4438全国亚洲精品观看视频 | 精品国产一区二区三区四区在线观看 | 99视频精品在线 | 国产破处在线视频 | 91字幕 | 激情伊人五月天久久综合 | 久久久九色精品国产一区二区三区 | 天天综合亚洲 | 92国产精品久久久久首页 | 99性视频 | 中文字幕黄色 | 91在线精品观看 | 91精品视屏 | 在线91色 | 视频二区在线 | 手机成人在线电影 | 奇米影视四色8888 | 久久99亚洲精品久久久久 | 国产精品第一视频 | 日韩啪视频 | 婷婷丁香花五月天 | 亚洲综合视频在线观看 | 国产精品18久久久久久首页狼 | 欧美小视频在线观看 | 国产黄色精品网站 | 国产精品久久久av | 操操碰 | 国产剧在线观看片 | 日三级在线 | 最近日本韩国中文字幕 | 国产精品久久久久久久7电影 | 日韩高清久久 | 三级动态视频在线观看 | 久久草精品 | 久久午夜色播影院免费高清 | 娇妻呻吟一区二区三区 | 久久久久久久久久影院 | 日韩黄色免费电影 | 亚洲激情综合 | 国产午夜精品一区二区三区嫩草 | 免费a级黄色毛片 | 中文字幕在线播放日韩 | 国产网站av | 91视频高清免费 | 久草在线观看视频免费 | 精品国产精品久久一区免费式 | 亚洲精品成人 | 欧美韩日精品 | 婷婷六月天综合 | 国产精品男女啪啪 | 亚洲伊人色 | 一区二区视频在线免费观看 | 国产91学生 | 国产美女免费观看 | 亚洲无吗av | av高清一区二区三区 | 国产精品一区二区三区久久久 | 91麻豆精品国产91久久久久久久久 | 国产在线不卡一区 | 91亚洲狠狠婷婷综合久久久 | 人人爽人人爽人人片av | 亚洲资源视频 | 中文字幕xxxx | 美女网站视频色 | 亚洲视频综合在线 | 欧美精品小视频 | 色婷婷久久久 | 日韩在线免费视频观看 | 久久久精品欧美 | 99精品免费在线 | 日韩欧美在线不卡 | 一区av在线播放 | 精品在线观| 欧美另类重口 | av中文在线影视 | 欧美日韩国产精品一区二区三区 | 九九免费在线观看视频 | 日韩免费观看一区二区 | 日韩精品一区二区不卡 | 91看片黄色| 99免在线观看免费视频高清 | 欧美成人影音 | 精品一区二区三区久久久 | av观看久久久 | 九九导航 | 久热av在线 | 久久av观看 | 成人免费在线看片 | 色综合久久久久综合体桃花网 | 欧美精选一区二区三区 | www.夜夜| 天天做天天爱夜夜爽 | 亚洲综合在线五月 | 天天插视频 | 天天操天天干天天操天天干 | 超碰成人av| 国产精品成人在线观看 | 91麻豆免费版 | 伊人久久在线观看 | 中文字幕一区在线 | 一级黄色毛片 | 久久久久成人精品 | 天天射天天操天天 | 中文字幕在线视频一区二区三区 | 91免费高清 | 在线成人免费电影 | 久久综合久久88 | 成人免费在线视频观看 | 国产网红在线观看 | 91精品久久久久久久久久久久久 | 亚洲欧美少妇 | 色综合亚洲精品激情狠狠 | 日韩videos高潮hd | 国产精品理论片在线播放 | 国产69精品久久久久9999apgf | www国产亚洲精品久久网站 | 深爱激情站 | 日日干视频| 久色 网 | 日韩一级理论片 | 97超碰人人看 | 国产视频日韩视频欧美视频 | 激情网站| 免费看国产视频 | 黄色a一级片 | 91亚洲精品久久久中文字幕 | 国产精品一区在线 | 最新免费av在线 | 国产精品麻豆99久久久久久 | 欧美日韩三级在线观看 | 97福利在线观看 | 成年人免费观看国产 | 三级在线视频播放 | 久草精品网 | 成人毛片100免费观看 | 在线观看黄av | 日本aa在线 | 一区二区三区高清不卡 | 少妇做爰k8经典 | 日韩在线视频不卡 | 中文字幕在线观看网 | 欧美91精品国产自产 | 射射色| 国产r级在线观看 | 国产一区电影在线观看 | 最新成人在线 | 欧美日韩1区2区 | 日韩理论影院 | 欧美日韩免费观看一区=区三区 | 婷婷视频| 欧美精品久久久久久久免费 | 99色99| 91新人在线观看 | 亚洲专区中文字幕 | 欧美极度另类性三渗透 | 中国一级片视频 | 在线观看一区 | 五月婷av | 日韩欧美精选 | 永久免费av在线播放 | 国产成人精品亚洲 | 狠狠狠色丁香综合久久天下网 | 亚洲精品中文字幕视频 | 欧美精品资源 | 久久精品国产精品 | 中文字幕一区二区三区视频 | 丁香六月av| 中文有码在线视频 | 狠狠狠狠狠狠干 | 欧洲亚洲国产视频 | 丰满少妇在线观看资源站 | 国产精品淫 | 成人在线视频一区 | 国产精品久久久久久av | 一区二三国产 | 最近中文字幕在线播放 | 国产精品亚洲精品 | 国产精品1000 | 亚洲欧美国产精品18p | 国产麻豆精品一区 | 日韩网站一区 | 国产高清成人av | 亚洲精品一区中文字幕乱码 | 99久久精品国产一区二区三区 | 精品视频久久久 | 欧美日韩一区二区在线观看 | 欧美爽爽爽| 国产系列在线观看 | 天天玩夜夜操 | 亚洲视频2| 国产亚洲精品久 | 日本激情视频中文字幕 | 日韩精品视频第一页 | 日韩网页| 在线免费国产 | 99热精品免费观看 | 伊人成人精品 | 最新超碰| 久久99精品久久久久久 | 国产成人免费观看 | 97在线精品国自产拍中文 | 久久免费视频一区 | 在线观看一级 | 国产精品成人一区二区 | 日韩美精品视频 | 国产亚洲精品美女久久 | 在线观看免费中文字幕 | 久久99久久精品国产 | 91亚洲精品国产 | www.久久久精品 | 成人宗合网| 天天操天天色天天射 | 亚洲国产欧美在线看片xxoo | 欧美三级在线播放 | 日日夜夜天天综合 | 成年人免费观看国产 | 欧美精品乱码99久久影院 | 青青草在久久免费久久免费 | 久久色视频 | 免费合欢视频成人app | 婷婷色在线资源 | 一区二区亚洲精品 | 中文字幕日韩无 | 成人免费 在线播放 | 国产精选在线 | 国产一区二区久久久久 | 中文字幕资源在线 | 美女网站视频免费都是黄 | 亚洲成a人片77777潘金莲 | 人人澡人人添人人爽一区二区 | 中文字幕高清在线 | 国产xxxx做受性欧美88 | 免费观看成年人视频 | 在线看片日韩 | 美女在线国产 | 四虎在线永久免费观看 | 99自拍视频在线观看 | 日韩欧美在线观看一区二区三区 | 中国一级片在线播放 | 国产精品高潮呻吟久久久久 | 欧美a级免费视频 | 人人爽人人爽人人爽学生一级 | 国产精品久久久久久久久久久免费 | 97人人爽 | 国产在线精 | 久草在线视频新 | 久久艹人人 | 国产午夜精品一区二区三区嫩草 | 国产精品va在线观看入 | 超碰在线人人草 | 久久久久亚洲精品男人的天堂 | 欧美a级一区二区 | 久久精品79国产精品 | 91x色| 五月天丁香综合 | 亚洲最大av在线播放 | 成人动态视频 | 美女网站在线看 | 欧美久久久久久久久久 | av电影在线免费观看 | 丁香亚洲| 一区二区三区精品在线视频 | 天天看天天干天天操 | 久久久久久国产精品久久 | 久草精品国产 | 超碰人人99 | 亚洲最大激情中文字幕 | 三级av免费看 | 亚洲精品一区二区在线观看 | 欧美精品久久久久久久久久丰满 | 成年人网站免费在线观看 | 国产精品久久久久高潮 | 亚洲一区av | 97超视频在线观看 | 天天射日 | 国内精品久久久久久中文字幕 | 日韩av一区二区在线播放 | 国产裸体视频网站 | 成人免费网站在线观看 | 亚洲影视资源 | 色精品视频 | www.com黄| 久久久久久久av麻豆果冻 | 99精品国产成人一区二区 | 久久久久久久久久免费视频 | 在线综合 亚洲 欧美在线视频 | 天天色天天射天天综合网 | 欧美精品久久久久久久久久白贞 | 伊人电影天堂 | 黄色网在线播放 | 91精品区| 国产美女网站视频 | 激情网站网址 | 亚洲黄色一级大片 | 九九久久免费 | 亚洲永久在线 | 久久久综合电影 | 国产精品一区在线 | 欧美午夜久久久 | 久草视频精品 | 久久成人精品视频 | 国产精品女同一区二区三区久久夜 | 日韩精品视频网站 | 五月天综合激情 | 国产一区二区久久久 | 色天天中文 | 成人国产精品久久久 | 91亚洲精品久久久久图片蜜桃 | 91理论片午午伦夜理片久久 | 91av短视频 | 日韩高清不卡一区二区三区 | 亚洲精品一区中文字幕乱码 | 午夜久久久久久久久 | 伊色综合久久之综合久久 | 日本精品一区二区三区在线观看 | 免费在线观看国产黄 | www毛片com| 婷婷精品在线视频 | 久久精品99精品国产香蕉 | 国产免费观看高清完整版 | 999亚洲国产996395 | 日本久久成人中文字幕电影 | 操高跟美女| 日韩精品无码一区二区三区 | 日日夜色| 成年人视频在线免费播放 | 中文字幕视频免费观看 | 欧美另类调教 | 韩日电影在线免费看 | www.狠狠| 综合铜03 | 亚洲精品美女在线观看播放 | 日韩精品中文字幕在线不卡尤物 | 日韩理论电影在线 | 亚洲国产精品久久久久婷婷884 | 久久久久久久久久免费视频 | 国产精品高潮久久av | 日本高清免费中文字幕 | 久久久亚洲精品 | 91在线免费视频观看 | 欧美精品在线观看免费 | 国产一区在线免费 | 国产中文字幕在线观看 | 99tvdz@gmail.com| 在线91视频 | 中文字幕在线看 | 一区二区欧美在线观看 | 色综久久 | 久久久久久久久毛片精品 | 97超碰色偷偷| 特级西西人体444是什么意思 | 天天天插 | 日本丶国产丶欧美色综合 | 在线观看完整版免费 | 亚洲一级黄色片 | 欧美天天综合网 | 成人久久精品视频 | www.黄色网.com | 成人免费共享视频 | 色吊丝在线永久观看最新版本 | 日韩午夜av电影 | 欧美精品久久天天躁 | 久久精品视频在线看 | 91视频观看免费 | 狠狠色噜噜狠狠狠合久 | 中文字幕永久免费 | 久久少妇av | 最近中文字幕免费观看 | 午夜精品久久久久久久99水蜜桃 | 日韩精品免费在线观看 | 国产小视频你懂的在线 | 99热九九这里只有精品10 | 91麻豆精品国产91久久久久久 | h视频在线看 | 狠狠色丁香婷婷综合欧美 | 国产一二三在线视频 | 婷婷色综合 | 中文字幕乱视频 | 色国产精品一区在线观看 | 免费下载高清毛片 | 日韩高清在线一区二区三区 | 日韩在线电影一区二区 | 免费看黄色大全 | 99精品国产在热久久下载 | 精品在线观看视频 | a级国产毛片 | 99热这里只有精品国产首页 | 天天操网站 | 国产不卡在线视频 | 日本性xxxxx 亚洲精品午夜久久久 | 日韩高清dvd | 97夜夜澡人人双人人人喊 | 日韩欧美视频在线 | 色噜噜日韩精品一区二区三区视频 | 国产99久久久国产精品 | 色偷偷网站视频 | 99在线精品视频在线观看 | 亚洲成人高清在线 | 国产激情电影综合在线看 | 中文字幕在线观看免费观看 | 五月婷婷开心 | 精品在线不卡 | 国产免费观看视频 | 特级西西444www高清大视频 | 久久免费久久 | 中文字幕在线观看2018 | 亚洲国产精品久久久久 | 国产日韩在线视频 | 亚洲精品国产精品国自产 | 国产精品99精品 | 国产精品男女 | 一区二区中文字幕在线播放 | 久久理论电影网 | 国产成人精品一区二区三区在线观看 | 国产高清专区 | 久久首页| 亚洲六月丁香色婷婷综合久久 | 黄色av网站在线观看免费 | 欧美精品一区二区免费 | 最新中文字幕在线资源 | 欧美日韩性视频 | 国产一级黄色av | 欧美大片在线观看一区 | 婷婷丁香九月 | 97视频在线观看视频免费视频 | 天天综合导航 | 久久久久久蜜桃一区二区 | 91丨九色丨蝌蚪丰满 | 日韩av网站在线播放 | 美女网站视频免费都是黄 | 亚洲精品观看 | 超碰在线观看97 | 亚洲 综合 国产 精品 | 国产视频久久久 | 久久曰视频 | 蜜桃av人人夜夜澡人人爽 | 欧美在线观看小视频 | 亚洲人xxx | 国产精品久99 | 亚洲日本在线视频观看 | 成全免费观看视频 | 久久短视频 | 中文字幕免费观看 | a亚洲视频 | 国色天香av | 亚洲欧美日韩国产一区二区三区 | 在线视频第一页 | 国内精品久久天天躁人人爽 | 国产a级精品 | 91成人免费看片 | 伊人电影在线观看 | 久久看片网 | 99久久精品久久久久久动态片 | 久草视频免费在线播放 | www.久久婷婷 | 中文字幕高清有码 | 成人亚洲免费 | 精品国产免费一区二区三区五区 | 天天摸天天操天天爽 | 亚洲视频播放 | 欧美日韩在线电影 | 国产精品久久久久久久久久久免费 | 国产成人精品一区二区三区福利 | 久久国产色 | 少妇视频在线播放 | 精品国产a| 高清美女视频 | 天天鲁天天干天天射 | 久久人人射 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 97电影院网 | 国产无遮挡又黄又爽在线观看 | 亚洲精品久久久蜜桃 | 免费网址在线播放 | 国产亚洲视频在线观看 | 国产色爽 | 欧美日韩午夜在线 | 色人久久| 婷婷精品国产一区二区三区日韩 | 久久久久久久久久久影院 | 91在线免费播放视频 | 激情五月综合网 | 中文一区在线观看 | 国产99色| 99婷婷狠狠成为人免费视频 | 最新中文字幕视频 | 成人在线一区二区三区 | 国产精品女人久久久久久 | 青草视频在线 | 综合久久精品 | 五月天中文字幕 | 亚洲视频h| 青青看片 | 日b视频在线观看网址 | 超级碰碰碰视频 | 色婷婷成人网 | 成人免费网站视频 | av色图天堂网 | 91色在线观看 | 日日夜夜天天 | 中文在线a天堂 | 在线电影av| 操久久网| 91网免费观看| 91mv.cool在线观看 | 久久avav | 久久久午夜精品理论片中文字幕 | 美女视频a美女大全免费下载蜜臀 | 免费亚洲一区二区 | 欧美日韩国产网站 | 黄色一集片 | 福利一区二区三区四区 | 免费观看性生活大片3 | 97超碰人人模人人人爽人人爱 | 精品国产诱惑 | 中文字幕高清免费日韩视频在线 | 国内精品亚洲 | 亚洲国产日韩欧美在线 | 五月天婷婷在线视频 | 天堂视频中文在线 | 婷婷网五月天 | 亚洲精品 在线视频 | 国产一二三在线视频 | 国产精品久久久久久久久久久免费 | 日日碰狠狠躁久久躁综合网 | 欧美日韩另类在线 | 99精品国产亚洲 | 激情av综合 | 久久视精品 | 一区二区三区四区五区六区 | av黄色av | 国产又粗又长又硬免费视频 | 91精品免费在线观看 | 日韩视频中文 | 国产专区视频在线观看 | 成年人在线观看免费视频 | 六月天综合网 | 毛片www| 国产精品美女久久久久久免费 | 日日干av | 国产亚洲精品久久久久久久久久久久 | 在线成人性视频 | a资源在线 | 天堂在线v | 亚洲五月花| 少妇性色午夜淫片aaaze | 久久夜色精品国产欧美乱 | 五月天中文字幕mv在线 | 99久热在线精品视频 | 欧美爽爽爽 | 人人添人人澡人人澡人人人爽 | 麻豆视频在线免费观看 | 91麻豆.com| 欧美日韩一区二区视频在线观看 | 欧美精品999 | 久久午夜免费视频 | 国产精品视频地址 | 国产一级a毛片视频爆浆 | 一区二区三区在线播放 | 国产精品一区二区麻豆 | 日本女人逼 | 欧美人体xx| 国产精品porn| 色av男人的天堂免费在线 | 在线观看av麻豆 | 日本公妇在线观看 | 激情五月综合 | 欧美性色黄大片在线观看 | 91丨九色丨国产在线 | 精品在线免费视频 | 日韩精品一区二区三区免费观看视频 | 亚洲视频分类 | 97超碰免费在线 | 天天操天天射天天添 | 精品在线播放视频 | 国产日韩在线看 | 国产欧美精品一区二区三区四区 | 超碰在线1 | 国产精品video爽爽爽爽 | 亚洲在线精品 | 精品国产视频在线 | 日韩动态视频 | 五月婷婷丁香激情 | 在线观看日韩视频 | 天天草天天操 | 91在线国产观看 | 丁香九月激情 | 九九视频这里只有精品 | av在线电影播放 | 超碰97av在线 | 美女久久 | 99精品免费网| 麻豆果冻剧传媒在线播放 | 激情电影在线观看 | 在线 成人 | 天天干天天插伊人网 | 国产成人a v电影 | 欧美欧美 | 美女免费视频一区二区 | 日韩av影视 | 香蕉视频日本 | 国产精品18久久久久久久 | 黄污网站在线观看 | 婷婷丁香导航 | 久久久综合电影 | 99色资源| 国产护士hd高朝护士1 | 亚洲禁18久人片 | 久久国产精品久久w女人spa | 色av网站 | 国产一区在线免费观看视频 | 成人国产网站 | 日女人电影 | 国产污视频在线观看 | 99热精品久久 | 久久久久国产一区二区三区四区 | 97国产小视频 | 久久看毛片 | 色综合天天射 | 亚洲综合色视频 | 婷婷丁香久久五月婷婷 | 欧美成人在线网站 | 国产毛片久久 | 亚洲欧洲视频 | www看片网站 | 69国产在线观看 | 日韩av电影网站在线观看 | 国产精品三级视频 | 精品国产亚洲在线 | 成人免费毛片aaaaaa片 | 国产精品久久久久久av | 国产精品在线看 | 成人视屏免费看 | 日韩欧美一区二区在线播放 | 国产亚洲精品成人av久久ww | 日本不卡一区二区三区在线观看 | 丁香激情视频 | 国产精品一区二区62 | 亚洲综合在线观看视频 | 特级西西人体444是什么意思 | 国产一区二区三区高清播放 | 日韩理论片在线 | 欧美地下肉体性派对 | 中文字幕亚洲高清 | 91成人小视频 | 色午夜| 奇米影视999 | 亚洲五月| 亚洲少妇影院 | 欧美精品在线免费 | 日韩av福利在线 | 日操干| 久久激情视频网 | 91.麻豆视频 | 2023国产精品自产拍在线观看 | 精品国产成人av | 色av色av色av| 夜夜看av | 深爱激情综合 | .国产精品成人自产拍在线观看6 | 成人久久久久久久久久 | 五月婷婷色播 | 日韩一区二区久久 | 成人在线观看免费 | 中文字幕999 | 综合av在线 | 久久婷五月| 亚洲国产成人精品久久 | 在线观看91精品国产网站 | 亚洲国产日韩在线 | 久久久在线免费观看 | 日本黄区免费视频观看 | 色99之美女主播在线视频 | 激情xxxx| 精品九九久久 | 日韩精品播放 | 午夜精品久久久久久久99 | 国产成人精品在线播放 | 久久av网址 | 在线国产视频一区 | 最新国产在线视频 | 精品视频在线观看 | 美女黄频免费 | 日本在线免费看 | 亚洲女人天堂成人av在线 | 高清一区二区 | 狠狠色伊人亚洲综合网站野外 | 日韩av一区二区三区在线观看 | 91亚洲精品久久久中文字幕 | 欧美天堂久久 | 久久亚洲热 | 亚洲综合色播 | 九九综合久久 | 欧美有色| 精品国产1区2区3区 国产欧美精品在线观看 | 免费观看成年人视频 | 91国内产香蕉 | 色综合久久久久综合体 | 日韩在线观看精品 | 中文av网站 | 九九在线精品视频 | 国产精品自产拍在线观看网站 | 免费视频黄 | 在线看av网址 | 中文字幕黄色av | 欧美日韩高清 | av中文字幕第一页 | 婷婷色综合 | 三级在线国产 | 久久天天躁夜夜躁狠狠躁2022 | 天堂av在线免费观看 | 九九色在线| 久久精品99国产精品亚洲最刺激 | 久久成年人网站 | 日韩专区在线观看 | 毛片网在线 | 99亚洲精品视频 | 亚洲成人精品 | 九九热在线视频免费观看 | 99久久日韩精品视频免费在线观看 | 日韩中文字幕在线看 | 99久高清在线观看视频99精品热在线观看视频 | 国产在线观看你懂得 | 亚洲精品一区中文字幕乱码 | 国产精品一区二区吃奶在线观看 | 一区二区三区在线观看中文字幕 | 国产又粗又猛又爽又黄的视频免费 | 中国美女一级看片 | 91大神在线观看视频 | 国产成人一区二区三区影院在线 | 国产精品高潮呻吟久久av无 | 亚洲精品国产精品久久99 | 日韩精品欧美视频 | 中文字幕免费高清av | 亚洲精品在线二区 | 99精品系列| 免费一级黄色 | 国产高清视频在线播放一区 | 91成人在线观看喷潮 | 午夜精品久久久久久久99 | 天天操夜夜干 | 91成人精品| 国产真实精品久久二三区 | 国产福利小视频在线 | 最近日本mv字幕免费观看 | 91刺激视频 | 国产精品一区二区免费视频 | 婷婷色在线 | 99在线高清视频在线播放 | 国产一区高清在线 | 91女人18片女毛片60分钟 | 亚洲精品中文在线观看 | 久久久久久久久久久久久国产精品 | 国产欧美精品一区二区三区四区 | 美腿丝袜av | 久久国产精品一二三区 | 91中文字幕| 91视频下载 | 欧美精品久久久久久久亚洲调教 | 亚洲精品在线观看av | 天天射天天舔天天干 | av片免费播放 | 中文字幕一区二区三区在线播放 | 欧美日韩综合在线观看 | 亚洲免费精彩视频 | 国产日韩中文在线 | 精品一区在线 | 片网站 | 精品久久在线 | av综合站 | 97碰在线视频 | 青青草久草在线 | 日韩av电影网站在线观看 | 天天色天天操天天爽 | 波多野结衣在线中文字幕 | 久草www | 国产成人久久精品77777综合 | 国产精品入口麻豆 | 亚洲人成人天堂h久久 | 色噜噜噜噜 | 高清不卡免费视频 | 黄色a视频 | 美女久久久久 | 成人91在线观看 | 精品在线观看一区二区 | 韩国一区二区av | 黄网站色视频免费观看 | 99久久精品国产免费看不卡 | 国产青春久久久国产毛片 | 91中文字幕在线 | 91久久久久久国产精品 | 色综合久久88 | 亚洲第五色综合网 | 国产精品一区免费观看 | 欧美色精品天天在线观看视频 | 欧美韩国日本在线观看 | 久久国内精品视频 | www.色的 | 久久精品三| 欧美精品v国产精品v日韩精品 | 新版资源中文在线观看 | 色婷婷国产 | 亚洲在线视频观看 | 一级一级一片免费 | 亚洲精品国偷拍自产在线观看蜜桃 | 成人理论在线观看 | 国产精品黄色 | 国产特级毛片aaaaaa高清 | 久久人人添人人爽添人人88v | 天天拍天天操 | 精品99久久久久久 | 久久精品久久精品久久精品 | 在线观看韩国av | 免费在线看成人av | 亚洲精品一区二区久 | 在线欧美最极品的av | 国产一区二区三区在线 | 黄色动态图xx| 99这里只有久久精品视频 | 麻豆91小视频| 欧美精品亚洲精品 | 欧美黑人猛交 | 手机色站 | 日韩欧美一级二级 | 又大又硬又黄又爽视频在线观看 | 91在线观看黄 | 日韩理论电影在线观看 | 黄色成人影院 | 久久99国产一区二区三区 | 超碰在线观看99 | 91久草视频 | 亚州av一区 | 久久婷亚洲五月一区天天躁 | www国产亚洲精品久久网站 | 1000部国产精品成人观看 | 婷婷av综合 | 欧美另类视频 | 成人av午夜 | 久久伊人爱 | 免费福利片2019潦草影视午夜 | 九九九热| 人人干人人草 | 91麻豆精品91久久久久同性 | 天天干 夜夜操 | 色综合久久久久久久 | 999视频在线播放 | 日韩在线不卡视频 | av在线播放网址 | 91网页版在线观看 | 色综合小说 | 美国av片在线观看 | 久久国产精品久久精品 | 日韩欧美综合在线视频 | 色五月色开心色婷婷色丁香 | 国产精品激情偷乱一区二区∴ | 国产日本三级 | 91视频在线免费 | a视频在线观看 | 国产一区二区三区网站 | 亚洲码国产日韩欧美高潮在线播放 | 久久免费播放视频 | 中文字幕影片免费在线观看 | 国产午夜视频在线观看 | 激情综合亚洲 | 免费在线黄色av | 亚洲国产丝袜在线观看 | 成人欧美日韩国产 | 久久久久影视 | 国产成人精品一二三区 | 免费三级大片 | 在线观看久 | 久久久综合九色合综国产精品 | 亚洲人成在线观看 | 精品日韩中文字幕 | 日本女人的性生活视频 | 欧美a在线免费观看 | 亚洲综合色婷婷 | 亚洲精品中文在线资源 | 麻豆视频国产在线观看 | 成年人视频在线 | 国产视频在线观看一区 | 日日夜夜狠狠干 | 欧美一级性生活 | 国产精品 日本 | 亚洲自拍偷拍色图 | 精品久久久久久亚洲 | 人人涩 | 久久国产精品99精国产 | 最新国产一区二区三区 | 在线观看日韩免费视频 | 97电院网手机版 | 美国av片在线观看 | 亚洲 欧洲 国产 日本 综合 | 日韩欧美一区二区三区在线观看 | 亚洲精品美女久久久久 | 视频福利在线 | 美女免费视频一区 | 久久短视频| 天天干com| 久久久精品二区 | 特级免费毛片 | 婷婷色狠狠 | 婷婷在线不卡 | 大荫蒂欧美视频另类xxxx | 午夜视频黄 | 久久xxxx| 国产涩涩在线观看 | 精品一区二区在线免费观看 | 免费三级影片 | 999男人的天堂 | 久久免费视频这里只有精品 | 国产精品手机看片 | 久草视频资源 | 午夜精品一区二区三区在线视频 | 色婷婷狠狠操 | 一区二区三区在线观看免费 | 国产精品久久久久久久久免费看 | 久久r精品 | 麻豆果冻剧传媒在线播放 | 国产精品人人做人人爽人人添 | 8x成人免费视频 | 狠狠综合久久av | 黄色一级在线免费观看 | www.福利视频 | 999久久久欧美日韩黑人 | www.com久久久 | www.五月天 | 日韩欧美69 | 中文字幕乱码电影 | 久久久久综合精品福利啪啪 | 国产网站色 | 胖bbbb搡bbbb擦bbbb| 黄色小说在线观看视频 | 波多野结衣视频一区二区 | 五月婷婷六月丁香激情 | 一区在线观看 |