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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

/opt/hbase/conf 中不能启动hbase_Hbase从入门到入坑

發布時間:2023/12/31 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 /opt/hbase/conf 中不能启动hbase_Hbase从入门到入坑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一 什么是HBASE

HBASE是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,利用HBASE技術可在廉價PC Server上搭建起大規模結構化存儲集群。

HBASE的目標是存儲并處理大型的數據,更具體來說是僅需使用普通的硬件配置,就能夠處理由成千上萬的行和列所組成的大型數據。

HBASE是Google Bigtable的開源實現,但是也有很多不同之處。比如:Google Bigtable利用GFS作為其文件存儲系統,HBASE利用Hadoop HDFS作為其文件存儲系統;Google運行MAPREDUCE來處理Bigtable中的海量數據,HBASE同樣利用Hadoop MapReduce來處理HBASE中的海量數據;Google Bigtable利用Chubby作為協同服務,HBASE利用Zookeeper作為對應。

HBASE與mysql、oralce、db2、sqlserver等關系型數據庫不同,它是一個NoSQL數據庫(非關系型數據庫)

  • Hbase的表模型與關系型數據庫的表模型不同:
  • Hbase的表沒有固定的字段定義;
  • Hbase的表中每行存儲的都是一些key-value對
  • Hbase的表中有列族的劃分,用戶可以指定將哪些kv插入哪個列族
  • Hbase的表在物理存儲上,是按照列族來分割的,不同列族的數據一定存儲在不同的文件中
  • Hbase的表中的每一行都固定有一個行鍵,而且每一行的行鍵在表中不能重復
  • Hbase中的數據,包含行鍵,包含key,包含value,都是byte[ ]類型,hbase不負責為用戶維護數據類型
  • HBASE對事務的支持很差
  • HBASE相比于其他nosql數據庫(mongodb、redis、cassendra、hazelcast)的特點:

    Hbase的表數據存儲在HDFS文件系統中

    從而,hbase具備如下特性:

    • 存儲容量可以線性擴展;
    • 數據存儲的安全性可靠性極高!

    二 安裝HBASE

    HBASE是一個分布式系統

    其中有一個管理角色:HMaster(一般2臺,一臺active,一臺backup)

    其他的數據節點角色:HRegionServer(很多臺,看數據容量)

    2.1 安裝準備

    需要先有一個java環境

    首先,要有一個HDFS集群,并正常運行;regionserver應該跟hdfs中的datanode在一起

    其次,還需要一個zookeeper集群,并正常運行

    然后,安裝HBASE

    角色分配如下:

    Hdp01: namenode datanode regionserver hmaster zookeeper

    Hdp02: datanode regionserver zookeeper

    Hdp03: datanode regionserver zookeeper

    2.2 安裝步驟

    解壓hbase安裝包

    修改hbase-env.sh

    export JAVA_HOME=/root/apps/jdk1.7.0_67

    export HBASE_MANAGES_ZK=false

    修改hbase-site.xml

    hbase.rootdir

    hdfs://hdp01:9000/hbase

    hbase.cluster.distributed

    true

    hbase.zookeeper.quorum

    hdp01:2181,hdp02:2181,hdp03:2181

    修改 regionservers

    hdp01

    hdp02

    hdp03

    2.3 啟動hbase集群

    bin/start-hbase.sh

    啟動完后,還可以在集群中找任意一臺機器啟動一個備用的master

    bin/hbase-daemon.sh start master

    新啟的這個master會處于backup狀態

    三 hbase初體驗

    3.1 啟動hbase命令行客戶端

    bin/hbase?shellHbase>?list?????//?查看表Hbase>?status???//?查看集群狀態Hbase> version // 查看集群版本

    3.2 hbase表模型的特點

  • 一個表,有表名
  • 一個表可以分為多個列族(不同列族的數據會存儲在不同文件中)
  • 表中的每一行有一個“行鍵rowkey”,而且行鍵在表中不能重復
  • 表中的每一對kv數據稱作一個cell
  • hbase可以對數據存儲多個歷史版本(歷史版本數量可配置)
  • 整張表由于數據量過大,會被橫向切分成若干個region(用rowkey范圍標識),不同region的數據也存儲在不同文件中
  • hbase會對插入的數據按順序存儲:
  • 要點一:首先會按行鍵排序

    要點二:同一行里面的kv會按列族排序,再按k排序

    3.3 hbase的表中能存儲什么數據類型

    hbase中只支持byte[]

    此處的byte[] 包括了:rowkey,key,value,列族名,表名

    3.4 hbase命令行客戶端操作

    名稱

    命令表達式

    創建表

    create '表名', '列族名1','列族名2','列族名N'

    查看所有表

    list

    描述表

    describe ‘表名’

    判斷表存在

    exists '表名'

    判斷是否禁用啟用表

    is_enabled '表名'

    is_disabled ‘表名’

    添加記錄

    put ‘表名’, ‘rowKey’, ‘列族 : 列‘ , '值'

    查看記錄rowkey下的所有數據

    get '表名' , 'rowKey'

    查看表中的記錄總數

    count '表名'

    獲取某個列族

    get '表名','rowkey','列族'

    獲取某個列族的某個列

    get '表名','rowkey','列族:列’

    刪除記錄

    delete ‘表名’ ,‘行名’ , ‘列族:列'

    刪除整行

    deleteall '表名','rowkey'

    刪除一張表

    先要屏蔽該表,才能對該表進行刪除

    第一步 disable ‘表名’ ,第二步 drop '表名'

    清空表

    truncate '表名'

    查看所有記錄

    scan "表名"

    查看某個表某個列中所有數據

    scan "表名" , {COLUMNS=>'列族名:列名'}

    更新記錄

    就是重寫一遍,進行覆蓋,hbase沒有修改,都是追加

    3.4.1 建表

    create?'t_user_info','base_info','extra_info' 表名 列族名 列族名

    3.4.2 插入數據

    hbase(main):011:0> put 't_user_info','001','base_info:username','zhangsan'0 row(s) in 0.2420 seconds?hbase(main):012:0> put 't_user_info','001','base_info:age','18'0 row(s) in 0.0140 seconds?hbase(main):013:0> put 't_user_info','001','base_info:sex','female'0?row(s)?in?0.0070?seconds?hbase(main):014:0> put 't_user_info','001','extra_info:career','it'0 row(s) in 0.0090 seconds?hbase(main):015:0> put 't_user_info','002','extra_info:career','actoress'0?row(s)?in?0.0090?seconds?hbase(main):016:0> put 't_user_info','002','base_info:username','liuyifei'0 row(s) in 0.0060 seconds

    3.4.3 查詢方式一 scan掃描

    hbase(main):017:0> scan 't_user_info'ROW COLUMN+CELL 001 column=base_info:age, timestamp=1496567924507, value=18 001 column=base_info:sex, timestamp=1496567934669, value=female 001 column=base_info:username, timestamp=1496567889554, value=zhangsan 001 column=extra_info:career, timestamp=1496567963992, value=it 002 column=base_info:username, timestamp=1496568034187, value=liuyifei 002 column=extra_info:career, timestamp=1496568008631, value=actoress?

    3.4.4 查詢方式二 get單行數據

    hbase(main):020:0> get 't_user_info','001'COLUMN CELL base_info:age timestamp=1496568160192, value=19 base_info:sex timestamp=1496567934669, value=female base_info:username timestamp=1496567889554, value=zhangsan extra_info:career timestamp=1496567963992, value=it 4 row(s) in 0.0770 seconds

    3.4.5 刪除一個kv數據

    hbase(main):021:0> delete 't_user_info','001','base_info:sex'0 row(s) in 0.0390 seconds

    刪除整行數據

    hbase(main):024:0> deleteall 't_user_info','001'0 row(s) in 0.0090 secondshbase(main):025:0> get 't_user_info','001'COLUMN CELL 0 row(s) in 0.0110 seconds

    3.4.6 刪除整個表

    hbase(main):028:0> disable 't_user_info'0 row(s) in 2.3640 secondshbase(main):029:0> drop 't_user_info'0 row(s) in 1.2950 secondshbase(main):030:0> listTABLE 0 row(s) in 0.0130 seconds=> []

    3.5 Hbase重要特性-排序特性(行鍵)

    與nosql數據庫們一樣,row key是用來檢索記錄的主鍵。訪問HBASE table中的行,只有三種方式:

    1.通過單個row key訪問

    2.通過row key的range(正則)

    3.全表掃描

    Row key行鍵 (Row key)可以是任意字符串(最大長度 是 64KB,實際應用中長度一般為 10-100bytes),在HBASE內部,row key保存為字節數組。存儲時,數據按照Row key的字典序(byte order)排序存儲。設計key時,要充分排序存儲這個特性,將經常一起讀取的行存儲放到一起。(位置相關性)

    插入到hbase中去的數據,hbase會自動排序存儲:

    排序規則: 首先看行鍵,然后看列族名,然后看列(key)名;按字典順序

    Hbase的這個特性跟查詢效率有極大的關系

    比如:一張用來存儲用戶信息的表,有名字,戶籍,年齡,職業....等信息

    然后,在業務系統中經常需要:

    查詢某個省的所有用戶

    經常需要查詢某個省的指定姓的所有用戶

    思路:如果能將相同省的用戶在hbase的存儲文件中連續存儲,并且能將相同省中相同姓的用戶連續存儲,那么,上述兩個查詢需求的效率就會提高!!!

    做法:將查詢條件拼到rowkey內

    四 HBASE客戶端API操作

    package?com.wedoctor.hbase;?import java.util.ArrayList;?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.MasterNotRunningException;import org.apache.hadoop.hbase.TableName;import org.apache.hadoop.hbase.ZooKeeperConnectionException;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.Get;import org.apache.hadoop.hbase.client.HBaseAdmin;import org.apache.hadoop.hbase.client.HConnection;import org.apache.hadoop.hbase.client.HConnectionManager;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;import org.apache.hadoop.hbase.filter.ColumnPrefixFilter;import org.apache.hadoop.hbase.filter.CompareFilter;import org.apache.hadoop.hbase.filter.FilterList;import org.apache.hadoop.hbase.filter.FilterList.Operator;import org.apache.hadoop.hbase.filter.RegexStringComparator;import org.apache.hadoop.hbase.filter.RowFilter;import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;import org.apache.hadoop.hbase.util.Bytes;import org.junit.After;import org.junit.Before;import org.junit.Test;?public class HbaseTest {? /** * 配置ss */ static Configuration config = null; private Connection connection = null; private Table table = null;? @Before public void init() throws Exception { config = HBaseConfiguration.create();// 配置 config.set("hbase.zookeeper.quorum", "master,work1,work2");// zookeeper地址 config.set("hbase.zookeeper.property.clientPort", "2181");// zookeeper端口 connection = ConnectionFactory.createConnection(config); table = connection.getTable(TableName.valueOf("user")); }? /** * 創建一個表 * * @throws Exception */ @Test public void createTable() throws Exception { // 創建表管理類 HBaseAdmin admin = new HBaseAdmin(config); // hbase表管理 // 創建表描述類 TableName tableName = TableName.valueOf("test3"); // 表名稱 HTableDescriptor desc = new HTableDescriptor(tableName); // 創建列族的描述類 HColumnDescriptor family = new HColumnDescriptor("info"); // 列族 // 將列族添加到表中 desc.addFamily(family); HColumnDescriptor family2 = new HColumnDescriptor("info2"); // 列族 // 將列族添加到表中 desc.addFamily(family2); // 創建表 admin.createTable(desc); // 創建表 }? @Test @SuppressWarnings("deprecation") public void deleteTable() throws MasterNotRunningException, ZooKeeperConnectionException, Exception { HBaseAdmin admin = new HBaseAdmin(config); admin.disableTable("test3"); admin.deleteTable("test3"); admin.close(); }? /** * 向hbase中增加數據 * * @throws Exception */ @SuppressWarnings({ "deprecation", "resource" }) @Test public void insertData() throws Exception { table.setAutoFlushTo(false); table.setWriteBufferSize(534534534); ArrayList arrayList = new ArrayList(); for (int i = 21; i < 50; i++) { Put put = new Put(Bytes.toBytes("1234"+i)); put.add(Bytes.toBytes("info"), Bytes.toBytes("name"), Bytes.toBytes("wangwu"+i)); put.add(Bytes.toBytes("info"), Bytes.toBytes("password"), Bytes.toBytes(1234+i)); arrayList.add(put); } //插入數據 table.put(arrayList); //提交 table.flushCommits(); }? /** * 修改數據 * * @throws Exception */ @Test public void uodateData() throws Exception { Put put = new Put(Bytes.toBytes("1234")); put.add(Bytes.toBytes("info"), Bytes.toBytes("namessss"), Bytes.toBytes("lisi1234")); put.add(Bytes.toBytes("info"), Bytes.toBytes("password"), Bytes.toBytes(1234)); //插入數據 table.put(put); //提交 table.flushCommits(); }? /** * 刪除數據 * * @throws Exception */ @Test public void deleteDate() throws Exception { Delete delete = new Delete(Bytes.toBytes("1234")); table.delete(delete); table.flushCommits(); }? /** * 單條查詢 * * @throws Exception */ @Test public void queryData() throws Exception { Get get = new Get(Bytes.toBytes("1234")); Result result = table.get(get); System.out.println(Bytes.toInt(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("password")))); System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("namessss")))); System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("sex")))); }? /** * 全表掃描 * * @throws Exception */ @Test public void scanData() throws Exception { Scan scan = new Scan(); //scan.addFamily(Bytes.toBytes("info")); //scan.addColumn(Bytes.toBytes("info"), Bytes.toBytes("password")); scan.setStartRow(Bytes.toBytes("wangsf_0")); scan.setStopRow(Bytes.toBytes("wangwu")); ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { System.out.println(Bytes.toInt(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("password")))); System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("name")))); //System.out.println(Bytes.toInt(result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("password")))); //System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("name")))); } }? /** * 全表掃描的過濾器 * 列值過濾器 * * @throws Exception */ @Test public void scanDataByFilter1() throws Exception {? // 創建全表掃描的scan Scan scan = new Scan(); //過濾器:列值過濾器 SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes("info"), Bytes.toBytes("name"), CompareFilter.CompareOp.EQUAL, Bytes.toBytes("zhangsan2")); // 設置過濾器 scan.setFilter(filter);? // 打印結果集 ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { System.out.println(Bytes.toInt(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("password"))));??????System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("info"),?Bytes.toBytes("name")))); }? } /** * rowkey過濾器 * @throws Exception */ @Test public void scanDataByFilter2() throws Exception { // 創建全表掃描的scan Scan scan = new Scan(); //匹配rowkey以wangsenfeng開頭的 RowFilter filter = new RowFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("^12341")); // 設置過濾器 scan.setFilter(filter); // 打印結果集 ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { System.out.println(Bytes.toInt(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("password")))); System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("name")))); //System.out.println(Bytes.toInt(result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("password")))); //System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("name")))); }? } /** * 匹配列名前綴 * @throws Exception */ @Test public void scanDataByFilter3() throws Exception { // 創建全表掃描的scan Scan scan = new Scan(); //匹配rowkey以wangsenfeng開頭的 ColumnPrefixFilter filter = new ColumnPrefixFilter(Bytes.toBytes("na")); // 設置過濾器 scan.setFilter(filter); // 打印結果集 ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { System.out.println("rowkey:" + Bytes.toString(result.getRow())); System.out.println("info:name:" + Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("name")))); // 判斷取出來的值是否為空 if (result.getValue(Bytes.toBytes("info"), Bytes.toBytes("age")) != null) { System.out.println("info:age:" + Bytes.toInt(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("age")))); } // 判斷取出來的值是否為空 if (result.getValue(Bytes.toBytes("info"), Bytes.toBytes("sex")) != null) { System.out.println("infi:sex:" + Bytes.toInt(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("sex")))); } // 判斷取出來的值是否為空 if (result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("name")) != null) { System.out .println("info2:name:" + Bytes.toString(result.getValue( Bytes.toBytes("info2"), Bytes.toBytes("name")))); } // 判斷取出來的值是否為空 if (result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("age")) != null) { System.out.println("info2:age:" + Bytes.toInt(result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("age")))); } // 判斷取出來的值是否為空 if (result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("sex")) != null) { System.out.println("info2:sex:" + Bytes.toInt(result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("sex")))); } } } /** * 過濾器集合 * @throws Exception */ @Test public void scanDataByFilter4() throws Exception { // 創建全表掃描的scan Scan scan = new Scan(); //過濾器集合:MUST_PASS_ALL(and),MUST_PASS_ONE(or) FilterList filterList = new FilterList(Operator.MUST_PASS_ONE); //匹配rowkey以wangsenfeng開頭的 RowFilter filter = new RowFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("^wangsenfeng")); //匹配name的值等于wangsenfeng SingleColumnValueFilter filter2 = new SingleColumnValueFilter(Bytes.toBytes("info"), Bytes.toBytes("name"), CompareFilter.CompareOp.EQUAL, Bytes.toBytes("zhangsan")); filterList.addFilter(filter); filterList.addFilter(filter2); // 設置過濾器 scan.setFilter(filterList); // 打印結果集 ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { System.out.println("rowkey:" + Bytes.toString(result.getRow())); System.out.println("info:name:" + Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("name")))); // 判斷取出來的值是否為空 if (result.getValue(Bytes.toBytes("info"), Bytes.toBytes("age")) != null) { System.out.println("info:age:" + Bytes.toInt(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("age")))); } // 判斷取出來的值是否為空 if (result.getValue(Bytes.toBytes("info"), Bytes.toBytes("sex")) != null) { System.out.println("infi:sex:" + Bytes.toInt(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("sex")))); } // 判斷取出來的值是否為空 if (result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("name")) != null) { System.out .println("info2:name:" + Bytes.toString(result.getValue( Bytes.toBytes("info2"), Bytes.toBytes("name")))); } // 判斷取出來的值是否為空 if (result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("age")) != null) { System.out.println("info2:age:" + Bytes.toInt(result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("age")))); } // 判斷取出來的值是否為空 if (result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("sex")) != null) { System.out.println("info2:sex:" + Bytes.toInt(result.getValue(Bytes.toBytes("info2"), Bytes.toBytes("sex")))); } } }? @After public void close() throws Exception { table.close(); connection.close(); }?}

    五 HBASE運行原理

    5.1 master職責

    1.管理監控HRegionServer,實現其負載均衡。

    2.處理region的分配或轉移,比如在HRegion split時分配新的HRegion;在HRegionServer退出時遷移其負責的HRegion到其他HRegionServer上。

    3.處理元數據的變更

    4.管理namespace和table的元數據(實際存儲在HDFS上)。

    5.權限控制(ACL)。

    6.監控集群中所有HRegionServer的狀態(通過Heartbeat和監聽ZooKeeper中的狀態)。

    5.2 Region Server 職責

  • 管理自己所負責的region數據的讀寫。
  • 讀寫HDFS,管理Table中的數據。
  • Client直接通過HRegionServer讀寫數據(從HMaster中獲取元數據,找到RowKey所在的HRegion/HRegionServer后)。
  • 刷新緩存到HDFS
  • 維護Hlog
  • 執行壓縮
  • 負責處理Region分片
  • 5.3 zookeeper集群所起作用

  • 存放整個HBase集群的元數據以及集群的狀態信息。
  • 實現HMaster主從節點的failover。
  • 注:HMaster通過監聽ZooKeeper中的Ephemeral節點(默認:/hbase/rs/*)來監控HRegionServer的加入和宕機。

    在第一個HMaster連接到ZooKeeper時會創建Ephemeral節點(默認:/hbasae/master)來表示Active的HMaster,其后加進來的HMaster則監聽該Ephemeral節點

    如果當前Active的HMaster宕機,則該節點消失,因而其他HMaster得到通知,而將自身轉換成Active的HMaster,在變為Active的HMaster之前,它會在/hbase/masters/下創建自己的Ephemeral節點。

    5.4 HBASE讀寫數據流程

    5.4.1 寫數據流程

    客戶端現在要插入一條數據,rowkey=r000001, 這條數據應該寫入到table表中的那個region中呢?

    1/ 客戶端要連接zookeeper, 從zk的/hbase節點找到hbase:meta表所在的regionserver(host:port);

    2/ regionserver掃描hbase:meta中的每個region的起始行健,對比r000001這條數據在那個region的范圍內;

    3/ 從對應的 info:server key中存儲了region是有哪個regionserver(host:port)在負責的;

    4/ 客戶端直接請求對應的regionserver;

    5/ regionserver接收到客戶端發來的請求之后,就會將數據寫入到region中

    5.4.2 讀數據流程

    客戶端現在要查詢rowkey=r000001這條數據,那么這個流程是什么樣子的呢?

    1/ 首先Client連接zookeeper, 找到hbase:meta表所在的regionserver;

    2/ 請求對應的regionserver,掃描hbase:meta表,根據namespace、表名和rowkey在meta表中找到r00001所在的region是由那個regionserver負責的;

    3/找到這個region對應的regionserver

    4/ regionserver收到了請求之后,掃描對應的region返回數據到Client

    (先從MemStore找數據,如果沒有,再到BlockCache里面讀;BlockCache還沒有,再到StoreFile上讀(為了讀取的效率);

    如果是從StoreFile里面讀取的數據,不是直接返回給客戶端,而是先寫入BlockCache,再返回給客戶端。)

    注:客戶會緩存這些位置信息,然而第二步它只是緩存當前RowKey對應的HRegion的位置,因而如果下一個要查的RowKey不在同一個HRegion中,則需要繼續查詢hbase:meta所在的HRegion,然而隨著時間的推移,客戶端緩存的位置信息越來越多,以至于不需要再次查找hbase:meta Table的信息,除非某個HRegion因為宕機或Split被移動,此時需要重新查詢并且更新緩存。

    5.4.3 數據flush過程

    1)當MemStore數據達到閾值(默認是128M,老版本是64M),將數據刷到硬盤,將內存中的數據刪除,同時刪除HLog中的歷史數據;

    2)并將數據存儲到HDFS中;

    3)在HLog中做標記點。

    5.4.4 數據合并過程

    1)當數據塊達到3塊,Hmaster觸發合并操作,Region將數據塊加載到本地,進行合并;

    2)當合并的數據超過256M,進行拆分,將拆分后的Region分配給不同的HregionServer管理;

    3)當HregionServer宕機后,將HregionServer上的hlog拆分,然后分配給不同的HregionServer加載,修改.META.;

    4)注意:HLog會同步到HDFS。

    5.5 hbase:meta表

    hbase:meta表存儲了所有用戶HRegion的位置信息:

    Rowkey:tableName,regionStartKey,regionId,replicaId等;

    info列族:這個列族包含三個列,他們分別是:

    info:regioninfo列:

    regionId,tableName,startKey,endKey,offline,split,replicaId;

    info:server列:HRegionServer對應的server:port;

    info:serverstartcode列:HRegionServer的啟動時間戳。

    5.6 Region Server內部機制

    • WAL即Write Ahead Log,在早期版本中稱為HLog,它是HDFS上的一個文件,如其名字所表示的,所有寫操作都會先保證將數據寫入這個Log文件后,才會真正更新MemStore,最后寫入HFile中。WAL文件存儲在/hbase/WALs/${HRegionServer_Name}的目錄中
    • BlockCache是一個讀緩存,即“引用局部性”原理(也應用于CPU,分空間局部性和時間局部性,空間局部性是指CPU在某一時刻需要某個數據,那么有很大的概率在一下時刻它需要的數據在其附近;時間局部性是指某個數據在被訪問過一次后,它有很大的概率在不久的將來會被再次的訪問),將數據預讀取到內存中,以提升讀的性能。
    • HRegion是一個Table中的一個Region在一個HRegionServer中的表達。一個Table可以有一個或多個Region,他們可以在一個相同的HRegionServer上,也可以分布在不同的HRegionServer上,一個HRegionServer可以有多個HRegion,他們分別屬于不同的Table。HRegion由多個Store(HStore)構成,每個HStore對應了一個Table在這個HRegion中的一個Column Family,即每個Column Family就是一個集中的存儲單元,因而最好將具有相近IO特性的Column存儲在一個Column Family,以實現高效讀取(數據局部性原理,可以提高緩存的命中率)。HStore是HBase中存儲的核心,它實現了讀寫HDFS功能,一個HStore由一個MemStore 和0個或多個StoreFile組成。
    • MemStore是一個寫緩存(In Memory Sorted Buffer),所有數據的寫在完成WAL日志寫后,會 寫入MemStore中,由MemStore根據一定的算法將數據Flush到地層HDFS文件中(HFile),通常每個HRegion中的每個 Column Family有一個自己的MemStore。
    • HFile(StoreFile) 用于存儲HBase的數據(Cell/KeyValue)。在HFile中的數據是按RowKey、Column Family、Column排序,對相同的Cell(即這三個值都一樣),則按timestamp倒序排列。
    • FLUSH詳述
  • 每一次Put/Delete請求都是先寫入到MemStore中,當MemStore滿后會Flush成一個新的StoreFile(底層實現是HFile),即一個HStore(Column Family)可以有0個或多個StoreFile(HFile)。
  • 當一個HRegion中的所有MemStore的大小總和超過了hbase.hregion.memstore.flush.size的大小,默認128MB。此時當前的HRegion中所有的MemStore會Flush到HDFS中。
  • 當全局MemStore的大小超過了hbase.regionserver.global.memstore.upperLimit的大小,默認40%的內存使用量。此時當前HRegionServer中所有HRegion中的MemStore都會Flush到HDFS中,Flush順序是MemStore大小的倒序(一個HRegion中所有MemStore總和作為該HRegion的MemStore的大小還是選取最大的MemStore作為參考?有待考證),直到總體的MemStore使用量低于hbase.regionserver.global.memstore.lowerLimit,默認38%的內存使用量。
  • 當前HRegionServer中WAL的大小超過了hbase.regionserver.hlog.blocksize * hbase.regionserver.max.logs的數量,當前HRegionServer中所有HRegion中的MemStore都會Flush到HDFS中,Flush使用時間順序,最早的MemStore先Flush直到WAL的數量少于hbase.regionserver.hlog.blocksize * hbase.regionserver.max.logs這里說這兩個相乘的默認大小是2GB,查代碼,hbase.regionserver.max.logs默認值是32,而hbase.regionserver.hlog.blocksize默認是32MB。但不管怎么樣,因為這個大小超過限制引起的Flush不是一件好事,可能引起長時間的延遲
  • 六.HBASE優化

    6.1 高可用

    在HBase中Hmaster負責監控RegionServer的生命周期,均衡RegionServer的負載,如果Hmaster掛掉了,那么整個HBase集群將陷入不健康的狀態,并且此時的工作狀態并不會維持太久。所以HBase支持對Hmaster的高可用配置。

    1.關閉HBase集群(如果沒有開啟則跳過此步)

    bin/stop-hbase.sh

    2.在conf目錄下創建backup-masters文件

    touch conf/backup-masters

    3.在backup-masters文件中配置高可用HMaster節點

    echo?hadoop110?>?conf/backup-masters

    4.將整個conf目錄scp到其他節點

    scp?-r?conf/?hadoop110:/opt/module/hbase/

    6.2 預分區

    每一個region維護著startRow與endRowKey,如果加入的數據符合某個region維護的rowKey范圍,則該數據交給這個region維護。那么依照這個原則,我們可以將數據所要投放的分區提前大致的規劃好,以提高HBase性能。

    1.手動設定預分區

    hbase> create 'staff1','info','partition1',SPLITS => ['1000','2000','3000','4000']

    2.生成16進制序列預分區

    create 'staff2','info','partition2',{NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}

    3.按照文件中設置的規則預分區

    創建splits.txt文件內容如下:

    aaaa

    bbbb

    cccc

    dddd

    然后執行:

    create 'staff3','partition3',SPLITS_FILE => 'splits.txt'

    6.3 RowKey設計

    一條數據的唯一標識就是rowkey,那么這條數據存儲于哪個分區,取決于rowkey處于哪個一個預分區的區間內,設計rowkey的主要目的 ,就是讓數據均勻的分布于所有的region中,在一定程度上防止數據傾斜。接下來我們就談一談rowkey常用的設計方案。

    1.生成隨機數、hash、散列值

    比如:

    原本rowKey為1001的,SHA1后變成:dd01903921ea24941c26a48f2cec24e0bb0e8cc7

    原本rowKey為3001的,SHA1后變成:49042c54de64a1e9bf0b33e00245660ef92dc7bd

    原本rowKey為5001的,SHA1后變成:7b61dec07e02c188790670af43e717f0f46e8913

    在做此操作之前,一般我們會選擇從數據集中抽取樣本,來決定什么樣的rowKey來Hash后作為每個分區的臨界值。

    2.字符串反轉

    20170524000001轉成10000042507102

    20170524000002轉成20000042507102

    3.字符串拼接

    20170524000001_a12e

    20170524000001_93i7

    6.4 內存優化

    HBase操作過程中需要大量的內存開銷,畢竟Table是可以緩存在內存中的,一般會分配整個可用內存的70%給HBase的Java堆。但是不建議分配非常大的堆內存,因為GC過程持續太久會導致RegionServer處于長期不可用狀態,一般16~48G內存就可以了,如果因為框架占用內存過高導致系統內存不足,框架一樣會被系統服務拖死。

    6.5 基礎優化

    1.允許在HDFS的文件中追加內容

    hdfs-site.xml、hbase-site.xml

    屬性:dfs.support.append

    解釋:開啟HDFS追加同步,可以優秀的配合HBase的數據同步和持久化。默認值為true。

    2.優化DataNode允許的最大文件打開數

    hdfs-site.xml

    屬性:dfs.datanode.max.transfer.threads

    解釋:HBase一般都會同一時間操作大量的文件,根據集群的數量和規模以及數據動作,設置為4096或者更高。默認值:4096

    3.優化延遲高的數據操作的等待時間

    hdfs-site.xml

    屬性:dfs.image.transfer.timeout

    解釋:如果對于某一次數據操作來講,延遲非常高,socket需要等待更長的時間,建議把該值設置為更大的值(默認60000毫秒),以確保socket不會被timeout掉。

    4.優化數據的寫入效率

    mapred-site.xml

    屬性:

    mapreduce.map.output.compress

    mapreduce.map.output.compress.codec

    解釋:開啟這兩個數據可以大大提高文件的寫入效率,減少寫入時間。第一個屬性值修改為true,第二個屬性值修改為:org.apache.hadoop.io.compress.GzipCodec或者其他壓縮方式。

    5.設置RPC監聽數量

    hbase-site.xml

    屬性:hbase.regionserver.handler.count

    解釋:默認值為30,用于指定RPC監聽的數量,可以根據客戶端的請求數進行調整,讀寫請求較多時,增加此值。

    6.優化HStore文件大小

    hbase-site.xml

    屬性:hbase.hregion.max.filesize

    解釋:默認值10737418240(10GB),如果需要運行HBase的MR任務,可以減小此值,因為一個region對應一個map任務,如果單個region過大,會導致map任務執行時間過長。該值的意思就是,如果HFile的大小達到這個數值,則這個region會被切分為兩個Hfile。

    7.優化hbase客戶端緩存

    hbase-site.xml

    屬性:hbase.client.write.buffer

    解釋:用于指定HBase客戶端緩存,增大該值可以減少RPC調用次數,但是會消耗更多內存,反之則反之。一般我們需要設定一定的緩存大小,以達到減少RPC次數的目的。

    8.指定scan.next掃描HBase所獲取的行數

    hbase-site.xml

    屬性:hbase.client.scanner.caching

    解釋:用于指定scan.next方法獲取的默認行數,值越大,消耗內存越大。

    9.flush、compact、split機制

    當MemStore達到閾值,將Memstore中的數據Flush進Storefile;compact機制則是把flush出來的小文件合并成大的Storefile文件。split則是當Region達到閾值,會把過大的Region一分為二。

    涉及屬性:

    即:128M就是Memstore的默認閾值

    hbase.hregion.memstore.flush.size:134217728hbase.regionserver.global.memstore.upperLimit:0.4hbase.regionserver.global.memstore.lowerLimit:0.38

    即:

    當MemStore使用內存總量達到hbase.regionserver.global.memstore.upperLimit指定值時,將會有多個MemStores flush到文件中,MemStore flush 順序是按照大小降序執行的,直到刷新到MemStore使用內存略小于lowerLimit即:這個參數的作用是當單個HRegion內所有的Memstore大小總和超過指定值時,flush該HRegion的所有memstore。RegionServer的flush是通過將請求添加一個隊列,模擬生產消費模型來異步處理的。那這里就有一個問題,當隊列來不及消費,產生大量積壓請求時,可能會導致內存陡增,最壞的情況是觸發OOM。

    總結

    以上是生活随笔為你收集整理的/opt/hbase/conf 中不能启动hbase_Hbase从入门到入坑的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    久久少妇av| 手机成人av| 日韩欧美电影在线观看 | 国产精品a久久久久 | 久久成年人 | 一个色综合网站 | 91字幕 | 亚洲激情网站免费观看 | 97免费视频在线 | 欧美一级片在线 | 成人免费在线观看入口 | 欧美成人精品xxx | 国产在线观看免费观看 | 香蕉视频国产在线观看 | 久草免费在线观看 | 国产一区av在线 | 美女国内精品自产拍在线播放 | www日韩高清| 欧美日韩高清 | 国产在线一线 | 国产人成精品一区二区三 | 操操操日日 | 视频一区二区在线观看 | 欧美国产日韩一区二区三区 | 成人h在线观看 | 国产超碰在线 | 最新中文字幕视频 | 日本精品免费看 | 欧美成年网站 | 91av久久| 亚洲精品视频在线观看免费视频 | 91探花国产综合在线精品 | 日韩网站免费观看 | 久久99精品久久久久久 | 四虎在线免费观看 | 欧美在线视频精品 | 欧美色噜噜| 久久精品视 | 婷婷久久五月天 | 欧美日韩免费在线观看视频 | 亚洲精品456在线播放乱码 | 黄色小网站在线 | 欧美色图东方 | 亚洲欧美日本一区二区三区 | 91精品1区| 国产精品成人久久久 | 91在线成人 | 国产精品久久久久久久久久久杏吧 | 久草精品资源 | 国产黄色av | 久久久久久伊人 | 人人澡人人澡人人 | 国产精品黄色 | 欧美淫aaa免费观看 日韩激情免费视频 | 丰满少妇在线观看网站 | 国产又黄又爽又猛视频日本 | 三级视频国产 | 黄色国产高清 | 婷婷av网| 欧美精品在线一区二区 | 精品国产成人av在线免 | 6699私人影院 | 天天干天天色2020 | 中文字幕亚洲在线观看 | 51久久夜色精品国产麻豆 | 日本精品xxxx | av在线免费在线 | 亚洲电影一区二区 | 国产在线欧美 | 区一区二区三区中文字幕 | 91精品视频在线观看免费 | 欧美视频在线观看免费网址 | 一区在线观看 | 91在线免费播放 | 精品久久久久久久久久久院品网 | 四虎成人网 | 91麻豆精品国产91久久久无限制版 | 日韩美av在线 | 99九九热只有国产精品 | 久久久精品国产免费观看同学 | 久久久片 | 免费看日韩 | 婷婷色中文字幕 | 一区二区三区中文字幕在线 | 亚洲黄色片一级 | 久久99精品久久久久久三级 | 日韩精品一区二区久久 | 日韩欧美高清一区二区 | 免费久久久久久久 | 韩国精品一区二区三区六区色诱 | 伊色综合久久之综合久久 | av在线免费播放网站 | 亚洲激情在线播放 | 狠狠狠色丁香婷婷综合激情 | 在线观看视频在线观看 | 久久久久一区二区三区四区 | 香蕉视频在线观看免费 | 伊人狠狠操 | 六月婷色| 中文字幕在线视频免费播放 | 97人人网 | 国产毛片久久久 | 九九色网 | 午夜视频久久久 | 久草在线免费资源 | 色福利网站 | 日韩一级黄色片 | 精品久久久久一区二区国产 | 成人在线观看免费视频 | 欧美另类色图 | 欧美成人精品xxx | 不卡av电影在线 | 在线观看mv的中文字幕网站 | 99视频在线免费 | 国内精品久久久久久久久久久 | 一级黄色免费网站 | 免费网站在线观看成人 | 欧美性爽爽 | av在线播放国产 | 午夜美女视频 | 国产精品丝袜久久久久久久不卡 | 五月综合激情婷婷 | 国产亚洲精品久久久久久移动网络 | 六月婷婷久香在线视频 | 中文字幕亚洲欧美日韩2019 | 国产高清一级 | 国产又粗又猛又色又黄视频 | 99精品一级欧美片免费播放 | 天天曰天天射 | 国产探花视频在线播放 | 中文国产在线观看 | 日韩欧美在线视频一区二区 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 91精品在线免费观看视频 | 精品欧美日韩 | 精品免费久久久久久 | 欧美国产三区 | 亚洲三级视频 | 久久免费在线 | 91精选| 久久99精品波多结衣一区 | 日日夜夜综合网 | 久久免费视频在线观看6 | 日韩av午夜 | 96av麻豆蜜桃一区二区 | 91成人看片 | 99久久网站 | 成人黄色大片网站 | 国产丝袜美腿在线 | 欧洲一区二区三区精品 | 99热只有精品在线观看 | 天天操天天舔天天爽 | 国产91粉嫩白浆在线观看 | 91在线亚洲 | 91在线91拍拍在线91 | 500部大龄熟乱视频使用方法 | 欧美91av | 97成人免费视频 | 国产精品久久久久久久久毛片 | 激情婷婷丁香 | 视频一区二区视频 | 91精品国产99久久久久 | 五月婷婷综合在线 | 九月婷婷综合网 | 久久久久www | 亚洲精品国产日韩 | 视频一区在线免费观看 | 日韩高清www | 国模一二三区 | 91麻豆精品国产午夜天堂 | 99久久精品久久久久久动态片 | 99久久99久久 | 欧美色精品天天在线观看视频 | 麻花豆传媒一二三产区 | 国产69精品久久久久久 | 91精品国产自产老师啪 | 四虎影视成人永久免费观看亚洲欧美 | 欧洲精品视频一区二区 | 精品国产福利在线 | 日韩在线视频不卡 | 麻豆视频免费在线播放 | 夜夜骑首页 | 久久97久久97精品免视看 | 视频一区二区精品 | 三级黄色在线观看 | 亚洲国内精品在线 | 天天操天天添天天吹 | 久草视频免费看 | 免费黄色av电影 | 91免费在线视频 | 一区二区三区日韩视频在线观看 | 国产在线观看免费 | 免费成人在线视频网站 | 欧美日韩久久不卡 | 丁香婷婷射 | 99热国产在线观看 | 91麻豆精品国产91久久久无需广告 | 在线亚洲成人 | 日韩精品一区二区三区在线视频 | 亚洲不卡123 | 国产精品一区二区三区四 | 四虎成人在线 | 国产黄 | 亚洲黄色在线 | 亚洲无吗av| 婷婷色网视频在线播放 | 国产欧美在线一区 | 国产麻豆精品传媒av国产下载 | 欧美日韩在线精品一区二区 | 久艹视频在线观看 | 五月天堂网 | 国产视频2 | 日韩一区二区三区免费视频 | 亚洲成人午夜在线 | 在线观看亚洲专区 | 77国产精品| a视频在线 | 国产五码一区 | 久久久精品欧美 | 午夜色站 | 精品人妖videos欧美人妖 | 欧洲一区二区三区精品 | 欧美午夜久久 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 免费特级黄毛片 | 五月天婷婷在线视频 | 伊人激情综合 | 久久网址 | 五月婷婷欧美视频 | 久久久网站 | 久久一区二区三区国产精品 | 一区二区三区四区五区在线 | 国产黄色精品 | 亚洲成人动漫在线观看 | 欧美性大战| 在线免费观看黄色小说 | 国产日韩三级 | 五月婷婷,六月丁香 | 91精品看片| 久久这里只有精品久久 | 亚洲精品免费视频 | 国产精品一区免费观看 | 欧美一区二区三区在线看 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 欧美精品做受xxx性少妇 | 精品视频久久久久久 | www.久久色 | 91在线影院 | 久久婷婷色 | 中文字幕日韩有码 | 久久久久婷 | 九七人人干 | 一级黄色片在线播放 | 黄色免费国产 | 日韩av成人在线 | 操天天操| 91在线麻豆 | 久久久久久久久久毛片 | 日韩精品中文字幕在线播放 | 四虎永久精品在线 | 成年人视频在线 | 在线看日韩av | 在线看av网址 | 日韩中文三级 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 成年人看片 | 成人一级免费视频 | 亚洲成人软件 | 中文字幕一区二区三区四区久久 | 精品亚洲网 | 天天操天天舔天天干 | 99久久精品国产毛片 | 天堂中文在线视频 | 999视频在线播放 | 久久久国产精华液 | 手机看片国产 | 最近免费中文字幕大全高清10 | 嫩嫩影院理论片 | 精品免费视频123区 午夜久久成人 | 久草在线观看 | 欧美一区二区三区在线 | 成人黄色在线 | 久久九九影视 | 夜夜骑首页 | 成人精品影视 | 亚洲更新最快 | 欧美精品久久久久久久久久白贞 | 91精品啪在线观看国产线免费 | 久久久久久久久毛片精品 | 999国内精品永久免费视频 | 国产a高清 | 综合铜03 | 人人爽人人爽人人片av | 国产精品伦一区二区三区视频 | 五月天丁香 | 成人在线免费观看视视频 | 综合色婷婷 | 国产精品毛片一区视频 | 久久国产电影院 | 九九色综合 | 天天拍天天爽 | 日韩高清在线观看 | 成年人国产在线观看 | 欧美精品一二三 | 午夜三级毛片 | 国产福利中文字幕 | 97手机电影网 | 天天艹 | av免费在线看网站 | 91精品欧美一区二区三区 | 久草在线观看 | 国产一区二区网址 | 久久影院精品 | 九九视频精品免费 | 中文在线 | 日本在线视频网址 | 婷婷综合网 | 国产精品扒开做爽爽的视频 | 精品一区精品二区高清 | 五月天婷婷在线观看视频 | 免费看搞黄视频网站 | 久久久免费 | 五月激情久久久 | 国产色道| a一片一级 | 久操视频在线免费看 | 久色免费视频 | 草久视频在线观看 | 手机在线中文字幕 | 日本精品久久久一区二区三区 | 国产日韩精品在线观看 | 欧美日韩69 | 日韩精品视频在线观看网址 | 不卡电影免费在线播放一区 | 18久久久久 | 九九免费在线观看 | 天天干天天爽 | 91精品视频一区二区三区 | 国产精品一区二区三区久久 | 国产伦理一区二区 | 在线观看中文字幕 | 日韩av一区二区三区在线观看 | 99热这里只有精品1 av中文字幕日韩 | 国产成人在线综合 | 性色xxxxhd | 久久久久久国产精品免费 | 亚洲精品国产自产拍在线观看 | 亚洲国产精品成人综合 | 久久午夜网| 日韩亚洲精品电影 | 天天色天天射天天干 | 二区视频在线 | 天天摸日日摸人人看 | 成 人 黄 色 视频免费播放 | 黄色软件在线观看视频 | 在线观看免费视频 | 97免费在线观看 | www.五月天激情 | www.久久久.cum| 国产精品久久久久久妇 | www免费| 人人爽人人爽人人爽人人爽 | 中文字幕在线日 | 日韩精品大片 | 国产精品一区二区三区久久 | 欧美日韩国产一区二区三区 | 99国产成+人+综合+亚洲 欧美 | 麻豆国产网站入口 | 午夜精品一区二区三区四区 | 91精品视频免费看 | www.夜夜草 | 日韩国产高清在线 | 亚洲国产理论片 | 精品国产乱码久久久久久1区2匹 | 又黄又爽又刺激 | 毛片视频网址 | 国产很黄很色的视频 | 日韩久久精品一区 | 国产色视频123区 | www.在线观看视频 | av不卡免费在线观看 | 久久久久北条麻妃免费看 | 99 精品 在线 | av线上看| 免费看片色| 日韩免费一区二区在线观看 | 中文字幕在线第一页 | 成人免费视频在线观看 | 国产精品免费人成网站 | 国产精品成人a免费观看 | 亚洲精品国偷拍自产在线观看蜜桃 | 性色av一区二区 | 深夜免费小视频 | 天天射天天干天天爽 | 波多野结衣视频一区 | 看毛片网站 | 久久久久福利视频 | 久久超碰在线 | 91精品国产乱码久久桃 | 国内精品二区 | 中文字幕一区二区三区四区在线视频 | 免费看日韩 | 中文字幕免费高清 | 久草视频免费在线观看 | 亚洲一区视频免费观看 | av综合 日韩 | 欧美一级片在线观看视频 | 成人av免费在线看 | 麻豆91在线 | 欧美另类sm图片 | 久久综合之合合综合久久 | 欧美精品一区在线发布 | 免费毛片一区二区三区久久久 | 色视频网站免费观看 | 在线观看黄网站 | 中午字幕在线 | 中文在线www| 中文在线字幕免费观看 | 成年人视频在线免费 | 911精品美国片911久久久 | 日韩激情免费视频 | 国产精品美女久久久久久 | 97av视频在线观看 | 区一区二区三在线观看 | 日韩电影一区二区三区在线观看 | 在线视频第一页 | 日韩欧美一级二级 | 99久久网站 | 欧美日本啪啪无遮挡网站 | 美女视频黄免费的 | 91毛片在线观看 | 偷拍区另类综合在线 | 一级免费看 | av亚洲产国偷v产偷v自拍小说 | 久久精品激情 | 欧美一区二区三区激情视频 | 天天摸天天操天天爽 | 色的网站在线观看 | 日韩精品免费 | 久久人人爽人人爽人人片av软件 | www色| 91精选 | 久久久久激情电影 | 日韩在线电影一区 | 国产精品久久久区三区天天噜 | 国产欧美综合在线观看 | 久久久久久久久久久影视 | 日本精品视频一区 | 日韩免费一级电影 | 在线а√天堂中文官网 | 干狠狠 | 精品在线你懂的 | 伊人干综合 | 亚洲精品久久久久久中文传媒 | 国产成人精品999在线观看 | 日韩欧美高清在线 | 国产亚洲精品久久久久久久久久 | 中日韩免费视频 | 国产一级高清视频 | 日本99干网| 国产精品久久久久久久久久新婚 | 久久99偷拍视频 | 2023天天干| 亚洲精品免费观看 | 国产精品午夜在线观看 | 91视频免费 | 久久午夜鲁丝片 | 免费看污黄网站 | 亚洲精品成人av在线 | 婷婷五情天综123 | 日日日网| 蜜臀av性久久久久av蜜臀妖精 | 久草在线看片 | av中文电影 | 婷婷草| 粉嫩一区二区三区粉嫩91 | 99精品一区二区三区 | 久久久久久久久久久综合 | 国产精品不卡 | 特级黄色片免费看 | 日日夜夜中文字幕 | 中文字幕在线播放av | 国产亚洲精品久久久久久移动网络 | 国产成人精品一区二区三区福利 | 九九热国产视频 | 国产一区二区三区免费观看视频 | 欧美一级视频免费看 | 色多多视频在线观看 | 亚洲精品高清一区二区三区四区 | 成人在线观看你懂的 | 水蜜桃亚洲一二三四在线 | 日韩性xxxx | 日本九九视频 | 综合网久久 | 色婷婷激婷婷情综天天 | 成人欧美一区二区三区在线观看 | 奇米777777| 在线一二三区 | 九九九九九九精品 | 精品国产一区二区三区四区在线观看 | 激情www| 超碰人人在线 | 色综合久久久久综合体桃花网 | 国产成人精品综合久久久久99 | 国产成人久久精品一区二区三区 | 我要色综合天天 | 国产精品免费观看在线 | 精品在线视频一区二区三区 | 中文字幕欧美日韩va免费视频 | 在线日韩精品视频 | 96久久久| 日本三级在线观看中文字 | 久久久午夜电影 | 久久九九久久九九 | av资源免费观看 | 日韩免费一级a毛片在线播放一级 | 久久精品国产免费看久久精品 | 免费视频18| 黄色aaa毛片 | 一二三区av | 中文资源在线官网 | 久久久久久免费毛片精品 | 久久精品第一页 | 免费亚洲电影 | 久草视频国产 | 久久精品视频免费 | 久久久久亚洲最大xxxx | 亚洲欧美国内爽妇网 | 久久久综合香蕉尹人综合网 | a视频在线看 | 欧美日韩3p | 久久精品国产v日韩v亚洲 | 激情五月开心 | 中文字幕资源网 国产 | 中文字幕在线播出 | 人人添人人澡 | 日韩精品在线看 | 精品久久久久久久久久久院品网 | 国产黄色视 | 免费一区在线 | 精品久久久亚洲 | 日韩午夜一级片 | 国内精品久久久久久久久久 | 国产精品美 | 亚洲区另类春色综合小说校园片 | 草久久久久久 | 欧美成人精品欧美一级乱黄 | 中文字幕乱在线伦视频中文字幕乱码在线 | 91九色蝌蚪视频在线 | 又色又爽的网站 | 日韩欧美精品免费 | 日韩 在线观看 | 日日碰狠狠添天天爽超碰97久久 | 国产亚洲精品久久久久动 | 夜夜骑天天操 | 国产精品一区欧美 | 久久成年人视频 | 久久久久五月 | 92国产精品久久久久首页 | 久久久999免费视频 日韩网站在线 | 日韩理论电影在线观看 | 久久69精品久久久久久久电影好 | 在线播放国产精品 | 91最新国产| 91亚色在线观看 | 亚洲欧美乱综合图片区小说区 | 国产99久久久国产精品免费看 | 欧美性性网 | 国产黄色片一级 | 国产精品久久久久久久av大片 | 欧美午夜久久久 | 99欧美| 一级精品视频在线观看宜春院 | 久久欧美综合 | 亚洲精品国产综合99久久夜夜嗨 | 欧美日韩在线观看不卡 | 免费视频网 | 激情五月播播久久久精品 | 99精品视频免费在线观看 | av动态图片 | www国产亚洲精品久久麻豆 | 亚洲va欧美va人人爽春色影视 | 国内精品久久久久久久影视简单 | 三级小视频在线观看 | 伊人六月 | 精品久久精品 | 欧美精品一区二区三区一线天视频 | 91久久精品一区 | 精品国产免费看 | 制服丝袜天堂 | 久久黄色小说视频 | 日韩国产精品一区 | 亚洲精品国产精品国自产 | 在线观看一区 | 国产午夜一区二区 | 国产色啪 | 欧美日韩高清免费 | av在线永久免费观看 | 国产亚洲精品久久久久久移动网络 | 久草精品在线播放 | 国产视频精选 | free,性欧美| 69久久夜色精品国产69 | 中文免费在线观看 | 国产一区二区中文字幕 | 97成人精品区在线播放 | 久久国产欧美日韩精品 | 国产很黄很色的视频 | 久要激情网 | 奇米影视777四色米奇影院 | 看片黄网站 | 亚a在线 | 亚洲国产丝袜在线观看 | 欧美性粗大hdvideo | 区一区二区三区中文字幕 | 国产香蕉久久 | 亚洲精品视频www | 97在线观看视频 | 午夜精品区 | 日韩国产精品久久久久久亚洲 | 日韩精品久久久久久中文字幕8 | 成人理论电影 | 中文在线字幕免 | 欧美精品乱码久久久久 | 国产成人av综合色 | 免费网站在线观看成人 | 在线国产精品视频 | 天天综合久久综合 | 精品久久久久久久久久 | 欧美一级免费黄色片 | 成人小电影在线看 | 国产精品嫩草影视久久久 | 日韩精品久久久久久久电影竹菊 | 韩国av一区二区三区 | 91最新在线观看 | 黄色三级免费网址 | 国产精品 久久 | 中文字幕精品一区久久久久 | 色天天综合久久久久综合片 | 免费午夜视频在线观看 | 精品中文字幕在线播放 | 亚洲免费国产视频 | 国产区精品区 | 九九久久久久久久久激情 | 亚洲欧美精品一区 | 一区二区三区免费在线观看视频 | 久久爽久久爽久久av东京爽 | 激情婷婷六月 | 天天射天天爽 | 九九99| 一级黄色片网站 | 精品嫩模福利一区二区蜜臀 | 在线观看黄色免费视频 | 毛片视频网址 | 久久久久成人精品免费播放动漫 | 欧美成人aa| 国产电影黄色av | 亚洲免费精彩视频 | 91福利社在线观看 | 日韩欧美国产精品 | 免费在线观看国产黄 | 91视频成人免费 | 亚洲三级黄色 | 久久综合婷婷国产二区高清 | 亚洲精品国产精品国产 | 亚洲va综合va国产va中文 | 91精品啪 | 国产小视频在线 | 欧美一级片免费观看 | 久久成电影 | 国产视频在线一区二区 | 狠狠操影视 | 欧美日韩天堂 | 国产在线播放一区二区三区 | 三级在线国产 | 国产精品久久99精品毛片三a | 国产精品高潮在线观看 | 成人在线观看资源 | 国产 日韩 在线 亚洲 字幕 中文 | 成人精品一区二区三区电影免费 | 99这里只有精品视频 | 国产免费人成xvideos视频 | 欧洲黄色片 | 在线视频91| 国产资源免费在线观看 | 五月天天在线 | 亚洲成人黄色av | 国产亚洲综合性久久久影院 | 狠狠色丁香久久婷婷综 | 久久久999免费视频 日韩网站在线 | 国产精品第十页 | 在线免费观看黄 | 国产精品免费视频久久久 | 正在播放 久久 | 午夜在线看 | 国产韩国日本高清视频 | 精品国产自在精品国产精野外直播 | 激情综合色播五月 | 欧美日韩在线免费视频 | 97视频网址 | 国产精品乱码久久久 | 草久视频在线 | 国产精品免费在线播放 | 狠狠狠色丁香综合久久天下网 | 一级做a视频 | 国产精品女教师 | 日本护士撒尿xxxx18 | 日本午夜免费福利视频 | 欧美激情视频一二区 | 欧美精品网站 | 在线观看免费日韩 | 国产精品无av码在线观看 | 日韩av电影中文字幕在线观看 | 欧美小视频在线 | 免费高清男女打扑克视频 | 国产成人精品一区二区三区福利 | 亚洲在线综合 | 9999在线 | 日本公妇在线观看高清 | 日韩在线观看第一页 | 日本黄区免费视频观看 | 国产精品系列在线观看 | 国产精品丝袜久久久久久久不卡 | 久久久久久久久久久久99 | 久久香蕉国产精品麻豆粉嫩av | 91精品国产91久久久久久三级 | 国产精品99久久免费黑人 | 精品综合久久 | 成人 国产 在线 | 日韩精品一区二区三区第95 | 亚州日韩中文字幕 | 国产成a人亚洲精v品在线观看 | 久久久久亚洲精品 | 91视视频在线直接观看在线看网页在线看 | 99热国产在线 | 国产丝袜高跟 | 国产麻豆精品95视频 | 日韩激情网 | 九九热精品视频在线观看 | 久久久性 | 午夜国产影院 | 精品国产一区二区三区日日嗨 | 久久久久久久久久伊人 | 久久久久日本精品一区二区三区 | 国产精品久久麻豆 | 婷婷夜夜 | 国产a网站 | 91亚洲国产成人久久精品网站 | www.久久免费 | 婷婷色五| 在线看中文字幕 | 久久久精品久久 | 99中文字幕 | 色一级片 | 精品一区二区三区久久久 | 国产91精品一区二区 | 精品999在线观看 | 国产精品剧情 | 精品国产乱码久久久久久浪潮 | 人人爽人人片 | 手机看片国产 | 国产爽视频 | 日本精品中文字幕在线观看 | 色婷婷欧美| www.av小说| 黄色a大片 | 成人av资源站 | 国产高清不卡一区二区三区 | 亚洲久草网| 欧美精品在线一区二区 | 天天插天天干天天操 | 99色在线观看视频 | 欧美少妇xxx | 中文字幕人成不卡一区 | 99精品视频一区二区 | 99久久精品国产免费看不卡 | 色婷婷综合成人av | 日韩精品最新在线观看 | 超碰伊人网| 精品夜夜嗨av一区二区三区 | 久久精品精品电影网 | 久久99热这里只有精品国产 | 国产很黄很色的视频 | 亚洲精品视频中文字幕 | 精品国产1区2区3区 国产欧美精品在线观看 | 久久在线免费观看视频 | 一区二区视频在线免费观看 | 日韩免费视频播放 | 91香蕉国产 | 国产精品久久久久久婷婷天堂 | 欧美日韩视频在线 | 久久久亚洲成人 | 欧美va天堂va视频va在线 | 天天干天天干天天射 | 国产精品情侣视频 | 就要干b| 国产在线不卡视频 | 成人在线免费观看视视频 | 国产精品3| 久久大视频 | 午夜精品视频在线 | 国产欧美精品在线观看 | 欧美黑人性爽 | 91av蜜桃| 深夜福利视频在线观看 | 国产视频2区 | 天天夜夜狠狠操 | 天天操夜夜操国产精品 | 91福利免费 | 亚洲精品资源在线观看 | 青春草视频 | 久久久久久久久久久电影 | 色成人亚洲 | 亚洲1区在线 | 91视频91自拍| 色久综合| 天天做天天爱夜夜爽 | 亚洲a色 | 91久久精品日日躁夜夜躁国产 | av在线最新 | 超碰公开97| 91欧美视频网站 | 最新av网站在线观看 | 久久久久久久影院 | 久草在线免| 亚洲成人av在线电影 | 国产中文自拍 | 日韩高清精品免费观看 | 91亚洲综合 | 97超碰在线久草超碰在线观看 | 日本视频高清 | 国语自产偷拍精品视频偷 | 国产一级性生活视频 | 成人综合婷婷国产精品久久免费 | 欧美激情在线网站 | 777久久久 | 国产色综合天天综合网 | 久久国产热 | 麻花豆传媒mv在线观看网站 | 国产一区二区三区午夜 | 久久综合久久综合这里只有精品 | 久久成人综合 | 丰满少妇高潮在线观看 | 91免费视频网站在线观看 | 99免费在线视频观看 | 精久久久久| 色香蕉在线 | 特级免费毛片 | 免费国产ww | 亚洲高清av | 色资源中文字幕 | 亚洲精品国产自产拍在线观看 | 激情九九 | av中文字幕网址 | 久久99热精品这里久久精品 | 91麻豆精品国产自产在线 | 亚洲视频 视频在线 | 91爱爱中文字幕 | 色婷婷综合视频在线观看 | 欧美一级电影片 | 国产一区成人在线 | 999视频在线播放 | 免费视频一区二区 | 免费观看丰满少妇做爰 | 人人爽人人av| 亚洲国产三级在线 | 在线观看91精品视频 | 国产视频久久久 | 欧美精品一区二区免费 | 欧美日韩不卡一区二区 | 在线观看的av | 在线观看av片 | 99精品视频播放 | 久久99精品热在线观看 | 国产高清视频免费最新在线 | 免费色网 | 国产成人一区二区啪在线观看 | 高清在线一区二区 | 免费观看黄色12片一级视频 | 夜夜躁日日躁 | 久久艹综合 | 一二三久久久 | 久久99精品波多结衣一区 | 色综合久久88色综合天天 | 免费在线观看不卡av | 操久久免费视频 | 色婷婷综合五月 | 日韩激情小视频 | 欧美久久久久久久久久久 | 国产成人精品久久亚洲高清不卡 | 免费在线观看日韩欧美 | 成人免费视频免费观看 | 亚洲激情婷婷 | 又爽又黄在线观看 | 国产3p视频 | 99久久精品免费视频 | 国内精品在线观看视频 | 亚洲精品乱码久久久久久蜜桃动漫 | 99国产免费网址 | 日韩av手机在线观看 | 国产中文字幕av | 最近中文字幕完整视频高清1 | 成人在线网站观看 | 五月天婷亚洲天综合网精品偷 | 久久久福利视频 | 中文字幕在线观看的网站 | 亚洲精品在线观看免费 | 成人wwwxxx视频 | 亚洲国产中文字幕在线观看 | 久久国产精品久久精品国产演员表 | 欧美a√大片| 国产视频日韩视频欧美视频 | 久艹视频在线观看 | 最近能播放的中文字幕 | 黄色免费电影网站 | 91片网| 精品一区二区精品 | 亚洲理论电影 | 九九免费在线观看视频 | 久久久久国产精品视频 | 深爱激情开心 | 黄色一级在线免费观看 | 日本精品免费看 | 日韩在线网址 | 人人要人人澡人人爽人人dvd | 免费在线一区二区三区 | 国产中文字幕在线 | 国产麻豆精品在线观看 | 国产精品福利久久久 | 日韩精品一区二区免费 | 中文字幕一区2区3区 | 色婷婷激情五月 | 一二三久久久 | 久久综合给合久久狠狠色 | 网站在线观看日韩 | 色婷婷 亚洲 | 草久久久久久久 | 亚洲精品乱码久久久久久9色 | 三级毛片视频 | 成人国产在线 | 干亚洲少妇 | 91成人网在线播放 | 中文字幕国产 | 2024国产精品视频 | 亚洲国产精品成人精品 | 日本黄色一级电影 | 色欧美视频| 91福利专区| 久久久 激情 | 日日精品| 久久精品国产精品 | 黄色毛片电影 | 日韩电影在线观看中文字幕 | 成片人卡1卡2卡3手机免费看 | 久久成人国产精品 | 日本中文字幕电影在线免费观看 | 亚洲一区免费在线 | 国产精品videoxxxx | 日韩理论在线 | 国内成人av | 超碰97成人| 51久久夜色精品国产麻豆 | 亚洲精品tv久久久久久久久久 | 中文字幕高清免费日韩视频在线 | 欧美日韩免费在线观看视频 | 精品久久影院 | 国产精品美女久久久久久久 | 18做爰免费视频网站 | 久久久久久久久久久网站 | 久久久久女教师免费一区 | 欧美精品天堂 | 毛片3| 成人小视频在线观看免费 | av电影一区 | av电影av在线 | 国产高清不卡一区二区三区 | 日韩免费福利 | 欧美日韩高清免费 | 九九热只有这里有精品 | 欧美成人69av | 懂色av懂色av粉嫩av分享吧 | 黄色一级大片免费看 | 中文字幕在线免费看线人 | 中文字幕免费国产精品 | 色综合天天射 | 黄色毛片电影 | 91香蕉视频色版 | 午夜久操 | 天天狠狠干 | 人人干人人超 | 国产成人福利片 | 99中文在线 | 日韩精品免费一区二区三区 | 日本一区二区不卡高清 | 丁香五月亚洲综合在线 | 奇米影视777影音先锋 | 色吊丝在线永久观看最新版本 | 久久久久国产一区二区三区 |