大資料學習筆記500條【第一彈】,記得收藏!

xyz藍月發表於2019-05-27
大資料學習筆記500條【第一彈】,記得收藏!

筆記彙總

1. Zookeeper用於叢集主備切換。

2. YARN讓叢集具備更好的擴充套件性。

3. Spark沒有儲存能力。

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

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

6. YARN可以為符合YARN程式設計介面需求的叢集提供排程服務。

【大資料開發學習資料領取方式】:加入大資料技術學習交流群522189307,點選加入群聊,私信管理員即可免費領取

7. YARN:

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. 主-從模式必解決三個關鍵問題:

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. 向列表兩端增加元素:

LPUSH KEY VALUE [. . .]

PPUSH KEY VALUE[. . .]

返回長度

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

LPOP KEY

RPOP KEY

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

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

208. Redis集合型別內部使用雜湊表實現的。

209. 增加和刪除元素:

Sadd key member [. . .]]

Srem key 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中是一等值。

【大資料開發學習資料領取方式】:加入大資料技術學習交流群522189307,點選加入群聊,私信管理員即可免費領取

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操作會將集合中的元素從一種形式轉換成另一種形式。 【大資料開發學習資料領取方式】:加入大資料技術學習交流群522189307,點選加入群聊,私信管理員即可免費領取


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69903766/viewspace-2645817/,如需轉載,請註明出處,否則將追究法律責任。

相關文章