中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spark的基礎知識點整理

發布時間:2021-08-31 18:43:02 來源:億速云 閱讀:220 作者:chen 欄目:開發技術

這篇文章主要介紹“spark的基礎知識點整理”,在日常操作中,相信很多人在spark的基礎知識點整理問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”spark的基礎知識點整理”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一 .基礎整理

  1. 服務器本身不存儲數據,數據本身放在HDFS中的,服務器只做功能的進行查,刪改等功能

  2. Hive hbase mysql 區別

    {% asset_img 各種數據庫之間的差別比較.png 這是一個新的博客的圖片的說明 %}
  3. 服務器本身不存儲數據,數據本身放在HDFS中的,服務器只做功能的進行查,刪改等功能

  4. Hbase特性
    spark的基礎知識點整理

  5. 16010  對外訪問端口

  6. HBASE是一個數據庫——可以提供數據的實時隨機讀寫

  7. Hbase:

    • hadoop數據庫,分布式可伸縮大型數據存儲。

    • 用戶對隨機、實時讀寫數據。

    • 十億行 x 百萬列。

    • 版本化、非關系型數據庫

  8. hbase存儲機制:面向列存儲,table是按row排序。

  9. Hbase的表沒有固定的字段定義

    • Hbase的表在物理存儲上,是按照列族來分割的,不同列族的數據一定存儲在不同的文件中

    • Hbase的表中的每一行都固定有一個行鍵,而且每一行的行鍵在表中不能重復

    • Hbase中的數據,包含行鍵,包含key,包含value,都是byte[ ]類型,hbase不負責為用戶維護數據類型

    • HBASE對事務的支持很差

    • Hbase的表中每行存儲的都是一些key-value對

  10. 特征:

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

    • 存儲容量可以線性擴展

    • 數據存儲的安全性可靠性極高

    • 對于為空(null)的列,并不占用存儲空間,因此,表可以設計的非常稀疏。

    • 主要用來存儲結構化和半結構化的松散數據

    • Hbase查詢數據功能很簡單,不支持join等復雜操作,不支持復雜的事務(行級的事務)

    • 與hadoop一樣,Hbase目標主要依靠橫向擴展,通過不斷增加廉價的商用服務器,來增加計算和存儲能力。

  11. 訪問hbase table中的行,只有三種方式:

    • 通過單個row key訪問

    • 通過row key的range

    • 全表掃描

二 .集群搭建(完全分布式)

  1. 主機安裝

  2. JDK 安裝

  3. hadoop安裝

  4. 環境變量

  5. 驗證:hbase version

  6. [hbase/conf/hbase-env.sh]

    export JAVA_HOME=/soft/jdk
    export HBASE_MANAGES_ZK=false
  7. [hbse-site.xml]

      <!-- 使用完全分布式 -->
       <property>
           <name>hbase.cluster.distributed</name>
           <value>true</value>
       </property>
       <!-- 指定hbase數據在hdfs上的存放路徑 -->
       <property>
           <name>hbase.rootdir</name>
           <value>hdfs://s201:8020/hbase</value>
       </property>
       <!-- 配置zk地址 -->
       <property>
           <name>hbase.zookeeper.quorum</name>
           <value>s201:2181,s202:2181,s203:2181</value>
       </property>
       <!-- zk的本地目錄 -->
       <property>
           <name>hbase.zookeeper.property.dataDir</name>
           <value>/home/centos/zookeeper</value>
       </property>
    • [hbase/conf/regionservers]
      自己按需求設置
      s202
      s203
      s204

    • 啟動hbase集群(s201)
      start-hbase.sh

    • 訪問
      http://s201:16010

    • 啟動另一個master
      hbase-daemon.sh start master

三.使用知識點

  1. hbase shell 基本操作

    • scan ‘hbase:meta’    //查看元數據表
        split ‘ns1:t1’        //切割表

    • help    ‘list_namespace’            //查看特定的命令幫助
        list_namespace                    //列出名字空間(數據庫)
        list_namespace_tables ‘defalut’    //列出名字空間(數據庫)
        create ‘ns1:t1’,’f1’                //創建表,指定空間下
        put ‘ns1:t1’,’row1’,’f1:id’,100        //插入數據
        get ‘ns1:t1’,’row1’                    //查詢指定row
        scan ‘ns1:t1’                        //掃描表
        flush ‘ns1:t1’        //清理內存數據到磁盤。
        count ‘ns1:t1’        //統計函數
        disable ‘ns1:t1’        //刪除表之前需要禁用表

    • help    幫助

    • drop ‘ns1:t1’

  2. 通過編程API訪問Hbase

    • 添加依賴



    • org.apache.hbase
      hbase-client
      1.2.3

    • 復制hbase集群的hbase-site.xml文件到模塊的src/main/resources目錄下

    • 創建conf對象  Configuration conf = HBaseConfiguration.create();

    • 通過連接工廠創建連接對象  Connection conn = ConnectionFactory.createConnection(conf);

    • 通過連接查詢tableName對象 TableName tname = TableName.valueOf(“ns1:t1”);

    • 獲得table Table table = conn.getTable(tname);

      //創建conf對象
               Configuration conf = HBaseConfiguration.create();
               //通過連接工廠創建連接對象
               Connection conn = ConnectionFactory.createConnection(conf);
               //通過連接查詢tableName對象
               TableName tname = TableName.valueOf("ns1:t1");
               //獲得table
               Table table = conn.getTable(tname);
               //通過bytes工具類創建字節數組(將字符串)
               byte[] rowid = Bytes.toBytes("row3");
               //創建put對象
               Put put = new Put(rowid);
               byte[] f1 = Bytes.toBytes("f1");
               byte[] id = Bytes.toBytes("id") ;
               byte[] value = Bytes.toBytes(102);
               put.addColumn(f1,id,value);
               //執行插入
               table.put(put);
//創建conf對象
                Configuration conf = HBaseConfiguration.create();
                //通過連接工廠創建連接對象
                Connection conn = ConnectionFactory.createConnection(conf);
                //通過連接查詢tableName對象
                TableName tname = TableName.valueOf("ns1:t1");
                //獲得table
                Table table = conn.getTable(tname);
                //通過bytes工具類創建字節數組(將字符串)
                byte[] rowid = Bytes.toBytes("row3");
                Get get = new Get(Bytes.toBytes("row3"));
                Result r = table.get(get);
                byte[] idvalue = r.getValue(Bytes.toBytes("f1"),Bytes.toBytes("id"));
                System.out.println(Bytes.toInt(idvalue));
  1. Row Key

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

    • A:通過單個row key訪問

    • B:通過row key的range

    • C:全表掃描

    • Row key行鍵 (Row key)可以是任意字符串(最大長度是 64KB,實際應用中長度一般為 10-100bytes)

    • 在hbase內部,row key保存為字節數組

    • Hbase會對表中的數據按照rowkey排序(字典順序)

    • 存儲時,數據按照Row key的字典序(byte order)排序存儲。

    • 設計key時,要充分排序存儲這個特性,將經常一起讀取的行存儲放到一起。(位置相關性)

    • 字典序對int排序 : 注意要位數一樣 例如10000  設置規則最好都是一樣的如 0001   2000  這樣的

    • 表中的每一行有一個“行鍵rowkey”,而且行鍵在表中不能重復

    • 表中的每一對kv數據稱作一個cell,cell就是存儲這些數據的一個類似封裝對象,所有數據可以通過查詢拿到

    • cell中的數據是沒有類型的,全部是字節碼形式存貯。、

    • 由{row key, column( =

      +
    • hbase可以對數據存儲多個歷史版本(歷史版本數量都是可配置)

    • 整張表由于數據量過大,會被橫向切分成若干個region(用rowkey范圍標識)不同region的數據也存儲在不同文件中

    • hbase會對插入的數據按順序存儲:首先按行鍵排序,之后再按同一行里面的kv會按列族排序,再按k排序

    • hbase中只支持byte[]   此處的byte[] 包括了: rowkey,key,value,列族名,表名

    • hbase三級定位,行鍵,列,時間戳,列也可以是列族加列

    • hbase通過行鍵區分區域服務器,會切割每部分,每部分都有各自的范圍,行鍵是有序的

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

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

  2. 列族

    • hbase表中的每個列,都歸屬與某個列族。列族是表的schema的一部分(而列不是),必須在使用表之前定義。

    • 列名都以列族作為前綴 例如:space:math 都屬于 space這個列族

    • 訪問控制、磁盤和內存的使用統計都是在列族層面進行的。

    • 列族越多,在取一行數據時所要參與IO、搜尋的文件就越多,所以,如果沒有必要,不要設置太多的列族

  3. 寫前日志

    • WAL            //write ahead log,寫前日志。

    • 寫前日志  WAL  主要是容錯用的

    • 你寫數據的時候都會往這個表記錄,所以他可能影響插入速度

    • 代碼:關閉寫前日志可以提高插入速度,因為插入的時候都會往寫前日志里記錄

      DecimalFormat format2 = new DecimalFormat();
        format2.applyPattern("0000");
        long start = System.currentTimeMillis() ;
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum","s202:2181,s203:2181,s204:2181");
        Connection connection = ConnectionFactory.createConnection(configuration);
        TableName tableName =TableName.valueOf("new:t1");
        HTable table = (HTable)connection.getTable(tableName);
        table.setAutoFlush(false);
        for (int i = 2 ; i <= 10000 ; i ++) {
              Put put = new Put(Bytes.toBytes("row" + format2.format(i))) ;
              //關閉寫前日志
              put.setWriteToWAL(false);
              put.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("id"),Bytes.toBytes(i));
              put.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("name"),Bytes.toBytes("tom" + i));
              put.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("age"),Bytes.toBytes(i % 100));
              table.put(put);
              if ( i % 2000 == 0 ) {
                    table.flushCommits();
              }
        }
        //不提交丟數據,最后不滿足2000的會丟,不是自動提交
        table.flushCommits();
        System.out.println(System.currentTimeMillis() - start );
  4. 存放位置

     -  相同列族的數據存放在一個文件中
     -  [表數據的存儲目錄結構構成]
     -  hdfs://s201:8020/hbase/data/${名字空間}/${表名}/${區域名稱}/${列族名稱}/${文件名}
     -  [WAL目錄結構構成]
     -  hdfs://s201:8020/hbase/WALs/${區域服務器名稱,主機名,端口號,時間戳}/
    • 聯系zk,找出meta表所在rs(regionserver)  /hbase/meta-region-server

    • 定位row key,找到對應region server

    • 緩存信息在本地。

    • 聯系RegionServer

    • HRegionServer負責open HRegion對象,為每個列族創建Store對象,Store包含多個StoreFile實例,

    • 是對HFile的輕量級封裝。每個Store還對應了一個MemStore,用于內存存儲數據。

    • hbase切割文件配置位置:


       hbase.hregion.max.filesize
       10737418240
       hbase-default.xml
    • hbase集群啟動時,master負責分配區域到指定區域服務器。主要是把meta放入區域服務器

    1. client端交互過程

  5. Zookeeper 起的作用

    • 保證任何時候,集群中只有一個master

    • 存貯所有Region的尋址入口——root表在哪臺服務器上

    • 實時監控Region Server的狀態,將Region server的上線和下線信息實時通知給Master

    • 存儲Hbase的schema,包括有哪些table,每個table有哪些column family

  6. Master職責

    • 為Region server分配region

    • 負責region server的負載均衡

    • 發現失效的region server并重新分配其上的region

    • HDFS上的垃圾文件回收

    • 處理schema更新請求

    • master僅僅維護者table和region的元數據信息,負載很低。

  7. Region Server職責

    • Region server維護Master分配給它的region,處理對這些region的IO請求

    • Region server負責切分在運行過程中變得過大的region

    • client訪問hbase上數據的過程并不需要master參與

    • 尋址訪問zookeeper和region server

    • 數據讀寫訪問regione server

四.整體架構
spark的基礎知識點整理

到此,關于“spark的基礎知識點整理”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節
推薦閱讀:
  1. php 基礎整理
  2. Spark基礎

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜兴市| 原阳县| 东乡族自治县| 宿州市| 景德镇市| 同仁县| 昭平县| 博兴县| 九江市| 疏勒县| 张家口市| 中宁县| 林芝县| 扶余县| 南投市| 汪清县| 盐山县| 辽中县| 玉树县| 苍梧县| 安徽省| 青神县| 荆州市| 青州市| 望都县| 江油市| 铁岭县| 浪卡子县| 右玉县| 化州市| 北票市| 宁南县| 宜宾县| 巧家县| 娱乐| 克什克腾旗| 将乐县| 荥经县| 乌鲁木齐市| 淮南市| 广南县|