您好,登錄后才能下訂單哦!
這篇文章主要介紹“spark的基礎知識點整理”,在日常操作中,相信很多人在spark的基礎知識點整理問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”spark的基礎知識點整理”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
一 .基礎整理
服務器本身不存儲數據,數據本身放在HDFS中的,服務器只做功能的進行查,刪改等功能
Hive hbase mysql 區別
{% asset_img 各種數據庫之間的差別比較.png 這是一個新的博客的圖片的說明 %}
服務器本身不存儲數據,數據本身放在HDFS中的,服務器只做功能的進行查,刪改等功能
Hbase特性
16010 對外訪問端口
HBASE是一個數據庫——可以提供數據的實時隨機讀寫
Hbase:
hadoop數據庫,分布式可伸縮大型數據存儲。
用戶對隨機、實時讀寫數據。
十億行 x 百萬列。
版本化、非關系型數據庫。
hbase存儲機制:面向列存儲,table是按row排序。
Hbase的表沒有固定的字段定義
Hbase的表在物理存儲上,是按照列族來分割的,不同列族的數據一定存儲在不同的文件中
Hbase的表中的每一行都固定有一個行鍵,而且每一行的行鍵在表中不能重復
Hbase中的數據,包含行鍵,包含key,包含value,都是byte[ ]類型,hbase不負責為用戶維護數據類型
HBASE對事務的支持很差
Hbase的表中每行存儲的都是一些key-value對
特征:
Hbase的表數據存儲在HDFS文件系統中
存儲容量可以線性擴展
數據存儲的安全性可靠性極高
對于為空(null)的列,并不占用存儲空間,因此,表可以設計的非常稀疏。
主要用來存儲結構化和半結構化的松散數據
Hbase查詢數據功能很簡單,不支持join等復雜操作,不支持復雜的事務(行級的事務)
與hadoop一樣,Hbase目標主要依靠橫向擴展,通過不斷增加廉價的商用服務器,來增加計算和存儲能力。
訪問hbase table中的行,只有三種方式:
通過單個row key訪問
通過row key的range
全表掃描
二 .集群搭建(完全分布式)
主機安裝
JDK 安裝
hadoop安裝
環境變量
驗證:hbase version
[hbase/conf/hbase-env.sh]
export JAVA_HOME=/soft/jdk export HBASE_MANAGES_ZK=false
[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
三.使用知識點
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’
通過編程API訪問Hbase
添加依賴
復制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));
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)名; 按字典順序
列族
hbase表中的每個列,都歸屬與某個列族。列族是表的schema的一部分(而列不是),必須在使用表之前定義。
列名都以列族作為前綴 例如:space:math 都屬于 space這個列族
訪問控制、磁盤和內存的使用統計都是在列族層面進行的。
列族越多,在取一行數據時所要參與IO、搜尋的文件就越多,所以,如果沒有必要,不要設置太多的列族
寫前日志
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 );
存放位置
- 相同列族的數據存放在一個文件中 - [表數據的存儲目錄結構構成] - 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集群啟動時,master負責分配區域到指定區域服務器。主要是把meta放入區域服務器
client端交互過程
Zookeeper 起的作用
保證任何時候,集群中只有一個master
存貯所有Region的尋址入口——root表在哪臺服務器上
實時監控Region Server的狀態,將Region server的上線和下線信息實時通知給Master
存儲Hbase的schema,包括有哪些table,每個table有哪些column family
Master職責
為Region server分配region
負責region server的負載均衡
發現失效的region server并重新分配其上的region
HDFS上的垃圾文件回收
處理schema更新請求
master僅僅維護者table和region的元數據信息,負載很低。
Region Server職責
Region server維護Master分配給它的region,處理對這些region的IO請求
Region server負責切分在運行過程中變得過大的region
client訪問hbase上數據的過程并不需要master參與
尋址訪問zookeeper和region server
數據讀寫訪問regione server
四.整體架構
到此,關于“spark的基礎知識點整理”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。