如果有天堂,天堂應該是圖書館的模樣。 –博爾赫斯
(不那麼冷就更好了)
主要內容:Hadoop、hive、HBASE、zookeeper、MySQL、sqoop、kafka(有時間補)、日誌
一、什麼是hadoop
Apache Hadoop是處理大數據的一種新方法
Hadoop是Apache軟件基金會所開發的並行計算框架與分佈式文件系統
Apache Hadoop是一款支持數據密集型分佈式應用並以Apache 2.0許可協議發佈的開源軟件框架。
Hadoop是根據Google公司發表的MapReduce和Google檔案系統的論文自行實作而成。
這些是找到的資料描述,這裏我們把它理解爲軟件框架,這個軟件框架呢,表現在大量數據處理(通常一千兆兆字節即:十的十五次方字節計量)有突出能力,它的樣子呈現生態系統,包含許多組件。
二、Hadoop框架
三、sqoop
1、ETL是啥??
Extraction-Transformation-Loading的縮寫,中文名爲數據抽取、轉換和加載
2、那Sqoop(數據庫ETL工具)用來幹嘛的?
先了解現代數據存儲系統如何運作(本少俠還不清楚),一些數據可能不適於存儲在關係數據庫中,因爲大部分數據需要按照原始形式存儲。向數據庫中添加數據的前提是先把數據轉變成一個可以加載到數據庫的預定的模式,這一步驟被稱爲提取、轉換和加載(ETL),會消耗時間和成本(是真的…賊長…)。最重要的是,關於數據如何使用的決定必須在ETL步驟中間作出。此外,一些數據經常在ETL步驟中被丟棄,因爲它不能放入數據模式或被認爲不需要。
湊巧,(其實,大多數的巧合都是設計好的)hadoop的重點是按照其原始格式使用數據。Hadoop訪問數據時,看起來就像在執行ETL步驟。但與傳統的數據倉庫方法不同的是hadoop稱爲讀時模式,傳統的數據倉庫方法,稱爲寫時模式
本俠理解,sqoop是數據不加工的搬運工。
簡單說:Sqoop是一個用來將Hadoop和關係型數據庫中的數據相互轉移的工具,可以將一個關係型數據庫(例如 : MySQL ,Oracle ,Postgres等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型數據庫中
Sqoop中一大亮點就是可以通過hadoop的mapreduce把數據從關係型數據庫中導入數據到HDFS。
例子:
a.使用Sqoop將數據從Hive導入MySQL
前提:啓動Hadoop集羣、MySQL服務
命令:
進入目錄: cd /usr/local/sqoop
導入命令: ./bin/sqoop export –connect jdbc:mysql://localhost:3306/dblab –username root –password hadoop –table user_action –export-dir ‘/user/hive/warehouse/dblab.db/user_action’ –fields-terminated-by ‘\t’;
字段解釋:
./bin/sqoop export ##表示數據從 hive 複製到 mysql 中
–connect jdbc:mysql://localhost:3306/dblab
–username root #mysql登陸用戶名
–password hadoop #登錄密碼
–table user_action #mysql 中的表,即將被導入的表名稱
–export-dir ‘/user/hive/warehouse/dblab.db/user_action ’ #hive中被導出的文件
–fields-terminated-by ‘\t’ #Hive 中被導出的文件字段的分隔符
b.使用Sqoop將數據從MySQL導入HBase
前提:啓動Hadoop集羣、MySQL服務、HBase服務
命令:
進入目錄: cd /usr/local/sqoop
導入: ./bin/sqoop import –connect jdbc:mysql://localhost:3306/dblab –username root –password hadoop –table user_action –hbase-table user_action –column-family f1 –hbase-row-key id –hbase-create-table -m 1
3、更多:
四、數據倉庫hive
1、Hive位置
2、數據倉庫和數據庫有啥區別(一直好奇)
數據庫是面向事務的設計,數據倉庫是面向主題設計的。
數據庫一般存儲在線交易數據,數據倉庫存儲的一般是歷史數據。
數據庫設計是儘量避免冗餘,一般採用符合範式的規則來設計,數據倉庫在設計是有意引入冗餘,採用反範式的方式來設計。
數據庫是爲捕獲數據而設計,數據倉庫是爲分析數據而設計,它的兩個基本的元素是維表和事實表。(維是看問題的角度,比如時間,部門,維表放的就是這些東西的定義,事實表裏放着要查詢的數據,同時有維的ID)
網上查的,巴拉巴拉很有道理的樣子
3、數據倉庫用來幹嘛呢
個人理解最簡單的回答,對歷史數據的分析和整理就是數據倉庫。
數據倉庫根本上來說是因爲各種各樣應用系統無法高效處理大量的歷史數據纔出現的。
4、數據倉庫hive
Hive數據存儲格式的兩個維度:
行格式(row format)
文件存儲格式(file format)
Apache Hive是建立在hadoop之上的數據倉庫,使用稱爲HiveQL,類似SQL語言,提供大數據集的數據彙總、即時查詢和分析
官網介紹:
Why Hive?
Hive is a data warehouse system for Hadoop that facilitates easy data summarization, ad-hoc queries, and the analysis of large datasets stored in Hadoop compatible file systems. Hive provides a mechanism to project structure onto this data and query the data using a SQL-like language called HiveQL.
(詳情看hive官網)
5、SQL和HiveQL這麼像,比較一番
五、HBase實時分佈式數據庫
1、HBase是什麼?
同樣先看下所處位置:
HBase是一個高性能的分佈式數據庫,主要適用於海量明細數據(十億、百億)的隨機實時查詢,如日誌明細、交易清單、軌跡行爲等;
是典型的NoSQL數據庫,區別於傳統的RDBMS(關係數據庫管理系統);所以它是具有版本控制功能的分佈式非關係型數據庫。
它仿照自Google的Bigtable。
HBase和BigTable的底層技術對應關係
2、HBase模型概述
HBase類似數據庫中的表,具有行和列。不同於關係數據庫基於行模式存儲。HBase是基於列存儲的,列被分組爲列族,每個列族都由幾個文件保存,不同列族的文件是分離的,所有列族都一起存儲在物理文件系統中。
列族中所有的列都具有相同的前綴。例如,一張每天股票價格的表,假如某一列族爲“price”,它有四個成員——price:open、price:close、price:low和price:high。
關係數據庫通常可以針對不同列構建複雜的多個索引,以提高數據訪問性能。HBase只有一個索引——行鍵,通過巧妙的設計,HBase中的所有訪問方法,或者通過行鍵訪問,或者通過行鍵掃描,從而使得整個系統不會慢下來。也就是說表的所有訪問都是通過表的行鍵進行的,它被認爲是主鍵。
詳情看HBase官網介紹
3、HBase與hive關係
在大數據架構中,Hive和HBase是協作關係,數據流一般如下圖:
(1)通過ETL工具將數據源抽取到HDFS存儲;
(2)通過Hive清洗、處理和計算原始數據;
(3)HIve清洗處理後的結果,如果是面向海量數據隨機查詢場景的可存入Hbase
(4)數據應用從HBase查詢數據;
六、關於日誌
安裝過程中各種錯,來一波日誌:
1、系統日誌是用來查找原因的。日誌內容多且複雜,你需要做的就是耐心、然後找出你需要的,也許你不明白問題的原因,搜索吧
2、出了問題,首先查看系統日誌,根據提示排查問題
3、如果系統日誌看起來沒問題,接着檢查hadoop服務和應用程序日誌。跟着錯誤的性質,查看對應的hadoop服務日誌的方向,例如,如有一個hdfs有問題,那麼就查看在NameNode和數據節點上的日誌,而非yarn資源管理器或者節點管理器日誌。
4、日誌不一定在標準日誌位置(/var/log)。日誌文件的位置在服務的XML配置文件中設置
5、默認,hadoop系統日誌文件是累積的,所以確保查看的是日誌末尾。日誌由log4j包管理
6、兩種模式日誌存儲
日誌聚合(好像還不清楚是啥)時可在yarn資源管理器用戶界面(http://192.168.237.147:8088 或50070)中顯示或yarn logs命令查看
未使用日誌聚合,日誌存放於本地,位置:yarn-site.xml文件中的yarn.nodemanager.log-dirs屬性中。
若沒有使用日誌聚合,必須記錄作業所用的集羣節點(懵逼臉),然後必須直接從此節點獲取日誌文件。
七、參考
《寫給大忙人的Hadoop2》 作者:Douglas Eadline(美)著 盧濤 李穎 譯
《深入理解Hadoop》 作者:Madhu Siddalingaiah(美)著 於博 馮傲風 譯
CSDN博主 桂小林 相關知識(也是少俠的導師啦啦啦)