此文獻給正打算入門大數據的朋友:大數據學習筆記1000條(1)

1、Zookeeper用於集羣主備切換。

2、YARN讓集羣具備更好的擴展性。

3、Spark沒有存儲能力。

4、Spark的Master負責集羣的資源管理,Slave用於執行計算任務。

5、Hadoop從2.x開始,把存儲和計算分離開來,形成兩個相對獨立的子集羣:HDFS和YARN,MapReduce依附於YARN來運行。

6、YARN可以爲符合YARN編程接口需求的集羣提供調度服務。

7、YARN:

很多初學者,對大數據的概念都是模糊不清的,大數據是什麼,能做什麼,學的時候,該按照什麼線路去學習,學完往哪方面發展,想深入瞭解,想學習的同學歡迎加入大數據學習qq羣:458345782,有大量乾貨(零基礎以及進階的經典實戰)分享給大家,並且有清華大學畢業的資深大數據講師給大家免費授課,給大家分享目前國內最完整的大數據高端實戰實用學習流程體系

ResourceManager 一主多備

NodeManager 一般與DataNode部署在一起。

8、單機硬件配置會嚴重影響集羣的性能。

9、初始化集羣機器環境:創建賬號、安裝JDK、設置時間同步。

10、Zookeeper的部署最簡單,其節點數必爲奇數。

11、ZK兩個端口,前者是鏈接Leader後者是用於競選。

12、部署Spark StandLone集羣:

1、SSH無密碼登錄

2、複製解壓Spark

3、編寫配置文件分發到所有節點

13、Hadoop2.x以上支持雙機熱備。

14、Standlone模式只支持簡單的固定資源分配策略。

15、YARN統一爲集羣上的所有計算負載分配資源,可以避免資源分配的混亂無序。

16、Spark程序由Master還是YARN來調度執行,是由Spark程序在提交時決定的。

17、YARN兩種調度模式:

Yarn-cluster 模式,用於生產

Yarn-client 模式,用於交互

18、Spark計算都是圍繞RDD進行的。

19、Spark在運行時,一般RDD操作會爲每個RDD分區運行一個job。

20、Job最簡單的理解,它對應一個java線程。

21、Spark所有基於文件的生產RDD方法,都支持目錄、壓縮文件和通配符。

22、RDD是Spark的核心抽象,所有計算都圍繞RDD進行。

23、RDD操作分爲兩類:

Transformation 轉換

Action 動作

24、所有Transformation都是Lazy模式,先記錄計算方式,Driver返回結果時開始計算。

25、RDD的Transformation實際計算只在Action返回結果時才進行,或者持久化。

26、Spark嚴重依賴傳遞函數類型的參數。

27、從Driver分發各個節點過程:

Job執行:

1、在Driver節點上序列化代碼

2、傳送至各個計算節點

3、在計算節點上反序列化

4、執行

28、Scala function支持序列化。

29、Spark的核心是RDD,而RDD是分佈式計算的。

30、Spark會將Job運行所有依賴的變量、方法、(閉包)全部打包在一起序列化。

31、RDD操作的禁忌,不能嵌套調用。

32、Action操作輸出不再是RDD,返回值Driver程序。

33、Spark集羣上的資源主要是CPU core數量和物理內存。

34、在程序運行時,每個core對應一個線程。

35、Standlone模式下由Spark集羣中的master節點進行資源調度。

36、Spark調度兩類:

1、spark程序見的調度(主)

2、spark程序內部的調度

37、用戶編寫的spark程序稱爲Driver程序。

38、每個驅動程序都有一個SparkContext對象,擔負着與集羣溝通的職責。

39、集羣管理器負責集羣的資源調度。

40、執行器,每個spark程序在每個節點上啓動的一個進程。

41、一次RDD Action對應一次job。

42、Stage,job在執行過程中被分爲多個階段。

43、Task,在執行器上執行的最小單位。

44、Spark程序間的調度:

靜態分配 (主)

動態分配

45、所有集羣管理器都支持靜態資源分配。

46、當spark爲多用戶服務時,需要配置spark程序內部的調度。

47、不同線程提交的job可以並行執行。

48、默認spark的調度器以FIFO方式運行Job。

49、公平調度還支持對多個Job進行分組,分組稱爲調度池。

50、Spark性能優勢,很大一部分原因是內存和緩存。

51、RDD持久化可以多次利用,性能提高10倍以上。

52、Spark提供兩類共享變量——廣播變量和計數器。

53、廣播變量是一個只讀變量,在所有節點上都是一份緩存。

54、計數器只能增加,用於技術和求和。

55、容錯機制是分佈式系統的一個重要能力。

56、DAG:有向無環圖的計算任務集合。

57、分佈式系統經常需要做檢查點。

58、RDD也是一個DAG,每一個RDD都會記住創建該數據需要哪些操作——血統。

59、RDD依賴:

窄依賴 —— 父分區對應一個子分區

寬依賴 —— 父分區對應多個子分區

60、Spark提供了預寫日誌(journal),先將數據寫入支持容錯的文件系統中。

61、Spark master容錯:

Standalone ——Zookeeper

單點 ——本地重啓

62、Slave節點失效:

1、Work異常停止

2、執行器異常停止

3、Driver異常退出

63、監控管理:

1、Web界面

2、Metrics

3、外部系統

64、Web界面:

1、調度器stage,Task列表

2、RDD大小和內存文件統計情況

3、環境信息

4、正在執行的執行器信息

65、Standlone模式的集羣管理器有自己的web界面。

66、Web界面表格的頭部都支持點擊排序。

67、Spark程序一般都是由腳本bin/spark-submit來提交的。

68、RDD特點:

1、RDD是隻讀的

2、RDD可指定緩存在內存中

3、RDD可以通過重新計算得到

69、RDD核心屬性:

1、一個分區列表

2、一個依賴列表

3、一個名爲compute的計算函數

4、分區器

5、計算各分區是優先的位置列表

70、Action不可以在RDD Tranformation內部調用。

71、Transformation只是建立在計算關係,而action纔是實際的執行者——觸發者

72、Spark.local.dir用於shuffle。

73、SparkContext是spark程序最主要的入口。

74、每個jvm只允許啓動一個sparkContext。

75、DAG是最高層級的調度,每個job對應一個DAG。

76、RunJob,提交RDD Action 操作,是所有調度執行的入口。

77、sparkContext在初始化時,創建了DAG調度與task調度來負責RDD Action操作的調度執行。

78、任務提交時,不是按Job的先後順序提交的,而是倒序的。

79、僅對依賴類型是shuffle Dependency的RDD操作創建Stage。

80、DAG在調度室,對於在相同節點上進行的Task計算會合併爲一個Stage。

81、各stage之間以shuffle爲分界線。

82、Spark SQL是spark的一個子模塊,專門用於處理結構化數據。

83、Spark SQL的最大優勢是性能非常高。

84、Spark SQL與Apache Hive基本完全兼容。

85、Spark SQL提供領域API,並且提供專門的數據結構抽象DataFrame。

86、Spark SQL支持非常多的數據源:Hive、Avro、Jdbc、Json等,而且統一訪問。

87、Spark SQL兩種使用:

1、SQL引擎

2、API 操作

88、分佈式SQL引擎,兩種運行方式:

1、JDBC/ODBC Server

2、Spark SQL 命令行

89、Spark SQL相關的所有函數,都在SqlContext或它子類中。

90、DataFrame創建:

1、使用反射的方法從RDD創建DataFrame

2、使用程序動態從RDD創建DataFrame

3、從其他數據源生產DataFrame

91、DataFrame支持許多特殊的操作,稱爲領域編程語言或領域API。

92、DataFrame註冊成表,然後使用純SQL來訪問。

93、Parquet是一種大數據計算中最常用的列式存儲格式。

94、數據源類型的名稱一般是全稱。

95、優化是非常重要的環節,需要不斷積累經驗。

96、Catalyst(催化劑)是Spark SQL執行有限優化器的代號,最核心部分。

97、Catalyst最主要的數據結構是樹。

98、所有優化都是基於規則的。

99、Catalyst優化:

1、分析階段

2、邏輯優化階段

3、物理優化階段

4、代碼優化階段

100、Spark的性能基本上與數量大小保持線性關係。

101、Spark Streaming接收實時數據,按日期將數據劃分爲成多批次(Batch),按批次提交個核心計算。

102、Spark Streaming使用的數據抽象是DStream。

103、DStream內部是連續的RDD序列。

104、Sprak Streaming 3種輸入DStream:

1、基本型

2、高級型

3、自定義

105、高級類型的輸入DStream並不是由Spark提供。

106、使用數據源時,要注意可靠性。

107、DStream操作:

1、Transformation操作

2、Output操作類似RDD Action

108、Transform提供直接操作DStream內部RDD的方法。

109、Spark Streaming提供專門的狀態更新方法。

110、設置數據的滑動窗口,將數個原始DStream合併成一個窗口DStream。

111、窗口(Window)通過連個參數確定:1)窗口長度、2)滑動區間。

112、Output操作將DStream結果輸出到外部系統。

113、DStream可以序列化到內存。

114、窗口函數和updateStateBykey默認會自動持久化。

115、網絡按收數據,默認持久化兩個節點上,保證容錯。

116、DStream基礎屬性:

1、依賴的在DStream列表

2、生產RDD的時間

3、Complete計算函數

117、RDD是隻讀的,可重複計算的分佈式數據集。

118、SparkStreaming大部分數據來自網絡。

119、流式計算過程:

輸入數據流>>數據接收>>數據計算>>結果輸出。

120、結果輸出操作本身提供至少一次級別的容錯性能。

121、Spark提供了檢查點功能,用戶定期記錄中間狀態。

122、檢查點是有代價的,需要存儲數據至存儲系統。

123、Spark性能調優兩個方向:

1、每個批次的處理時間儘可能短

2、收到數據後,儘可能快地處理

124、Storm是開源免費的分佈式實時計算系統。

125、Storm的核心數據抽象是tuple,是命名的值列表。

126、Spark Streaming粗粒度,storm更細粒度些。

127、核心數據抽象的不同導致計算模式上的本質卻別。

128、Weblog分析的典型的流式實時應用場景。

129、ZK以Fast Paxos算法爲基礎。

130、ZK在分佈式系統中協作多任務。

131、Hbase是一個通常與Hadoop一起使用的數據庫。

132、Kafka是一個基於發佈-訂閱模型的消息系統。

133、Solr是一個企業級的搜索平臺。

134、ZK不適合用作海量數據存儲。

135、分佈式系統中的進程通信有兩種選擇:直接通過網絡進行信息交換,或讀寫某些共享存儲。

136、ZK使用共享存儲模型來實現應用間的協作和同步原語。

137、網絡通信是分佈式系統中併發設計的基礎。

138、分佈式系統需注意:

1、消息延遲 ——傳輸

2、處理器性能——計算

3、時鐘偏移 ——時鐘

139、數據中心通常使用大量統一的硬件。

140、主-從架構:主節點負責跟蹤從節點狀態和任務的有效性,並分配任務到節點。

141、主-從模式必解決三個關鍵問題:

很多初學者,對大數據的概念都是模糊不清的,大數據是什麼,能做什麼,學的時候,該按照什麼線路去學習,學完往哪方面發展,想深入瞭解,想學習的同學歡迎加入大數據學習qq羣:458345782,有大量乾貨(零基礎以及進階的經典實戰)分享給大家,並且有清華大學畢業的資深大數據講師給大家免費授課,給大家分享目前國內最完整的大數據高端實戰實用學習流程體系

1、主節點崩潰

2、從節點崩潰

3、通信故障

142、ZK因故障出現連個及以上主節點稱爲腦裂(split-brain)。

143、主-從架構的需求:

1、主節點選舉

2、崩潰檢測

3、組成員關係管理

4、元數據管理

144、ZK:Paxos算法和虛擬同步技術。

145、Znode Zookeeper 操作和維護一個小型的數據節點。

146、Znode類型決定了znode節點的行爲方式。

147、Znode節點分持久節點和臨時節點。

148、Znode4中類型:

1、持久化(persist)

2、臨時的

3、持久有序的

4、臨時有序的

149、通知機制是單次觸發的操作。

150、每一個znode都有一個版本號,它隨着每次數據變化而自增。

151、ZK服務器端兩種模式:1)獨立模式、2)仲裁模式。

152、對ZK集合執行請求需要建立會話。

153、會話請求以FIFO順序執行。

154、會話狀態:

1、Connecting

2、Connected

3、Closed

4、Not connected

155、Server兩個端口,第一個用作通訊,第二個用於選舉。

156、ZK的API圍繞ZK的句柄(handle)而構建。

157、爲了從ZK接收通知,我們需要實現監視點(watcher)。

158、監視點和通知形成了一個通用機制。

159、當一個監視點被一個事件觸發時,就會產生一個通知。

160、Redis是一個內存數據庫,基於鍵值對存儲。

161、Redis是REmoteDictionaryServer(遠程字典服務器)簡寫。

162、 Redis支持鍵值數據類型:

1、字符串類型

2、散列類型

3、列表類型

4、集合類型

5、有序集合類型

163、數據在Redis和程序中存儲類似。

164、Redis數據庫中的所有數據都存儲在內存中。

165、Redis可以在一秒中讀寫上十萬個鍵值(普通自己本)。

166、Redis提供數據持久化到硬盤。

167、Redis可用做緩存、隊列系統。

168、Redis可以爲每個鍵設置生存時間,過時自動刪除。

169、Redis可以限定數據佔用的最大內存空間。

170、Redis還支持“發佈/訂閱”的消息模式。

171、Redis支持阻塞式讀取。

172、Kill Redis 進程的PID也可正常退出,Redis有處理。

173、每個數據類型Redis-cli的展現結果都不同。

174、Redis默認支持16個數據庫,以數字命令。

175、Redis不支持自定義數據庫的名字,每個數據庫以編號命名。

176、Redis密碼只有一個。

177、FLUSH ALL 命令清空Redis所有數據。

178、一個Redis最好對應一個程序。

179、Redis 0號數據庫用於生產,1號數據庫用於測試。

180、Select n 切換數據庫。

181、Keys命令需要遍歷Redis中的所有鍵,不建議生產用。

182、Exict key 返回 1/0。

183、Del key返回鍵值個數,不支持通配符。

184、Type命名用來獲取鍵值的數據類型。

185、LPOSH命令的作用是指定列表型鍵中增加一個元素。

186、Redis能存儲任何形式的字符串。

187、Redis INCR命令讓當前鍵值遞增。

188、原子操作取“原子”的“不可拆分”的意思,最下執行單元。

189、Redis數據類型不支持數據類型嵌套。

190、散列類型適合存儲:使用對象類別和ID構成鍵名,使用字段表示對象屬性。

191、Redis不要求每個鍵都依據此結構存儲。

192、Hset命令用來賦值,Hget用於取值。

193、Hset插入返回1,更新返回0。

194、Hset命令用於散列類型,set用於字符串類型。

195、Hmset處理多個字段。

196、HgetAll所有字段和字段值。

197、Hexists用於判斷一字段是否存在。

198、HsetNX key field value 當字段不存在時賦值。

199、Hinrby key field increment 增加數字。

200、Hdel key field 刪除字段。

201、列表類型(List)可以存儲一個有序的字符串列表。

202、列表類型內部是使用雙向鏈表實現的。

203、藉助列表類型,Redis還可以作爲隊列使用。

204、向列表兩端增加元素:

LPUSHKEYVALUE[、、.]

PPUSHKEYVALUE[、、.]

返回長度

205、從列表兩端彈出元素:

LPOPKEY

RPOPKEY

206、獲取列表中元素的個數 llen key。

207、獲取列表中指定值:LREM KEY count value。

208、Redis集合類型內部使用散列表實現的。

209、增加和刪除元素:

Saddkey member [、、.]]

Sremkey member [、、.]]

210、Smembers命令返回集合中所有元素。

211、集合間運算:

1、Sdiff key [key 、、.] ——差集

2、Sinter key [、、、] ——交集

3、Sunion 、、、 ——並集

212、有序集合是Redis最高級的類型。

213、Redis中的事務是一組命令的集合。

214、事務:要麼全執行,要麼全不執行。

215、Redis不支持回滾功能。

216、Watch命令可以監控一個或多個鍵。

217、Redis可以用expire命令設置一個鍵的過期時間。

218、TTL命令查看剩餘時間-2刪除,-1永久。

219、Persist取消過期。

220、Redis可限制最大內存。

221、LRU算法即“最近最少使用”。

222、有序集合常見的使用場景是大數據排序。

223、對有序集合類型排序是會忽略元素的分類。

224、Sort默認按照從下到大排序,用desc逆序。

225、Sort通過alpha參數實現按照字典,順序排序非數字元素。

226、Sort支持limit返回指定參數。

227、參考鍵值相同時,Redis會按照元素本身大小排序。

228、有個N個Get參數,每個元素返回的結果就有N行。

229、Get會返回元素本身的值。

230、Store參數常用來結合expire緩存排序結果。

231、Sort是Redis中最強大最複雜的命令之一。

232、通知的過程可以藉助任務隊列來實現。

233、任務隊列好處:1)鬆耦合,2)易於擴展。

234、當列表中沒有元素BRPOP會一直阻塞住連接。

235、BRPOP命令按收兩個參數鍵名,超時時間,單位秒。

236、如果多個鍵都有元素則從左向右順序取實現優先。

237、發佈者發佈消息的命令是PUBLISH。

238、訂閱頻道的命令是SUBSCRIBE,可用的多個訂閱。

239、進入訂閱狀態後客戶端可能收到了3種類型的恢復。

240、PUSH SCRIBE命令訂閱指定的規則。

241、客戶端和Redis使用TCP協議連接。

242、Redis的底層通信協議對管道提供了支持。

243、精簡鍵名和鍵值是最直觀的減少內存暫用的方式。

244、允許開發者使用LUA語言編寫腳本傳到Redis中執行。

245、LUA腳本好處:1)減少網絡開銷、2)原子操作、3)複用。

246、——eval參數是告訴Redis-clli讀取並運行後面的LUA腳本。

247、LUA號稱性能最高的腳本。

248、LUA腳本很容易和C/C++交互。

249、LUA是一個動態類型語言。

250、表類型是LUA語言中唯一的數據結構。

251、函數在LUA中是一等值。

252、全局變量只有Nil和非Nil的區別。

253、在Redis腳本中不能使用全局變量。

254、聲明局部變量的方法爲local變量。

255、多行註釋:——[[ ]]。

256、LUA支持多重賦值。

257、LUA有5類操作符:

1、數學操作符

2、比較操作符

3、邏輯操作符

4、鏈接操作符

5、取長度操作符

258、LUA if 語句 if .、then .、elseif ..then..else..end。

259、LUA支持while,repeat和for循環語句。

260、For語句中的循環變量是局部變量。

261、LUA約定數組的索引從1開始。

262、Paris是LUA內置的函數,實現類似迭代器的功能。

263、Pairs用來遍歷非數組的表。

264、函數的定義爲:function(參數列表) 函數體 end。

265、…實現可變參數。

266、LUA中return和break用於跳出循環。

267、編寫Redis腳本的目的就是讀寫Redis的數據。

268、LUA腳本使用Redis,call函數調用Redis命令。

269、EVALHA命令允許開發者通過腳本。

270、Script kill命令可以終止當前腳本的運行。

271、Redis支持兩種方式的持久化,一種是RDB方式,另一種是AOF方式。

272、Redis提供了複製(replication)功能,自動同步數據庫。

273、在複製概念中,數據庫分爲兩類:master/slave。

274、Slave of 參數指向主數據庫,進行同步數據。

275、通過複製可以實現讀寫分離,以提高服務器的負載能力。

276、Master用於寫,slave用於讀,適合讀多寫收的場景。

277、哨兵的作用就是監控Redis系統的運行狀態:

1、監控主/從是否正常

2、當出現故障時,從升爲主

278、哨兵是一個獨立的進程。

279、哨兵從獨立進程的方式對一個主從系統進行監控。

280、Redis 3.0版本支持集羣。

281、生產環境運行時不能運行外界直連Redis。

282、Bing 127.0.0.1只運行本機訪問。

283、Redis支持在配置文件中獎命令重命名。

284、如果希望直接禁用某個命令可以將命令重命名成XXX。

285、Redis通信協議是Redis客戶端與Redis間交流的語言。

286、Redis兩種通信協議:

1、二進制安全的統一請求協議

2、telnet程序中輸入的簡單協議

287、哨兵提供了命令可以通過主數據庫的名字獲取當前系統的主數據庫的地址和端口號。

288、一個哨兵可以同時監控多個Redis主從系統。

289、多個哨兵也可以同時監控同一個Redis主從系統。

290、MapReduce兩階段:Map階段和Reduce階段。

291、每個階段都以鍵值對作爲輸入和輸出。

292、Map階段的輸入時NCDN原始數據。

293、鍵是相對穩健起始位置的偏移量。

294、Mapper類是一個泛型,四個參數:

1、輸入鍵

2、輸入值

3、輸出鍵

4、輸出值

295、Hadoop本身提供了一套可優化網絡序列化傳輸的基本類型:

LongWritable 相對於 Java 的Long

Text 相對於String

IntWritable相對於Integer

296、Map()方法提供了context實例用於輸出內容的寫入。

297、Job對象指定作業執行規範。

298、構造Job對象後,需要指定輸入和輸出數據的路徑。

299、在調試MapReduce作業時,知道作業ID和任務ID是非常有用的。

300、虛類相對接口更有利於擴展。

301、MapReduce作業(Job)是客戶端要執行的一個工作單元:它包括輸入數據,MapReduce程序和配置信息。

302、Hadoop將作業分成若干個小任務(Task)來執行,器中包括兩類任務:Map和Reduce。

303、作業(Job)由一個Jobtracker及一系列tasktracker控制執行過程。

304、Hadoop將MapReduce的輸入數據劃分成等長的小數據塊稱爲“切片”。

305、Hadoop爲每一個切片構建一個map任務。

306、切片越細,負載平衡越好。

307、HDFS的塊大小默認是64MB。

308、數據本地化優化——輸入數據在本地節點運行map。

309、數據通過網絡傳輸到map任務節點,效率明顯降低。

310、Map任務將其輸出寫入本地硬盤,而非HDFS,因爲map的輸出是中間結果,Job完成自動刪除。

311、單個reduce任務的輸入通常來自於所有map的輸出。

312、每個reduce任務的輸入來自多個mao任務,所以中間過程稱爲shuffle(混洗)。

313、Shuffle對總執行時間的影響非常大。

314、集羣上的可用帶寬限制了MapReduce作業的數量。

315、Hadoop允許用戶針對map任務的輸出指定一個combiner。

316、Combiner的規則制約值可用的函數類型。

317、Combiner是通過Reducer類來定義的。

318、Hadoop Streaming 使用Unix標準流作爲Hadoop和應用程序之間的接口。

319、Streaming天生適合用於文件處理。

320、HDFS以流式數據訪問模式來存儲超大文件。

321、一次寫入,多次讀取是高效的訪問模式。

322、HDFS中的文件可能只有一個writer。

323、HDFS的塊大,目的爲最小化尋址開銷。

324、HDFS集羣有兩類節點:管理者-工作者模式運行。

325、Namenode管理文件系統的命名空間。

326、客戶端代表用戶通過與namenode和datanode交互。

327、Datanode是文件系統的工作節點。

328、在聯邦環境下每個namenode維護一個命名空間卷。

329、HDFS的權限模式與POSIX非常相似。

330、用戶空間文件系統允許整合式一個Unix系統。

331、從Hadoop文件系統讀取文件,最簡單使用Java.net.url。

332、Filesystem是一個通用的文件系統API。

333、Seek()方法是一個相對高開銷的操作,需要慎重使用。

334、Filestatus封裝了文件系統中文件和目錄的元數據。

335、Hadoop通配符與Unix bach的相同。

336、Hadoop無法自行定義網絡拓撲結構。

337、文件系統的一致模型描述了文件讀/寫的數據可見性。

338、HDFS提供了一個方法來使所有緩存與數據節點強行同步。

339、HDFS中關閉文件其實還隱含執行syn()方法。

340、Flume是一個將大規模數據導入HDFS的工具——典型應用從另外一個系統收集日誌數據。

341、Flume提供了不同數據級別的數據投遞可靠性。

342、Sqoop是將數據從結構化存儲批量導入HDFS。——數據庫。

343、Distcp是作爲一個MapReduce作業來實現的。

344、每個文件均按塊方式存儲,每個塊的元數據存儲在namenode的內存中。

345、Hadoop存儲小文件效率非常低。

346、Hadoop存檔文件可以使用MapReduce的輸入。

347、Hadoop自帶一套原子操作用於數據I/O操作。

348、HDFS會對寫入的存儲數據計算校驗和,並在讀取數據時驗證校驗和。

349、Datanode負責在收到數據後存儲該數據及其驗證校驗和。

350、客戶端成功驗證一個數據塊後,datanode更新日誌。

351、Datanode定期驗證所有數據塊。

352、Hadoop的LocalFile Systen執行客戶端的校驗和驗證。

353、校驗的計算代價是相當低的。

354、LocalFileSystem通過checksumFileSystem來完成自己的任務。

355、文件壓縮兩大好處:存儲和傳輸。

356、序列化兩大領域常見:進程間通信和存儲。

357、Writable兩個方法:dataoutput/datainput。

358、RawComParator允許其實現直接比較數據流中的記錄。

359、Writable類對java基本類型提供封裝。

360、Text是針對URT-8序列的writable類。

361、Text類的find()方法返回字節偏移量。

362、多數情況下需要將Text對象換成String對象。

363、BytesWritable是對二進制數據數組的封裝。

364、NullWritable是writable的特殊類型,序列化長度爲0.

365、Nulwritable不讀也不寫,只當佔位符。

366、NullWritable可以用作在SequenceFile中的鍵。

367、ObjectWritable是對Java基本類型的一個通用封裝。

368、由於writable是MapReduce數據路徑的核心,所有調整二進制表示對性能產生顯著效果。

369、適當重寫一個類,會更加適應我們的需求。

370、IDL——接口定義語言。

371、Avro是一個獨立於編程語言的數據序列化系統。

372、Avro模式通常用於Json來寫,數據通常採用二進制格式來編碼。

373、Avro爲序列化和反序列化提供了API。

374、Avro數據文件時可切分的,適合MapReduce快速處理。

375、Avro語言互相操作性。

376、Avro定義了對象的排列順序。

377、Hadoop配置後添加的資源文件屬性會覆蓋之前定義的屬性。

378、MRUnit是一個測試庫。

379、測試驅動程序:

1、使用本地作業運行器

2、使用一個mini集羣來運行它

380、Mini集羣廣泛應用於Hadoop自帶的自動測試包中。

381、Hadoop_CLASSPATH是一項客戶端的設置。

382、爲了啓動作業,我們需要運行驅動程序。

383、Job上的waitforCompletion()方法啓動作業並檢查進展情況。

384、作業ID的格式包含兩部分:

1、Jobtracker開始時間

2、唯一標識增量計數器

385、任務屬於作業,任務ID通過替換作業ID的作業前綴爲任務前綴,然後加上一個後綴表示哪個作業類的任務。

386、Hadoop的web界面用來瀏覽作業信息。

387、作業歷史包括已完成作業的時間和配置信息。

388、每個reducer產生一個輸出文件。

389、最經典的調試方法,打印語句來調試程序。

390、任務頁面包括一些看作業總任務細節的鏈接。

391、針對不同用戶,Hadoop在不同的地方生產日誌。

392、Hadoop允許分析作業中的一部分任務。

393、Jobcontrol的實例表示一個作業的運行圖。

394、Ooize中,工作流是一個有動作節點和控制節點組成的DAG。

395、每個工作都必須有一個start節點和一個end節點。

396、Oozie提供了一組與工作流交互的函數。

397、工作流應用由工作流定義和所有運行所需的資源。

398、運行MapReduce作業:

1、Job對象上的submit()

2、Waitforcompletion()

399、客戶端,提交MapReduce作業。

400、Jobtracker,運行作業劃分後的任務。

401、Jobsummiter作業提交過程:

1、箱Jobtracker請求一個新的作業ID

2、檢查作業的輸出說明

3、計算作業的輸入分片

4、將運行作業所需的資源複製到Jobtracker文件系統中。

5、告知Jobtracker作業,準備執行。

402、心跳 向Jobtracker表明tasktracker是否還存活。

403、MapReduce 1 :

1、作業的提交

2、作業的初始化

3、任務的分配

4、任務的執行

5、進度和狀態的更新

6、作業完成

404、YARN (Yet Another Resource Negotiator)。

405、YARN將Jobtracker的職能劃分爲多個獨立的實體。

406、YARN將兩種角色劃分爲兩個獨立的守護進程:

1、資源管理器

2、應用管理器

407、YARN設計的精妙之處在於不同的YARN應用可以在同一個集羣共存。

408、MapReduce確保每個reducer的輸入都是按鍵排序的。

409、系統執行排序的過程稱爲shuffle。

410、Shuffle屬於不斷被優化和改進的代碼的一部分。

411、Shuffle是MapReduce的“心臟”是奇蹟發生的地方。

412、每個map任務都有一個環形內存緩衝區用於存儲任務的輸出。

413、Hadoop設置作業配置參數作爲streaming程序的環境變量。

414、MapReduce模型將作業分解成任務,然而並行地運行任務。

415、Hadoop MapReduce 使用一個提交協議來確保作業和任務都完成功或失敗。

416、Hadoop在他們自己的Java虛擬機上運行任務,以區別其他正在運行的任務。

417、計數器是收集作業統計信息的有效手段之一。

418、Hadoop爲每個作業維護若干內置計數器,以描述多項指標。

419、任務計數器由其任務維護,並定期發送給tasktracker再有tasktracker發送給Jobtracker。

420、作業計數器由Jobtracker維護。

421、計數器由一個java枚舉(enum)類型來定義。

422、計數器是全局的。

423、排序是MapReduce的核心技術。

424、MapReduce能夠執行大型數據集鍵的“鏈接”操作。

425、“邊數據”是作業所需的額外的只讀數據。

426、RAID —— 磁盤陣列

427、HDFS無需使用RAID的冗餘機制。

428、Hadoop部分代碼需在Unix環境下執行。

429、Namenode和Jobtracker最好分別放在不同機器中。

430、Hadoop集羣架構通常包含兩級網絡拓撲。

431、爲了達到Hadoop的最佳性能,配置Hadoop系統以讓其瞭解網絡拓撲狀況舊極爲關鍵。

432、HDFS和MapReduce可安裝同一系統的不同位置。

433、Hadoop控制腳本依賴SSH來執行鍼對整個集羣的操作。

434、集羣的每個Hadoop節點都各自保存一系列配置文件。

435、Hadoop也支持爲所有master和worker機器採用同一套配置文件。

436、爲每一機器類維護單獨的配置文件。

437、同步所有機器上的配置文件極具挑戰性。

438、Hadoop內置一些腳本來運行指令,在集羣內啓動和終止守護進程。

439、MapReduce控制腳本不使用masters文件。

440、Namenode在內存中保存整個命名空間中的所有文件元數據和塊元數據。

441、Hadoop爲各個守護進程分配1GB內存。

442、在一個tasktracker上能夠同時運行的任務數取決於一臺機器有多少個處理器。

443、Hadoop守護進程一般同時運行RPC和HTTP兩個服務器。

444、各個datanode運行TCP/IP服務器以支持塊傳輸。

445、YARN是運行MapReduce的下一代架構。

446、YARN有一個作業歷史服務器和一個web應用程序代理服務器。

447、YARN更加精細化管理內存。

448、YARN守護進程運行一個或多個RPC和HTTP服務。

449、Kerberos獲取服務:

1、認證

2、授權

3、服務請求

450、Hadoop使用委託令牌來支持後續認證訪問。

451、Whirr使用SSH與雲端的機器通信。

452、Pig爲大型數據集的處理提供了更高層的抽象。

453、Pig提供了一套更強大的數據變換操作。

454、Pig Latin程序由一系列的操作式變換組成。

455、Pig是一種探索大規模數據集的腳本語言。

456、MapReduce的一個缺點是開發週期太長。

457、Pig提供了多個命令來檢查和處理程序中已有的數據結構。

458、Pig被設計爲可擴展的,處理路徑中幾乎每個部分都可以定製。

459、Pig是作爲一個客戶端應用程序運行的。

460、Pig兩種模式:本地和MapReduce。

461、Grunt是與Pig進行交互的外殼程序(shell)。

462、在MapReduce模式下,Pig翻譯成MapReduce作業。

463、Pig發佈版本只和特定的Hadoop版本對應。

464、三種執行Pig程序方法:

1、腳本

2、Grunt

3、嵌入式方法

465、創建一個精簡的數據集是一門藝術。

466、Pig Latin是一種數據流編程語言,而SQL是一種聲明式編程語言。

467、一個Pig Latin程序由一組語句構成。

468、Pig Latin並美歐正式的語言定義。

469、在Pig Latin程序執行時,每個命令按次序進行解析。

470、Hive是一個構建在Hadoop上的數據倉庫框架。

471、Hive一般在工作站上運行。

472、Hive把數據組織爲表。

473、元數據(如表模式)存儲在metastore數據庫中。

474、Hive外殼環境是我們交互的主要方式。

475、HiveQL是Hive的查詢語言。

476、Hive操作表而Pig直接操作數據集。

477、HiveQL大小寫不敏感。

478、用-e選項在行嵌入命令,不用加分號。

479、在Hive的倉庫目錄中,表存儲爲目錄。

480、Metastore包含兩部分:服務和後臺數據的存儲。

481、對於獨立的metastore,mysql是一種很受歡迎的選擇。

482、Hive把表組織成“分區”。

483、桶爲表加上了額外的結構。

484、每個桶就是表(分式)目錄裏的一個文件。

485、Hive從兩個維度對錶的存儲進行管理:行格式和文件格式。

486、視圖是一種用select語句定義的“虛表”。

487、Hbase是一個在HDFS上開發的面向列的分佈式數據庫。

488、數據模型:

1、應用把數據存放在帶標籤的表中

2、表中行的鍵也是字節數組

3、行中的列被分成“列族”

4、一個表的列族必須預先給出

5、所有列族成員都一起存放在文件系統中。

489、HBase自動把表水平分成“區域”,每個區域由表中行的子集構成。

490、HBase依賴於Zookeeper。

491、HBase通過Hadoop文件系統API來持久化存儲數據。

492、HBase有Java開發。

493、Hbase是一個分佈式的,面向列的數據存儲系統。

494、HBase有一個高效的批量加載工具。

495、Sqoop將結構化存儲器抽取到Hadoop中。

496、Sqoop有java開發。

497、Hive不支持事務。

498、Hive是最適合數據倉庫應用程序的。

499、Hive和Mysql提供的SQL方言最接近。

500、Map操作會將集合中的元素從一種形式轉換成另一種形式。

很多初學者,對大數據的概念都是模糊不清的,大數據是什麼,能做什麼,學的時候,該按照什麼線路去學習,學完往哪方面發展,想深入瞭解,想學習的同學歡迎加入大數據學習qq羣:458345782,有大量乾貨(零基礎以及進階的經典實戰)分享給大家,並且有清華大學畢業的資深大數據講師給大家免費授課,給大家分享目前國內最完整的大數據高端實戰實用學習流程體系

小禮物走一走,來簡書關注我
96 正在簡書上學習
2018.11.08 09:23 字數 10919 閱讀 0評論 0喜歡 0
編輯文章

1、Zookeeper用於集羣主備切換。

2、YARN讓集羣具備更好的擴展性。

3、Spark沒有存儲能力。

4、Spark的Master負責集羣的資源管理,Slave用於執行計算任務。

5、Hadoop從2.x開始,把存儲和計算分離開來,形成兩個相對獨立的子集羣:HDFS和YARN,MapReduce依附於YARN來運行。

6、YARN可以爲符合YARN編程接口需求的集羣提供調度服務。

7、YARN:

很多初學者,對大數據的概念都是模糊不清的,大數據是什麼,能做什麼,學的時候,該按照什麼線路去學習,學完往哪方面發展,想深入瞭解,想學習的同學歡迎加入大數據學習qq羣:458345782,有大量乾貨(零基礎以及進階的經典實戰)分享給大家,並且有清華大學畢業的資深大數據講師給大家免費授課,給大家分享目前國內最完整的大數據高端實戰實用學習流程體系

ResourceManager 一主多備

NodeManager 一般與DataNode部署在一起。

8、單機硬件配置會嚴重影響集羣的性能。

9、初始化集羣機器環境:創建賬號、安裝JDK、設置時間同步。

10、Zookeeper的部署最簡單,其節點數必爲奇數。

11、ZK兩個端口,前者是鏈接Leader後者是用於競選。

12、部署Spark StandLone集羣:

1、SSH無密碼登錄

2、複製解壓Spark

3、編寫配置文件分發到所有節點

13、Hadoop2.x以上支持雙機熱備。

14、Standlone模式只支持簡單的固定資源分配策略。

15、YARN統一爲集羣上的所有計算負載分配資源,可以避免資源分配的混亂無序。

16、Spark程序由Master還是YARN來調度執行,是由Spark程序在提交時決定的。

17、YARN兩種調度模式:

Yarn-cluster 模式,用於生產

Yarn-client 模式,用於交互

18、Spark計算都是圍繞RDD進行的。

19、Spark在運行時,一般RDD操作會爲每個RDD分區運行一個job。

20、Job最簡單的理解,它對應一個java線程。

21、Spark所有基於文件的生產RDD方法,都支持目錄、壓縮文件和通配符。

22、RDD是Spark的核心抽象,所有計算都圍繞RDD進行。

23、RDD操作分爲兩類:

Transformation 轉換

Action 動作

24、所有Transformation都是Lazy模式,先記錄計算方式,Driver返回結果時開始計算。

25、RDD的Transformation實際計算只在Action返回結果時才進行,或者持久化。

26、Spark嚴重依賴傳遞函數類型的參數。

27、從Driver分發各個節點過程:

Job執行:

1、在Driver節點上序列化代碼

2、傳送至各個計算節點

3、在計算節點上反序列化

4、執行

28、Scala function支持序列化。

29、Spark的核心是RDD,而RDD是分佈式計算的。

30、Spark會將Job運行所有依賴的變量、方法、(閉包)全部打包在一起序列化。

31、RDD操作的禁忌,不能嵌套調用。

32、Action操作輸出不再是RDD,返回值Driver程序。

33、Spark集羣上的資源主要是CPU core數量和物理內存。

34、在程序運行時,每個core對應一個線程。

35、Standlone模式下由Spark集羣中的master節點進行資源調度。

36、Spark調度兩類:

1、spark程序見的調度(主)

2、spark程序內部的調度

37、用戶編寫的spark程序稱爲Driver程序。

38、每個驅動程序都有一個SparkContext對象,擔負着與集羣溝通的職責。

39、集羣管理器負責集羣的資源調度。

40、執行器,每個spark程序在每個節點上啓動的一個進程。

41、一次RDD Action對應一次job。

42、Stage,job在執行過程中被分爲多個階段。

43、Task,在執行器上執行的最小單位。

44、Spark程序間的調度:

靜態分配 (主)

動態分配

45、所有集羣管理器都支持靜態資源分配。

46、當spark爲多用戶服務時,需要配置spark程序內部的調度。

47、不同線程提交的job可以並行執行。

48、默認spark的調度器以FIFO方式運行Job。

49、公平調度還支持對多個Job進行分組,分組稱爲調度池。

50、Spark性能優勢,很大一部分原因是內存和緩存。

51、RDD持久化可以多次利用,性能提高10倍以上。

52、Spark提供兩類共享變量——廣播變量和計數器。

53、廣播變量是一個只讀變量,在所有節點上都是一份緩存。

54、計數器只能增加,用於技術和求和。

55、容錯機制是分佈式系統的一個重要能力。

56、DAG:有向無環圖的計算任務集合。

57、分佈式系統經常需要做檢查點。

58、RDD也是一個DAG,每一個RDD都會記住創建該數據需要哪些操作——血統。

59、RDD依賴:

窄依賴 —— 父分區對應一個子分區

寬依賴 —— 父分區對應多個子分區

60、Spark提供了預寫日誌(journal),先將數據寫入支持容錯的文件系統中。

61、Spark master容錯:

Standalone ——Zookeeper

單點 ——本地重啓

62、Slave節點失效:

1、Work異常停止

2、執行器異常停止

3、Driver異常退出

63、監控管理:

1、Web界面

2、Metrics

3、外部系統

64、Web界面:

1、調度器stage,Task列表

2、RDD大小和內存文件統計情況

3、環境信息

4、正在執行的執行器信息

65、Standlone模式的集羣管理器有自己的web界面。

66、Web界面表格的頭部都支持點擊排序。

67、Spark程序一般都是由腳本bin/spark-submit來提交的。

68、RDD特點:

1、RDD是隻讀的

2、RDD可指定緩存在內存中

3、RDD可以通過重新計算得到

69、RDD核心屬性:

1、一個分區列表

2、一個依賴列表

3、一個名爲compute的計算函數

4、分區器

5、計算各分區是優先的位置列表

70、Action不可以在RDD Tranformation內部調用。

71、Transformation只是建立在計算關係,而action纔是實際的執行者——觸發者

72、Spark.local.dir用於shuffle。

73、SparkContext是spark程序最主要的入口。

74、每個jvm只允許啓動一個sparkContext。

75、DAG是最高層級的調度,每個job對應一個DAG。

76、RunJob,提交RDD Action 操作,是所有調度執行的入口。

77、sparkContext在初始化時,創建了DAG調度與task調度來負責RDD Action操作的調度執行。

78、任務提交時,不是按Job的先後順序提交的,而是倒序的。

79、僅對依賴類型是shuffle Dependency的RDD操作創建Stage。

80、DAG在調度室,對於在相同節點上進行的Task計算會合併爲一個Stage。

81、各stage之間以shuffle爲分界線。

82、Spark SQL是spark的一個子模塊,專門用於處理結構化數據。

83、Spark SQL的最大優勢是性能非常高。

84、Spark SQL與Apache Hive基本完全兼容。

85、Spark SQL提供領域API,並且提供專門的數據結構抽象DataFrame。

86、Spark SQL支持非常多的數據源:Hive、Avro、Jdbc、Json等,而且統一訪問。

87、Spark SQL兩種使用:

1、SQL引擎

2、API 操作

88、分佈式SQL引擎,兩種運行方式:

1、JDBC/ODBC Server

2、Spark SQL 命令行

89、Spark SQL相關的所有函數,都在SqlContext或它子類中。

90、DataFrame創建:

1、使用反射的方法從RDD創建DataFrame

2、使用程序動態從RDD創建DataFrame

3、從其他數據源生產DataFrame

91、DataFrame支持許多特殊的操作,稱爲領域編程語言或領域API。

92、DataFrame註冊成表,然後使用純SQL來訪問。

93、Parquet是一種大數據計算中最常用的列式存儲格式。

94、數據源類型的名稱一般是全稱。

95、優化是非常重要的環節,需要不斷積累經驗。

96、Catalyst(催化劑)是Spark SQL執行有限優化器的代號,最核心部分。

97、Catalyst最主要的數據結構是樹。

98、所有優化都是基於規則的。

99、Catalyst優化:

1、分析階段

2、邏輯優化階段

3、物理優化階段

4、代碼優化階段

100、Spark的性能基本上與數量大小保持線性關係。

101、Spark Streaming接收實時數據,按日期將數據劃分爲成多批次(Batch),按批次提交個核心計算。

102、Spark Streaming使用的數據抽象是DStream。

103、DStream內部是連續的RDD序列。

104、Sprak Streaming 3種輸入DStream:

1、基本型

2、高級型

3、自定義

105、高級類型的輸入DStream並不是由Spark提供。

106、使用數據源時,要注意可靠性。

107、DStream操作:

1、Transformation操作

2、Output操作類似RDD Action

108、Transform提供直接操作DStream內部RDD的方法。

109、Spark Streaming提供專門的狀態更新方法。

110、設置數據的滑動窗口,將數個原始DStream合併成一個窗口DStream。

111、窗口(Window)通過連個參數確定:1)窗口長度、2)滑動區間。

112、Output操作將DStream結果輸出到外部系統。

113、DStream可以序列化到內存。

114、窗口函數和updateStateBykey默認會自動持久化。

115、網絡按收數據,默認持久化兩個節點上,保證容錯。

116、DStream基礎屬性:

1、依賴的在DStream列表

2、生產RDD的時間

3、Complete計算函數

117、RDD是隻讀的,可重複計算的分佈式數據集。

118、SparkStreaming大部分數據來自網絡。

119、流式計算過程:

輸入數據流>>數據接收>>數據計算>>結果輸出。

120、結果輸出操作本身提供至少一次級別的容錯性能。

121、Spark提供了檢查點功能,用戶定期記錄中間狀態。

122、檢查點是有代價的,需要存儲數據至存儲系統。

123、Spark性能調優兩個方向:

1、每個批次的處理時間儘可能短

2、收到數據後,儘可能快地處理

124、Storm是開源免費的分佈式實時計算系統。

125、Storm的核心數據抽象是tuple,是命名的值列表。

126、Spark Streaming粗粒度,storm更細粒度些。

127、核心數據抽象的不同導致計算模式上的本質卻別。

128、Weblog分析的典型的流式實時應用場景。

129、ZK以Fast Paxos算法爲基礎。

130、ZK在分佈式系統中協作多任務。

131、Hbase是一個通常與Hadoop一起使用的數據庫。

132、Kafka是一個基於發佈-訂閱模型的消息系統。

133、Solr是一個企業級的搜索平臺。

134、ZK不適合用作海量數據存儲。

135、分佈式系統中的進程通信有兩種選擇:直接通過網絡進行信息交換,或讀寫某些共享存儲。

136、ZK使用共享存儲模型來實現應用間的協作和同步原語。

137、網絡通信是分佈式系統中併發設計的基礎。

138、分佈式系統需注意:

1、消息延遲 ——傳輸

2、處理器性能——計算

3、時鐘偏移 ——時鐘

139、數據中心通常使用大量統一的硬件。

140、主-從架構:主節點負責跟蹤從節點狀態和任務的有效性,並分配任務到節點。

141、主-從模式必解決三個關鍵問題:

很多初學者,對大數據的概念都是模糊不清的,大數據是什麼,能做什麼,學的時候,該按照什麼線路去學習,學完往哪方面發展,想深入瞭解,想學習的同學歡迎加入大數據學習qq羣:458345782,有大量乾貨(零基礎以及進階的經典實戰)分享給大家,並且有清華大學畢業的資深大數據講師給大家免費授課,給大家分享目前國內最完整的大數據高端實戰實用學習流程體系

1、主節點崩潰

2、從節點崩潰

3、通信故障

142、ZK因故障出現連個及以上主節點稱爲腦裂(split-brain)。

143、主-從架構的需求:

1、主節點選舉

2、崩潰檢測

3、組成員關係管理

4、元數據管理

144、ZK:Paxos算法和虛擬同步技術。

145、Znode Zookeeper 操作和維護一個小型的數據節點。

146、Znode類型決定了znode節點的行爲方式。

147、Znode節點分持久節點和臨時節點。

148、Znode4中類型:

1、持久化(persist)

2、臨時的

3、持久有序的

4、臨時有序的

149、通知機制是單次觸發的操作。

150、每一個znode都有一個版本號,它隨着每次數據變化而自增。

151、ZK服務器端兩種模式:1)獨立模式、2)仲裁模式。

152、對ZK集合執行請求需要建立會話。

153、會話請求以FIFO順序執行。

154、會話狀態:

1、Connecting

2、Connected

3、Closed

4、Not connected

155、Server兩個端口,第一個用作通訊,第二個用於選舉。

156、ZK的API圍繞ZK的句柄(handle)而構建。

157、爲了從ZK接收通知,我們需要實現監視點(watcher)。

158、監視點和通知形成了一個通用機制。

159、當一個監視點被一個事件觸發時,就會產生一個通知。

160、Redis是一個內存數據庫,基於鍵值對存儲。

161、Redis是REmoteDictionaryServer(遠程字典服務器)簡寫。

162、 Redis支持鍵值數據類型:

1、字符串類型

2、散列類型

3、列表類型

4、集合類型

5、有序集合類型

163、數據在Redis和程序中存儲類似。

164、Redis數據庫中的所有數據都存儲在內存中。

165、Redis可以在一秒中讀寫上十萬個鍵值(普通自己本)。

166、Redis提供數據持久化到硬盤。

167、Redis可用做緩存、隊列系統。

168、Redis可以爲每個鍵設置生存時間,過時自動刪除。

169、Redis可以限定數據佔用的最大內存空間。

170、Redis還支持“發佈/訂閱”的消息模式。

171、Redis支持阻塞式讀取。

172、Kill Redis 進程的PID也可正常退出,Redis有處理。

173、每個數據類型Redis-cli的展現結果都不同。

174、Redis默認支持16個數據庫,以數字命令。

175、Redis不支持自定義數據庫的名字,每個數據庫以編號命名。

176、Redis密碼只有一個。

177、FLUSH ALL 命令清空Redis所有數據。

178、一個Redis最好對應一個程序。

179、Redis 0號數據庫用於生產,1號數據庫用於測試。

180、Select n 切換數據庫。

181、Keys命令需要遍歷Redis中的所有鍵,不建議生產用。

182、Exict key 返回 1/0。

183、Del key返回鍵值個數,不支持通配符。

184、Type命名用來獲取鍵值的數據類型。

185、LPOSH命令的作用是指定列表型鍵中增加一個元素。

186、Redis能存儲任何形式的字符串。

187、Redis INCR命令讓當前鍵值遞增。

188、原子操作取“原子”的“不可拆分”的意思,最下執行單元。

189、Redis數據類型不支持數據類型嵌套。

190、散列類型適合存儲:使用對象類別和ID構成鍵名,使用字段表示對象屬性。

191、Redis不要求每個鍵都依據此結構存儲。

192、Hset命令用來賦值,Hget用於取值。

193、Hset插入返回1,更新返回0。

194、Hset命令用於散列類型,set用於字符串類型。

195、Hmset處理多個字段。

196、HgetAll所有字段和字段值。

197、Hexists用於判斷一字段是否存在。

198、HsetNX key field value 當字段不存在時賦值。

199、Hinrby key field increment 增加數字。

200、Hdel key field 刪除字段。

201、列表類型(List)可以存儲一個有序的字符串列表。

202、列表類型內部是使用雙向鏈表實現的。

203、藉助列表類型,Redis還可以作爲隊列使用。

204、向列表兩端增加元素:

LPUSHKEYVALUE[、、.]

PPUSHKEYVALUE[、、.]

返回長度

205、從列表兩端彈出元素:

LPOPKEY

RPOPKEY

206、獲取列表中元素的個數 llen key。

207、獲取列表中指定值:LREM KEY count value。

208、Redis集合類型內部使用散列表實現的。

209、增加和刪除元素:

Saddkey member [、、.]]

Sremkey member [、、.]]

210、Smembers命令返回集合中所有元素。

211、集合間運算:

1、Sdiff key [key 、、.] ——差集

2、Sinter key [、、、] ——交集

3、Sunion 、、、 ——並集

212、有序集合是Redis最高級的類型。

213、Redis中的事務是一組命令的集合。

214、事務:要麼全執行,要麼全不執行。

215、Redis不支持回滾功能。

216、Watch命令可以監控一個或多個鍵。

217、Redis可以用expire命令設置一個鍵的過期時間。

218、TTL命令查看剩餘時間-2刪除,-1永久。

219、Persist取消過期。

220、Redis可限制最大內存。

221、LRU算法即“最近最少使用”。

222、有序集合常見的使用場景是大數據排序。

223、對有序集合類型排序是會忽略元素的分類。

224、Sort默認按照從下到大排序,用desc逆序。

225、Sort通過alpha參數實現按照字典,順序排序非數字元素。

226、Sort支持limit返回指定參數。

227、參考鍵值相同時,Redis會按照元素本身大小排序。

228、有個N個Get參數,每個元素返回的結果就有N行。

229、Get會返回元素本身的值。

230、Store參數常用來結合expire緩存排序結果。

231、Sort是Redis中最強大最複雜的命令之一。

232、通知的過程可以藉助任務隊列來實現。

233、任務隊列好處:1)鬆耦合,2)易於擴展。

234、當列表中沒有元素BRPOP會一直阻塞住連接。

235、BRPOP命令按收兩個參數鍵名,超時時間,單位秒。

236、如果多個鍵都有元素則從左向右順序取實現優先。

237、發佈者發佈消息的命令是PUBLISH。

238、訂閱頻道的命令是SUBSCRIBE,可用的多個訂閱。

239、進入訂閱狀態後客戶端可能收到了3種類型的恢復。

240、PUSH SCRIBE命令訂閱指定的規則。

241、客戶端和Redis使用TCP協議連接。

242、Redis的底層通信協議對管道提供了支持。

243、精簡鍵名和鍵值是最直觀的減少內存暫用的方式。

244、允許開發者使用LUA語言編寫腳本傳到Redis中執行。

245、LUA腳本好處:1)減少網絡開銷、2)原子操作、3)複用。

246、——eval參數是告訴Redis-clli讀取並運行後面的LUA腳本。

247、LUA號稱性能最高的腳本。

248、LUA腳本很容易和C/C++交互。

249、LUA是一個動態類型語言。

250、表類型是LUA語言中唯一的數據結構。

251、函數在LUA中是一等值。

252、全局變量只有Nil和非Nil的區別。

253、在Redis腳本中不能使用全局變量。

254、聲明局部變量的方法爲local變量。

255、多行註釋:——[[ ]]。

256、LUA支持多重賦值。

257、LUA有5類操作符:

1、數學操作符

2、比較操作符

3、邏輯操作符

4、鏈接操作符

5、取長度操作符

258、LUA if 語句 if .、then .、elseif ..then..else..end。

259、LUA支持while,repeat和for循環語句。

260、For語句中的循環變量是局部變量。

261、LUA約定數組的索引從1開始。

262、Paris是LUA內置的函數,實現類似迭代器的功能。

263、Pairs用來遍歷非數組的表。

264、函數的定義爲:function(參數列表) 函數體 end。

265、…實現可變參數。

266、LUA中return和break用於跳出循環。

267、編寫Redis腳本的目的就是讀寫Redis的數據。

268、LUA腳本使用Redis,call函數調用Redis命令。

269、EVALHA命令允許開發者通過腳本。

270、Script kill命令可以終止當前腳本的運行。

271、Redis支持兩種方式的持久化,一種是RDB方式,另一種是AOF方式。

272、Redis提供了複製(replication)功能,自動同步數據庫。

273、在複製概念中,數據庫分爲兩類:master/slave。

274、Slave of 參數指向主數據庫,進行同步數據。

275、通過複製可以實現讀寫分離,以提高服務器的負載能力。

276、Master用於寫,slave用於讀,適合讀多寫收的場景。

277、哨兵的作用就是監控Redis系統的運行狀態:

1、監控主/從是否正常

2、當出現故障時,從升爲主

278、哨兵是一個獨立的進程。

279、哨兵從獨立進程的方式對一個主從系統進行監控。

280、Redis 3.0版本支持集羣。

281、生產環境運行時不能運行外界直連Redis。

282、Bing 127.0.0.1只運行本機訪問。

283、Redis支持在配置文件中獎命令重命名。

284、如果希望直接禁用某個命令可以將命令重命名成XXX。

285、Redis通信協議是Redis客戶端與Redis間交流的語言。

286、Redis兩種通信協議:

1、二進制安全的統一請求協議

2、telnet程序中輸入的簡單協議

287、哨兵提供了命令可以通過主數據庫的名字獲取當前系統的主數據庫的地址和端口號。

288、一個哨兵可以同時監控多個Redis主從系統。

289、多個哨兵也可以同時監控同一個Redis主從系統。

290、MapReduce兩階段:Map階段和Reduce階段。

291、每個階段都以鍵值對作爲輸入和輸出。

292、Map階段的輸入時NCDN原始數據。

293、鍵是相對穩健起始位置的偏移量。

294、Mapper類是一個泛型,四個參數:

1、輸入鍵

2、輸入值

3、輸出鍵

4、輸出值

295、Hadoop本身提供了一套可優化網絡序列化傳輸的基本類型:

LongWritable 相對於 Java 的Long

Text 相對於String

IntWritable相對於Integer

296、Map()方法提供了context實例用於輸出內容的寫入。

297、Job對象指定作業執行規範。

298、構造Job對象後,需要指定輸入和輸出數據的路徑。

299、在調試MapReduce作業時,知道作業ID和任務ID是非常有用的。

300、虛類相對接口更有利於擴展。

301、MapReduce作業(Job)是客戶端要執行的一個工作單元:它包括輸入數據,MapReduce程序和配置信息。

302、Hadoop將作業分成若干個小任務(Task)來執行,器中包括兩類任務:Map和Reduce。

303、作業(Job)由一個Jobtracker及一系列tasktracker控制執行過程。

304、Hadoop將MapReduce的輸入數據劃分成等長的小數據塊稱爲“切片”。

305、Hadoop爲每一個切片構建一個map任務。

306、切片越細,負載平衡越好。

307、HDFS的塊大小默認是64MB。

308、數據本地化優化——輸入數據在本地節點運行map。

309、數據通過網絡傳輸到map任務節點,效率明顯降低。

310、Map任務將其輸出寫入本地硬盤,而非HDFS,因爲map的輸出是中間結果,Job完成自動刪除。

311、單個reduce任務的輸入通常來自於所有map的輸出。

312、每個reduce任務的輸入來自多個mao任務,所以中間過程稱爲shuffle(混洗)。

313、Shuffle對總執行時間的影響非常大。

314、集羣上的可用帶寬限制了MapReduce作業的數量。

315、Hadoop允許用戶針對map任務的輸出指定一個combiner。

316、Combiner的規則制約值可用的函數類型。

317、Combiner是通過Reducer類來定義的。

318、Hadoop Streaming 使用Unix標準流作爲Hadoop和應用程序之間的接口。

319、Streaming天生適合用於文件處理。

320、HDFS以流式數據訪問模式來存儲超大文件。

321、一次寫入,多次讀取是高效的訪問模式。

322、HDFS中的文件可能只有一個writer。

323、HDFS的塊大,目的爲最小化尋址開銷。

324、HDFS集羣有兩類節點:管理者-工作者模式運行。

325、Namenode管理文件系統的命名空間。

326、客戶端代表用戶通過與namenode和datanode交互。

327、Datanode是文件系統的工作節點。

328、在聯邦環境下每個namenode維護一個命名空間卷。

329、HDFS的權限模式與POSIX非常相似。

330、用戶空間文件系統允許整合式一個Unix系統。

331、從Hadoop文件系統讀取文件,最簡單使用Java.net.url。

332、Filesystem是一個通用的文件系統API。

333、Seek()方法是一個相對高開銷的操作,需要慎重使用。

334、Filestatus封裝了文件系統中文件和目錄的元數據。

335、Hadoop通配符與Unix bach的相同。

336、Hadoop無法自行定義網絡拓撲結構。

337、文件系統的一致模型描述了文件讀/寫的數據可見性。

338、HDFS提供了一個方法來使所有緩存與數據節點強行同步。

339、HDFS中關閉文件其實還隱含執行syn()方法。

340、Flume是一個將大規模數據導入HDFS的工具——典型應用從另外一個系統收集日誌數據。

341、Flume提供了不同數據級別的數據投遞可靠性。

342、Sqoop是將數據從結構化存儲批量導入HDFS。——數據庫。

343、Distcp是作爲一個MapReduce作業來實現的。

344、每個文件均按塊方式存儲,每個塊的元數據存儲在namenode的內存中。

345、Hadoop存儲小文件效率非常低。

346、Hadoop存檔文件可以使用MapReduce的輸入。

347、Hadoop自帶一套原子操作用於數據I/O操作。

348、HDFS會對寫入的存儲數據計算校驗和,並在讀取數據時驗證校驗和。

349、Datanode負責在收到數據後存儲該數據及其驗證校驗和。

350、客戶端成功驗證一個數據塊後,datanode更新日誌。

351、Datanode定期驗證所有數據塊。

352、Hadoop的LocalFile Systen執行客戶端的校驗和驗證。

353、校驗的計算代價是相當低的。

354、LocalFileSystem通過checksumFileSystem來完成自己的任務。

355、文件壓縮兩大好處:存儲和傳輸。

356、序列化兩大領域常見:進程間通信和存儲。

357、Writable兩個方法:dataoutput/datainput。

358、RawComParator允許其實現直接比較數據流中的記錄。

359、Writable類對java基本類型提供封裝。

360、Text是針對URT-8序列的writable類。

361、Text類的find()方法返回字節偏移量。

362、多數情況下需要將Text對象換成String對象。

363、BytesWritable是對二進制數據數組的封裝。

364、NullWritable是writable的特殊類型,序列化長度爲0.

365、Nulwritable不讀也不寫,只當佔位符。

366、NullWritable可以用作在SequenceFile中的鍵。

367、ObjectWritable是對Java基本類型的一個通用封裝。

368、由於writable是MapReduce數據路徑的核心,所有調整二進制表示對性能產生顯著效果。

369、適當重寫一個類,會更加適應我們的需求。

370、IDL——接口定義語言。

371、Avro是一個獨立於編程語言的數據序列化系統。

372、Avro模式通常用於Json來寫,數據通常採用二進制格式來編碼。

373、Avro爲序列化和反序列化提供了API。

374、Avro數據文件時可切分的,適合MapReduce快速處理。

375、Avro語言互相操作性。

376、Avro定義了對象的排列順序。

377、Hadoop配置後添加的資源文件屬性會覆蓋之前定義的屬性。

378、MRUnit是一個測試庫。

379、測試驅動程序:

1、使用本地作業運行器

2、使用一個mini集羣來運行它

380、Mini集羣廣泛應用於Hadoop自帶的自動測試包中。

381、Hadoop_CLASSPATH是一項客戶端的設置。

382、爲了啓動作業,我們需要運行驅動程序。

383、Job上的waitforCompletion()方法啓動作業並檢查進展情況。

384、作業ID的格式包含兩部分:

1、Jobtracker開始時間

2、唯一標識增量計數器

385、任務屬於作業,任務ID通過替換作業ID的作業前綴爲任務前綴,然後加上一個後綴表示哪個作業類的任務。

386、Hadoop的web界面用來瀏覽作業信息。

387、作業歷史包括已完成作業的時間和配置信息。

388、每個reducer產生一個輸出文件。

389、最經典的調試方法,打印語句來調試程序。

390、任務頁面包括一些看作業總任務細節的鏈接。

391、針對不同用戶,Hadoop在不同的地方生產日誌。

392、Hadoop允許分析作業中的一部分任務。

393、Jobcontrol的實例表示一個作業的運行圖。

394、Ooize中,工作流是一個有動作節點和控制節點組成的DAG。

395、每個工作都必須有一個start節點和一個end節點。

396、Oozie提供了一組與工作流交互的函數。

397、工作流應用由工作流定義和所有運行所需的資源。

398、運行MapReduce作業:

1、Job對象上的submit()

2、Waitforcompletion()

399、客戶端,提交MapReduce作業。

400、Jobtracker,運行作業劃分後的任務。

401、Jobsummiter作業提交過程:

1、箱Jobtracker請求一個新的作業ID

2、檢查作業的輸出說明

3、計算作業的輸入分片

4、將運行作業所需的資源複製到Jobtracker文件系統中。

5、告知Jobtracker作業,準備執行。

402、心跳 向Jobtracker表明tasktracker是否還存活。

403、MapReduce 1 :

1、作業的提交

2、作業的初始化

3、任務的分配

4、任務的執行

5、進度和狀態的更新

6、作業完成

404、YARN (Yet Another Resource Negotiator)。

405、YARN將Jobtracker的職能劃分爲多個獨立的實體。

406、YARN將兩種角色劃分爲兩個獨立的守護進程:

1、資源管理器

2、應用管理器

407、YARN設計的精妙之處在於不同的YARN應用可以在同一個集羣共存。

408、MapReduce確保每個reducer的輸入都是按鍵排序的。

409、系統執行排序的過程稱爲shuffle。

410、Shuffle屬於不斷被優化和改進的代碼的一部分。

411、Shuffle是MapReduce的“心臟”是奇蹟發生的地方。

412、每個map任務都有一個環形內存緩衝區用於存儲任務的輸出。

413、Hadoop設置作業配置參數作爲streaming程序的環境變量。

414、MapReduce模型將作業分解成任務,然而並行地運行任務。

415、Hadoop MapReduce 使用一個提交協議來確保作業和任務都完成功或失敗。

416、Hadoop在他們自己的Java虛擬機上運行任務,以區別其他正在運行的任務。

417、計數器是收集作業統計信息的有效手段之一。

418、Hadoop爲每個作業維護若干內置計數器,以描述多項指標。

419、任務計數器由其任務維護,並定期發送給tasktracker再有tasktracker發送給Jobtracker。

420、作業計數器由Jobtracker維護。

421、計數器由一個java枚舉(enum)類型來定義。

422、計數器是全局的。

423、排序是MapReduce的核心技術。

424、MapReduce能夠執行大型數據集鍵的“鏈接”操作。

425、“邊數據”是作業所需的額外的只讀數據。

426、RAID —— 磁盤陣列

427、HDFS無需使用RAID的冗餘機制。

428、Hadoop部分代碼需在Unix環境下執行。

429、Namenode和Jobtracker最好分別放在不同機器中。

430、Hadoop集羣架構通常包含兩級網絡拓撲。

431、爲了達到Hadoop的最佳性能,配置Hadoop系統以讓其瞭解網絡拓撲狀況舊極爲關鍵。

432、HDFS和MapReduce可安裝同一系統的不同位置。

433、Hadoop控制腳本依賴SSH來執行鍼對整個集羣的操作。

434、集羣的每個Hadoop節點都各自保存一系列配置文件。

435、Hadoop也支持爲所有master和worker機器採用同一套配置文件。

436、爲每一機器類維護單獨的配置文件。

437、同步所有機器上的配置文件極具挑戰性。

438、Hadoop內置一些腳本來運行指令,在集羣內啓動和終止守護進程。

439、MapReduce控制腳本不使用masters文件。

440、Namenode在內存中保存整個命名空間中的所有文件元數據和塊元數據。

441、Hadoop爲各個守護進程分配1GB內存。

442、在一個tasktracker上能夠同時運行的任務數取決於一臺機器有多少個處理器。

443、Hadoop守護進程一般同時運行RPC和HTTP兩個服務器。

444、各個datanode運行TCP/IP服務器以支持塊傳輸。

445、YARN是運行MapReduce的下一代架構。

446、YARN有一個作業歷史服務器和一個web應用程序代理服務器。

447、YARN更加精細化管理內存。

448、YARN守護進程運行一個或多個RPC和HTTP服務。

449、Kerberos獲取服務:

1、認證

2、授權

3、服務請求

450、Hadoop使用委託令牌來支持後續認證訪問。

451、Whirr使用SSH與雲端的機器通信。

452、Pig爲大型數據集的處理提供了更高層的抽象。

453、Pig提供了一套更強大的數據變換操作。

454、Pig Latin程序由一系列的操作式變換組成。

455、Pig是一種探索大規模數據集的腳本語言。

456、MapReduce的一個缺點是開發週期太長。

457、Pig提供了多個命令來檢查和處理程序中已有的數據結構。

458、Pig被設計爲可擴展的,處理路徑中幾乎每個部分都可以定製。

459、Pig是作爲一個客戶端應用程序運行的。

460、Pig兩種模式:本地和MapReduce。

461、Grunt是與Pig進行交互的外殼程序(shell)。

462、在MapReduce模式下,Pig翻譯成MapReduce作業。

463、Pig發佈版本只和特定的Hadoop版本對應。

464、三種執行Pig程序方法:

1、腳本

2、Grunt

3、嵌入式方法

465、創建一個精簡的數據集是一門藝術。

466、Pig Latin是一種數據流編程語言,而SQL是一種聲明式編程語言。

467、一個Pig Latin程序由一組語句構成。

468、Pig Latin並美歐正式的語言定義。

469、在Pig Latin程序執行時,每個命令按次序進行解析。

470、Hive是一個構建在Hadoop上的數據倉庫框架。

471、Hive一般在工作站上運行。

472、Hive把數據組織爲表。

473、元數據(如表模式)存儲在metastore數據庫中。

474、Hive外殼環境是我們交互的主要方式。

475、HiveQL是Hive的查詢語言。

476、Hive操作表而Pig直接操作數據集。

477、HiveQL大小寫不敏感。

478、用-e選項在行嵌入命令,不用加分號。

479、在Hive的倉庫目錄中,表存儲爲目錄。

480、Metastore包含兩部分:服務和後臺數據的存儲。

481、對於獨立的metastore,mysql是一種很受歡迎的選擇。

482、Hive把表組織成“分區”。

483、桶爲表加上了額外的結構。

484、每個桶就是表(分式)目錄裏的一個文件。

485、Hive從兩個維度對錶的存儲進行管理:行格式和文件格式。

486、視圖是一種用select語句定義的“虛表”。

487、Hbase是一個在HDFS上開發的面向列的分佈式數據庫。

488、數據模型:

1、應用把數據存放在帶標籤的表中

2、表中行的鍵也是字節數組

3、行中的列被分成“列族”

4、一個表的列族必須預先給出

5、所有列族成員都一起存放在文件系統中。

489、HBase自動把表水平分成“區域”,每個區域由表中行的子集構成。

490、HBase依賴於Zookeeper。

491、HBase通過Hadoop文件系統API來持久化存儲數據。

492、HBase有Java開發。

493、Hbase是一個分佈式的,面向列的數據存儲系統。

494、HBase有一個高效的批量加載工具。

495、Sqoop將結構化存儲器抽取到Hadoop中。

496、Sqoop有java開發。

497、Hive不支持事務。

498、Hive是最適合數據倉庫應用程序的。

499、Hive和Mysql提供的SQL方言最接近。

500、Map操作會將集合中的元素從一種形式轉換成另一種形式。

很多初學者,對大數據的概念都是模糊不清的,大數據是什麼,能做什麼,學的時候,該按照什麼線路去學習,學完往哪方面發展,想深入瞭解,想學習的同學歡迎加入大數據學習qq羣:458345782,有大量乾貨(零基礎以及進階的經典實戰)分享給大家,並且有清華大學畢業的資深大數據講師給大家免費授課,給大家分享目前國內最完整的大數據高端實戰實用學習流程體系
此文獻給正打算入門大數據的朋友:大數據學習筆記1000條(1)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章