1. 程式人生 > 實用技巧 >大資料相關理論知識

大資料相關理論知識

大資料理論知識

Hadoop

大資料的四大特徵:海量資料、價值密度低、資料型別多樣、資料更新快。

hadoop生態圈:HDFS、 MapReduce、 HBASE、 HIVE、 ZOOKEEPER、 PIG、 SQOOP、 Flume、 MAHOUT、 YARN

hadoop啟動後6個程序:Namenode、 SecondaryNamenode、 DataNode、 ResourceManager、 NodeManager、 jps。

Hadoop高可靠,高容錯,執行在Linux上。DataNode負責儲存被拆分的資料塊。Hadoop是由 Doug Cutting建立的。

Hadoop在大資料領域具有的功能是:離線分析,實時查詢,BI分析。

Secondary namenode:SecondaryNameNode有兩個作用,一是映象備份,二是日誌與映象的定期合併縮短Namenode的啟動時間。

Hadoop在企業的應用架構中可以放在訪問層,資料來源層,大資料層。

Hadoop訪問層的功能是:資料分析,資料實時查詢,資料探勘。

Hadoop可以作為開發工具,開源軟體,商業化工具。

Hadoop叢集的效能主要受到以下因素影響:CPU效能,記憶體,網路,儲存容量。

Hadoop的叢集節點有哪些:DataNode,JobTracker,Taskracker,SecondaryNameNode。

Hadoop1.0的不足之處是:抽象層次低,需要人工編碼。單一節點存在單點失效問題,單一名稱空間,無法實現資源隔離,資源管理效率低。不支援水平擴充套件,整體效能受限於單個名稱節點的吞吐量。HDFS HA是熱備份,提供高可用,但是無法解決可擴充套件性,系統性能低和隔離性。

哪些屬於Hadoop1.0的核心元件的不足之處?

  • 實時性差(適合批處理,不支援實時互動式)
  • 資源浪費(Map和Reduce分兩階段執行)
  • 執行迭代操作效率低
  • 難以看到程式整體邏輯

Hadoop1.0存在的問題:單點故障問題,不可以水平擴充套件,單個名稱節點難以提供不同的程式之間的隔離性。系統整體效能受限於單個名稱節點的吞吐量。

HDFS Federation容易出現記憶體溢位,分配資源只考慮MapReduce任務數,不考慮CPU,記憶體等資源。但是相對於HDFS1.0的優勢體現在效能更高效,良好的隔離性,HDFS叢集的擴充套件性。

Hadoop生態系統中Spark的功能是:基於記憶體的分散式並行程式設計框架,具有較高的實時性,並且較好的支援迭代計算。

在Hadoop生態系統中,Kafka主要解決各個元件和其他產品之間缺乏統一的高效的資料交換中介。

Q:Hadoop的優化和發展主要體現在哪幾個方面?

A:Hadoop核心元件MapReduce的設計改進和HDFS的改進還有一點事生態系統中其他元件的不斷豐富。

Q:Hadoop2.0做了哪些改進?

A:設計了HDFS HA,提供了名稱節點熱備份機制,設計了HDFS Federation,管理多個名稱空間,設計了新的資源管理框架YARN。

YARN體系結構主要包括ResourceManager,NodeManager,ApplicationMaster,DataManager。

Q:在YARN中ApplicationMaster主要功能包括哪些?

1、ApplicationMaster與ResourceManager協商獲取資源,ResourceManager會以容器的形式為ApplicationMaster分配資源。

2、ApplicationMaster會定時向ResourceManager傳送心跳訊息,報告資源的使用情況和應用的進度資訊。

3、把獲得的資源進一步分配給內部的各個任務(Map任務或Reduce任務),實現資源的“二次分配”。

ResourceManager的功能包括:處理客戶端請求,監控NodeManager,資源分配與排程。

ApplicationMaster的功能是處理來自ResourceManager的命令。

Q: 如果我們現有一個安裝2.6.5版本的hadoop叢集,在不修改預設配置的情況下儲存200個每個200M的文字檔案,請問最終會在叢集中產生多少個數據塊(包括副本)?

A: 在預設情況下,HDFS叢集預設儲存檔案3份,並且大檔案會按照128M的資料塊大小進行切割分散儲存。所以題目中每個檔案分為兩塊,總資料塊有(200 * 2)= 400個。再加上會儲存三份,所以 400 * 3 = 1200。

HDFS

Q:什麼是分散式檔案系統?

A:將多個檔案儲存到多個計算機節點上,成千上萬個計算機節點構成的計算機叢集。

Q:計算機叢集中的節點有?

A:主節點Master,從節點Slave,名稱節點NameNode。

Q:Hadoop-2.6.5叢集中的HDFS的預設的資料塊的大小是?

A:Hadoop2.x版本以前的預設資料塊的大小是64M,到了Hadoop2.x版本以後。 預設的資料塊大小就變成了128M,但是是可以更改的。

Q:抽象塊的概念帶來的好處是?

A:適合資料備份;簡化系統設計;支援大規模儲存檔案。

Q:NameNode的主要作用是?

A:儲存元資料。

Q:NameNode主要儲存了哪些資料結構?

A:FsImage和EditLog。

Q:DataNode的主要功能是?

A:負責資料的儲存和讀取。根據客戶端或是名稱節點的排程來進行資料的儲存和檢索。向名稱節點定期傳送自己所儲存的資料塊列表。

Q:HDFS的名稱空間包含什麼?

A: 檔案,目錄,塊。

Q:HDFS資料塊多副本儲存具有哪些特點?

A: 加快資料傳輸速度,容易檢查資料錯誤,保證資料的可靠性。

HDFS特點:1、簡單一致性 2、故障檢測和自動恢復 3、流式資料訪問 4、支援超大檔案 5、優化的讀取 6、資料完整性,相容廉價硬體,支援流資料讀寫,大資料集合。

HDFS採用主從架構。

格式化namenode命令:hadoop namenode -format

負載均衡作用:讓各節點獲得分配的任務均衡,發揮各個節點的最大效能

負載均衡命令:hadoop balance [-threshold<threshold>] []為可選引數

對大資料進行分散式並行處理的系統框架,是一種並行的方法。HDFS是hadoop的儲存系統。

HDFS唯一名稱節點的侷限性:效能的瓶頸,名稱空間的限制,隔離問題,叢集的可用性。

HDFS在安全模式下只能讀不能寫。

HDFS不適合大量小檔案的儲存,因namenode將檔案系統的元資料存放在記憶體中,因此儲存的檔案數目受限於 namenode的記憶體大小。HDFS中每個檔案、目錄、資料塊佔用150Bytes。如果存放的檔案數目過多的話會佔用很大的記憶體。

HDFS叢集的datnaode掉線超時時長的計算公式為:

timeout = 10 * dfs.heartbeat.interval + 2 * heartbeat.recheck.interval,不過heartbeat.recheck.interval的單位是ms,dfs.heartbeat.interval的單位是s。

SecondryNameNode 是NameNode的冷備份;合併fsimage和fsedits然後再發給namenode。

SecondaryNameNode通過HTTP GET方式從NameNode上獲取到FsImage和EditLog檔案,並下載到本地的相應目錄下。SecondaryNameNode是HDFS架構中的一個組成部分。

FsImage檔案沒有記錄檔案包含哪些塊,以及每個塊儲存在哪個資料節點;包含檔案系統中所有目錄和檔案inode的序列化形式;用於維護檔案系統樹以及檔案樹中所有的檔案和資料夾的元資料。

MapReduce

MapReduce採用“ 分而治之”策略,設計理念是計算向資料靠攏,採用的框架是是Master/Slave結構。

谷歌最先提出分散式並行程式設計模型MapReduce。分散式程式執行在大規模叢集上。

JobTracker的主要作用是:負責資源監控和作業排程,監控所有TaskTracker和Job的健康狀況。

資料交換是通過MapReduce自身完成的。MapReduce可用於關係代數的運算,分組以及聚合,矩陣和向量乘法運算。不同的Map任務不能進行通訊。開發人員在不會分散式並行程式設計的情況下,也可以很容易將自己的程式執行在分散式系統上,完成海量資料集的計算。

MapReduce體系結構包括,Client,JobTracker,TaskTracker, Task。

Task分為Map Task和Reduce Task兩種,均由TaskTracker啟動。

在MapReduce工作中,使用者不能顯示的從一臺機器向另一臺機器傳送訊息。

使用者可以通過Client提供的一些介面檢視作業的執行狀態。

使用者編寫的MapReduce程式通過Client提交到JobTracker。JobTracker會跟蹤任務的執行進度、資源使用量等資訊,並將這些資訊告訴任務排程器(TaskScheduler)。

slot 分為Map slot 和Reduce slot 兩種,分別供MapTask 和Reduce Task 使用。

TaskTracker 使用“slot”等量劃分本節點上的資源量(CPU、記憶體等)。

MapReduce非共享,容錯好。Hadoop MapReduce是MapReduce的開源實現,後者比前者使用門檻低很多。

MapReduce相比較傳統的平行計算框架的優勢是:非共享式,容錯性好,普通PC機相容,擴充套件性好。資料密集型操作。

MapReduce的作業主要包括從磁碟或者網路讀取資料,進行IO密集型工作;計算資料將資料結果合併進行CPU密集型操作。

Split是邏輯概念包含哪些元資料資訊?

資料的起始位置,資料的長度,資料所在節點,資料大小。

Map端的Shuffle的描述正確的是?

多個移除檔案歸併成一個或多個大檔案,檔案的鍵值對是排序的。當資料很少的時候,不需要寫到磁碟,直接在記憶體中歸併,然後輸出給Reduce。

MapReduce是分散式計算程式設計模型。

Map過程接受<key,value>型別,輸出<key,value>型別,用於對切分過的資料進行原始處理。

shuffer過程從Mapper產生的直接輸出結果,經過一系列的處理,成為最終的Reducer直接輸入資料為止的整個過程。sort(排序)、combine(合併)、partition(分片)

Reduce過程接受<key,{value list}>型別資料,輸出<key,value>形式的資料輸出,用於對Mapper過程的結果進行彙總,得到最後的輸出。

簡單描述一下MapReduce的執行過程

從分散式檔案系統中讀取資料,執行Map任務輸出中間結果,通過Shuffle階段將中間結果分割槽排序後傳送給Reduce任務,執行reduce任務得到最終結果並寫入到分散式檔案系統中。

Zookeeper

BigTable是一個分散式儲存系統。起初用於解決典型的網際網路搜尋問題。 網路搜尋應用查詢建立好的索引,從BigTable得到網頁。

BigTable與HBASE使用的技術對比。

GFS HDFS
Chubby Zookeeper
MapReduce Hadoop MapReduce

HBASE四要素:高可靠、高效能、可伸縮、面向列、實時讀寫的分散式資料庫系統

特點:線性擴充套件、面向列、大表、稀疏、非結構化、面向海量資料、HQL、高讀寫場景

wal檔案:由HLog管理的預寫日誌檔案。

HFile檔案:實際的資料檔案

插入資料操作:put ‘表名’ ’行鍵’,’列族:列’,’值’

獲取資料操作:get ‘表名’ ‘行鍵’ [,’列族[:列]’] [] 為可選內容

HBASE的資料模型中,所有列都是以字串的形式儲存,使用者需要自行進行資料型別轉換。

它在更新操作的時候,並不會刪除資料的舊版本而是生成一個新的版本,舊的版本仍然有保留。

HBase不存在複雜表之間的關係,只有簡單的查詢,插入,刪除,建立,清空等操作。

Pig主要用於資料統計。

HBASE通過一些因素確定單元格,這些因素被叫做四維座標,分別是行,時間戳,列族,列。

HBase的實現包括三個主要的功能元件:

  1. 庫函式:連結到每個客戶端

  2. 一個Master主伺服器

  3. 許多個Region伺服器

主伺服器主要負責表和Region的管理工作,管理使用者表的增刪改查,當Region分裂或者合併後負責重新調整Region的分佈。對發生故障失效的Region伺服器進行故障轉移的處理。

Hbase只有針對行鍵的索引,如果要訪問HBASE表中的行,不能通過時間戳來訪問。

元資料表又叫做.META表。用來儲存Region和Regina伺服器之間的對映關係。

當HBASE表很大的時候,.META表也會被分裂成多個Region。

-ROOT表又叫做根資料表,用來記錄元資料表的具體位置。

-ROOT-表只有唯一一個Region,名字是在程式中被寫死的。

Zookeeper檔案記錄了-ROOT-表的位置;-ROOT-表記錄了.META.表的Region位置資訊;

為了加快訪問速度,.META.表的全部Region都會被儲存在記憶體中。

HBASE的三層結構如下圖所示。

Q:HBASE的訪問介面型別有哪些?

A:HBASE Shell,Native Java API ,Thrift Gateway,REST Gateway。

HBASE資料模型的相關問題。

每個HBASE表都由若干行組成,每個行都由對應的行鍵標識。列族中的列通過列限定符來定位。每個單元格都儲存著同一個資料額多個版本,這些版本由時間戳來標識。

Q:HBASE效能監控都有哪些工具?

A:Master-status(自帶) 、Ganglia、 OpenTSDB、Ambari

Q:關於Region服務原理的描述正確的是?

A:每個Region伺服器都有自己的HLog檔案。每次刷寫都生成一個新的StoreFile,數量太多會影響查詢速度。合併操作比較耗費資源,只有數量達到一個閾值才會啟動合併。Store是Region伺服器的核心。

關於HLog的說明:HLog保證分散式系統出錯的恢復,為每個Region伺服器配置都有HLog,Zookeeper會實時監測每一個Region伺服器的狀態。Master會對故障的Region伺服器進行故障恢復使用HLog。

NoSQL

資料庫的四大型別:文件資料庫,鍵值資料庫,圖資料庫,列族資料庫。

鍵值資料庫寫操作效能高,無法儲存結構化資料,擴充套件性好,靈活度高。

列族資料庫大多不支援強一致性事務,容易進行分散式擴充套件,複雜性低。

事務的四大特性:原子性,一致性,隔離性,永續性。

在可用性方面,NoSQL優於RDBMS。錯。

NOSQL的三大基石:CAP,BASE,最終一致性,DN8.

CAP中的C是指一致性,是指任何一個讀操作總是能夠讀到之前完成的寫操作的結果量。

一個分散式系統不能同時滿足一致性、可用性和分割槽容忍性這三個需求。

可用性,是指快速獲取資料。

分割槽容忍性,是指當出現網路分割槽的情況時(即系統中的一部分節點無法和其他節點進行通訊),分離的系統也能夠正常執行。

NoSQL與關係資料庫的比較:

1、 關係資料庫以完善的關係代數理論作為基礎,有嚴格的標準

2、 關係資料庫可擴充套件性較差,無法較好支援海量資料儲存

3、 NoSQL可以支援超大規模資料儲存

4、 NoSQL 資料庫缺乏數學理論基礎,複雜查詢效能不高

HBase

ZOOKEEPER作用:為分散式應用所設計的高可用、高效能且一致的開源協調服務,提供分佈鎖服務。

目的:加強叢集穩定性、持續型、有序性和高效性

Leader:接收Client請求,也可以接收其他Server轉發的寫請求,負責更新系統狀態。

Follower:接受Client請求,如果是寫請求轉發給Leader來更新系統狀態,讀請求則由Follower的記憶體資料庫直接響應。

Zab協議:來自Client所有的寫請求,都轉發給ZK中唯一的Leader。由Leader根據請求發起一個Proposal。然後其他的Server對該Proposal進行投票。之後,Leader對投票進行收集,當投票超過半數時Leader會向所有的Server傳送一個通知訊息。最後,當Client所連線的Server收到訊息時,會把該操作更新到記憶體中並對Client的寫請求做出迴應。

Zookeeper在 config 名稱空間下,每個znode最多能儲存(1M)資料

zookeeper 有很多版本,( apache) 版本是原始版本,( cdh) 版本是對原始版本的增強

zookeeper=檔案系統+通知機制.

Zookeeper有四種節點,PERSISTENT-持久節點,EPHEMERAL-臨時節點,PERSISTENT_SEQUENTIAL-持久順序節點,EPHEMERAL_SEQUENTIAL-臨時順序節點。
 
Zookeeper主要用於提供哪些服務?
配置維護,域名服務,分散式同步,組服務。
 

Hive特點:是一種資料倉庫技術,用於查詢和管理儲存在分散式環境下的大資料集。完美整合SQL技術,提供了類SQL的查詢語言,成為HiveQL或HQL,用於查詢儲存在Hadoop叢集中的資料,基於Hadoop分散式批處理系統的資料倉庫技術,任務提交具有高延遲性。

為什麼安裝MYSQL資料庫儲存元資料:預設Hive內建的Derby資料庫儲存metastore資料,但Derby只支援在任何時刻僅存在一條會話連線與client和Derby之間,不支援多使用者使用Hive訪問儲存在Derby中的metastore資料,因此使用第三方獨立的資料庫來儲存metastore資料。

建庫:

create (DATABASE|SCHEMA) [IF NOTEXISTS] database_name
  [COMMENT database_comment]
  [LOCATION hdfs_path]
  [WITH DBPROPERTIES (property_name=property_value,…)];
  DATABASE|SCHEMA:用於限定建立資料庫或資料庫模式
  IF NOT EXISTS:目標物件不存在時執行建立操作
  COMMENT:起註釋說明作用
  LOCATION:指定資料庫位於HDFS上的儲存路徑。若未建立,將使用${hive.metastore.warehouse.dir}定義值作為其上層路徑位置

建表:create table 庫.表 ( 列名 型別 );

匯入資料:load data[local] input ‘filepath’ [overwrite] into table tablename [partition(partcol1=val1,partcol2=val2…)];

PIG:針對大資料收集分析的平臺,擁有完整的資料操作規範-PIG語言。

pig Latin:提供了對資料進行載入、合併、過濾、排序、分組、關聯以及支援對資料集使用函式功能或使用者自定義函式功能。

SQOOP:Hadoop和REBMS之間進行資料遷移的工具。

sqoop1定位:功能結構簡單、部署方便

sqoop2定位:功能完善、操作簡單、支援命令列操作、WEB訪問、提供可程式設計API,配置專門的Sqoopserver,安全性高

sqoop引數可以指定一般引數或Sqoop特定工具引數。可以為工具命令的某些屬性設定自定義值。一般引數用於hadoop相關屬性,引數前面用短橫線-為標誌。

sqoop特定工具引數用於設定與sqoop操作相關的屬性,引數選項前面用雙橫線--為標誌

命令格式:使用完整命令格式,還可以使用toolname的特定指令碼檔名sqoop-(toolname)執行相同的操作

sqoop資料匯入命令:sqoop import (generic-args) (import-args)

連線資料庫操作:sqoop import –connect jdbc:mysql://database.mysql.nodel:3306/sqoopDB --username --password 123456

sqoop匯入資料命令:

sqoop import –connect jdbc:mysql://database.mysql.node1:3306/sqoopDB --username bear -P --table employees --target-dir /user/sqoop

--target-dir 指定HDFS目錄,最後一個子目錄不能存在。

一、Hadoop叢集安裝配置的主要操作步驟

1.建立Hadoop使用者;

2.Java環境安裝

3.SSH登陸許可權設定

4.Hadoop單機安裝和偽分散式安裝

二、Hbase表建立,新增資料、查詢資料的操作命令

建立create

插入insert

查詢select

三、Hadoop MapReduce程式設計模型主要哪由兩個抽象類及功能

Reducer: reducer是唯一更新state的途徑,通過觸發dispatch更新state

Mapper: 動態的實現單表的增刪改查功能,大大降低開發成本,減少工作量

四、pig的功能

  1. 用來處理離線使用者資料,對使用者行為進行預測

  2. 快速高效的處理巨大的資料

五、zookeepr中的角色,zookeeper的功能

Leader ,Follower ,Observer

功能:配置服務、同步服務、叢集管理、節點選舉。