Hadoop各组件详解
大數據之HDFS
1.HDFS產生背景
隨著數據量越來越大,在一個操作系統存不下所有的數據,那么就分配到更多的操作系統管理的磁盆中,但是不方便管理和維護,迫切需要一種系統來管理多臺機器上的文件,這就是分布式文件管理系統。HDFS只是分布式文件管理系統中的一種。
2.HDFS定義
HDFS,是一個文件系統,用于存儲文件,通過目錄樹來定位文件;其次,它是分布式的,由很多服務器聯合起來實現其功能,機器中的服務器有各自的角色。
HDFS使用場景:適合一次寫入,多次讀出的場景,且不支持文件的修改。適合用來做數據分析,不適合做網盤應用。
優點:
1.高容錯性
2.適合處理大數據
3.可構建在廉價機器上,通過多副本機制,提高可靠性
缺點:
1.不適合低延時數據訪問
2.無法高效的對大量小文件進行存儲
3.不支持并發寫入、文件隨機修改
HDFS塊的大小主要取決與磁盤的傳輸數率
常用命令:
大數據之MapReduce
MapReduce是Hadoop中的一種處理大規模數據的編程模型,得益于MapReduce的并行計算,可以高效的處理大規模數據(一般是HDFS中存儲的數據)。
生成序列文件: # mahout seqdirectory
-i Sequence File文件目錄
-o 向量文件輸出目錄
-wt 權重類型,支持TF或者TFIDF兩種選項,默認TFIDF
-n 使用的正規化,使用浮點數或者"INF"表示,
-ow 指定該參數,將覆蓋已有的輸出目錄
-seq 指定該參數,那么輸出的向量是SequentialAccessVectors
-nv 指定該參數,那么輸出的向量是NamedVectors
大數據之hbase
一、hbase的簡介:
HBase - Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。HBase是Google BigTable的開源實現,類似Google BigTable利用GFS作為其文件存儲系統,HBase利用Hadoop HDFS作為其文件存儲系統;Google運行MapReduce來處理Bigtable中的海量數據,HBase同樣利用Hadoop MapReduce來處理HBase中的海量數據;Google Bigtable利用Chubby作為協同服務,HBase利用Zookeeper作為對應。優勢:
1.寫入性能高,且幾乎可以無限擴展。
2.海量數據下(100TB級別表)的查詢依然能保持在5ms級別。
3.存儲容量大,不需要做分庫分表。
4.表的列可以靈活配置,1行可以有多個非固定的列。
劣勢:
1.并不能保證100%時間可用,宕機回復時間根據寫入流量不同在幾秒到幾十秒內。
2.查詢便利性上缺少支持sql語句。
3.無索引,查詢必須按照RowKey嚴格查詢,不帶RowKey的filter性能較低。
4.對于查詢會有一些毛刺,特別是在compact時,平均查詢延遲在2~3ms,但是毛刺時會升高到幾十到100多毫秒。
二、HBase使用場景
2.1 歷史數據存儲類應用(約占七成)
這類應用范圍比較廣,特別對于歷史訂單、歷史記錄、日志類的業務比較友好。由于以上這些業務的數據量巨大,傳統的書庫很難hold住,而這類應用往往查詢量相對較少,查詢隨機性較大(無熱點訪問),對于mysql,redis來說存儲成本太高,hbase用在這里非常合適。
2.2 分析型應用(約占兩成)
主要是指配合spark,MapReduce,storm等來做數據分析。由于以上這些計算組件對于中間狀態的保存具有局限性,當然spark內也有全局變量的概念,但是畢竟不是存儲,不可能緩存一年的中間結果做cache。二有些應用又需要用到可能很長一段時間的數據做訓練或者比對,這個時候hbase的優勢就可以發揮出來了。
2.3 在線讀寫型應用(約占一成)
可以理解為對mysql或者redis的一種替換做法,但是這類應用比較在意可用性、穩定性以及sql、索引等支持。hbase的劣勢較大,應用范圍較窄。只有在一種情況下會是用–mysql或者redis的容量實在無法支撐數據量了,而應用對可用性的要求可以有一定成都的容忍。
三、HBase與傳統關系數據庫的區別?
答:主要體現在以下幾個方面:1.數據類型。關系數據庫采用關系模型,具有豐富的數據類型和儲存方式。HBase則采用了更加簡單的數據模型,它把數據儲存為未經解釋的字符串,用戶可以把不同格式的結構化數據和非結構化數據都序列化成字符串保存到HBase中,用戶需要自己編寫程序把字符串解析成不同的數據類型。
2.數據操作。關系數據庫中包含了豐富的操作,如插入、刪除、更新、查詢等,其中會涉及復雜的多表連接,通常是借助多個表之間的主外鍵關聯來實現的。HBase操作則不存在復雜的表與表之間的關系,只有簡單的插入、查詢、刪除、清空等,因為HBase在設計上就避免了復雜的表與表之間的關系,通常只采用單表的主鍵查詢,所以它無法實現像關系數據庫中那樣的表與表之間的連接操作。
3.存儲模式。關系數據庫是基于行模式存儲的,元祖或行會被連續地存儲在磁盤頁中。在讀取數據時,需要順序掃描每個元組,然后從中篩選出查詢所需要的屬性。如果每個元組只有少量屬性的值對于查詢是有用的,那么基于行模式存儲就會浪費許多磁盤空間和內存帶寬。HBase是基于列存儲的,每個列族都由幾個文件保存,不同列族的文件是分離的,它的優點是:可以降低I/O開銷,支持大量并發用戶查詢,因為僅需要處理可以回答這些查詢的列,而不是處理與查詢無關的大量數據行;同一個列族中的數據會被一起進行壓縮,由于同一列族內的數據相似度較高,因此可以獲得較高的數據壓縮比。
4.數據索引。關系數據庫通常可以針對不同列構建復雜的多個索引,以提高數據訪問性能。與關系數據庫不同的是,HBase只有一個索引——行鍵,通過巧妙的設計,HBase中所有訪問方法,或者通過行鍵訪問,或者通過行鍵掃描,從而使整個系統不會慢下來。由于HBase位于Hadoop框架之上,因此可以使用Hadoop MapReduce來快速、高效地生成索引表。
6.數據維護。在關系數據庫中,更新操作會用最新的當前值去替換記錄中原來的舊值,舊值被覆蓋后就不會存在。而在HBase中執行更新操作時,并不會刪除數據舊的版本,而是生成一個新的版本,舊有的版本仍舊保留。
7.可伸縮性。關系數據庫很難實現橫向擴展,縱向擴展的空間也比較有限。相反,HBase和BigTable這些分布式數據庫就是為了實現靈活的水平擴展而開發的,因此能夠輕易地通過在集群中增加或者減少硬件數量來實現性能的伸縮。
HBase也有自身的局限性,如HBase不支持事務,因此無法實現跨行的原子性。
五、Hbase常用shell命令:
啟動hbase
$ cd /usr/local/hadoop
$ ./sbin/start-dfs.sh
$ cd /usr/local/hbase
$ ./sbin/start-hbase.sh
$ ./bin/hbase shell
注:啟動和關閉hadoop和hbase的順序一定是:啟動hadoop,啟動hbase,關閉hadoop,關閉hbase。
hbase 中創建表:
hbase>create ‘student’ , ‘Sname’ , ‘Ssex’, ‘Sage’
hbase 中查看創建的表:
hbase>list
hbase 中添加數據:
hbase>put ‘student’ , ‘95001’ , ‘Ssex’, ‘Sage’
hbase 中查看數據:
hbase>get ‘student’ , ‘95001’
hbase 中查詢表的全部數據:
hbase>scan ‘student’
hbase 中刪除數據:
hbase>delete ‘student’ , ‘95001’ , ‘Ssex’, ‘Sage’
disable 表的禁用:
hbase(main):038:0> disable ‘xt’
drop 表的刪除:
hbase(main):039:0> drop ‘xt’
count 統計表個數:
hbase(main):034:0> count ‘xt’
truncate 清空表數據:
hbase(main):035:0> truncate ‘xt’
put 添加數據
hbase>put ‘student’ , ‘Sname’ , ‘Ssex’, ‘Sage’
退出hbase:
hbase>exit
終止hbase運行:
#stop-hbase.sh
開啟hbase運行:
#start-hbase.sh
大數據之pig
什么是Pig?
Pig 是一種數據流語言和運行環境,常用于檢索和分析數據量較大的數據集。Pig包括兩部分:一是用于描述數據流的語言,稱為Pig Latin;二是用于運行Pig Latin程序的執行環境。
Pig的常用命令:操作HDFS
ls、cd、cat、mkdir、pwd、copyFromLocal(上傳)、copyToLocal(下載)、register、define等。
操作Pig:
命令行:pig提供了一個shell終端與用戶進行交互,用戶可以進行增刪改查操作。
啟動pig命令行模式,進入本地模式:pig -x local
啟動pig命令行模式,進入集群模式:pig - x mapredcue/pig
(pig沒有API可以操作)
常用的PigLatin語句:
load:加載數據
foreach:逐行掃描
generate:提取列
filter:過濾
distinct:去重
order by:排序
group by:分組
join:多表查詢
union:聯合查詢
dump:把結果輸出到屏幕上
store:把結果保存到HDFS上
大數據之mahout
1.概念:
Mahout 是 Apache Software Foundation(ASF) 旗下的一個開源項目,提供一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便快捷地創建智能應用程序。Mahout包含許多實現,包括聚類、分類、推薦過濾、頻繁子項挖掘。此外,通過使用 Apache Hadoop 庫,Mahout 可以有效地擴展到云中。
2.主要特性:
雖然在開源領域中相對較為年輕,但 Mahout 已經提供了大量功能,特別是在集群和 CF 方面。Mahout 的主要特性包括:
Taste CF。Taste 是 Sean Owen 在 SourceForge 上發起的一個針對 CF 的開源項目,并在 2008 年被贈予 Mahout。
一些支持 Map-Reduce 的集群實現包括 k-Means、模糊 k-Means、Canopy、Dirichlet 和 Mean-Shift。
Distributed Naive Bayes 和 Complementary Naive Bayes 分類實現。
針對進化編程的分布式適用性功能。
Matrix 和矢量庫。
上述算法的示例。
3.內容簡介:
Mahout 的創始人 Grant Ingersoll 介紹了機器學習的基本概念,并演示了如何使用 Mahout 來實現文檔聚類、做出推薦和組織內容。
mahout手冊:
有效的程序名稱是:
arff.vector::從ARFF文件或目錄生成向量
baumwelch::用于無監督HMM訓練的Baum-Welch算法
buildforest ::建立隨機森林分類器
頂篷::頂篷聚類
cat::打印文件或資源,因為邏輯回歸模型會看到它
cleansvd ::清理和驗證SVD輸出
clusterdump:將集群輸出轉儲到文本
clusterpp ::群集中的群集群集輸出
cmdump ::以HTML或文本格式轉儲混淆矩陣
concatmatrices:將兩個具有相同基數的矩陣連接到一個矩陣中
cvb ::通過折疊的變化貝葉斯(0th導數)的LDA
cvb0_local ::通過折疊的變化貝葉斯LDA,在本地內存中。
describe:描述數據集中的字段和目標變量
valuateFactorization ::計算針對探針的評級矩陣分解的RMSE和MAE
fkmeans ::模糊K均值聚類
hmmpredict::通過給定的HMM生成隨機的觀測序列
itemsimilarity:計算基于項目的協同過濾的item-item-likeities
kmeans :: K均值聚類
lucene.vector ::從Lucene索引生成向量
lucene2seq::從Lucene索引生成文本SequenceFiles
matrixdump :: CSV格式的轉儲矩陣
matrixmult ::取兩個矩陣的乘積
parallelALS::評級矩陣的ALS-WR分解
qualcluster ::運行聚類實驗并以CSV格式匯總結果
Recommendationfactorized ::使用評級矩陣的因式分解來計算建議
基于requestitem ::使用基于項目的協作過濾來計算建議
regexconverter::基于正則表達式每行轉換文本文件
resplit::將一組SequenceFiles拆分為多個相等的拆分
rowid ::將SequenceFile <Text,VectorWritable>映射到{SequenceFile <IntWritable,VectorWritable>,SequenceFile <IntWritable,Text>}
rowsimilarity:計算矩陣行的成對相似度
runAdaptiveLogistic::使用可能經過訓練和驗證的AdaptivelogisticRegression模型對新生產數據進行評分
runlogistic ::針對CSV數據運行邏輯回歸模型
seq2encoded::從文本序列文件生成編碼的稀疏向量
seq2sparse ::從文本序列文件生成稀疏向量
seqdirectory ::從目錄生成(文本)序列文件
seqdumper ::通用序列文件轉儲器
seqmailarchives ::從包含gzip壓縮郵件存檔的目錄中創建SequenceFile
seqwiki :: Wikipedia xml轉儲到序列文件
Spectralkmeans::頻譜k均值聚類
split ::將輸入數據分為測試和訓練集
splitDataset::將評級數據集分為訓練和探針部分
ssvd::隨機SVD
streamingkmeans ::流式k均值聚類
svd::Lanczos奇異值分解
testforest:測試隨機森林分類器
testnb::測試基于向量的貝葉斯分類器
trainAdaptiveLogistic ::訓練AdaptivelogisticRegression模型
trainlogistic ::使用隨機梯度下降訓練邏輯回歸
trainnb::訓練基于向量的貝葉斯分類器
轉置::對矩陣進行轉置
validateAdaptiveLogistic ::針對保持數據集驗證AdaptivelogisticRegression模型
vecdist::計算一組向量(或簇或樹冠,它們必須適合內存)與向量列表之間的距離
vectordump:將向量從序列文件轉儲到文本
viterbi::從給定的輸出狀態序列對隱藏狀態進行維特比解碼
itemsimilarity參數
通過mahout itemsimilarity –-help 查看:
–input (-i) input, 設置數據輸入路徑
–output (-o) output ,設置結果輸出路徑
–similarityClassname (-s) ,設置相似度計算函數:
SIMILARITY_COOCCURRENCE,同現相似度
SIMILARITY_LOGLIKELIHOOD, 對數似然相似度
SIMILARITY_TANIMOTO_COEFFICIENT
SIMILARITY_CITY_BLOCK, 曼哈頓距離相似度
SIMILARITY_COSINE, 余弦相似度
SIMILARITY_PEARSON_CORRELATION,皮爾森相似度
SIMILARITY_EUCLIDEAN_DISTANCE, 歐氏距離相似度
具體函數定義參照:http://blog.fens.me/mahout-recommend-engine/
–maxSimilaritiesPerItem (-m), 物品最大相似物品數量,默認是100;
–maxPrefs (-mppu) ,最大評分,默認是: 500
–minPrefsPerUser (-mp) ,最小評分,默認是1
–booleanData , false評分 true 0、1
–threshold (-tr) ,相似度過濾
–randomSeed ,抽樣
–tempDir tempDir ,臨時目錄
recommenditembased參數
通過mahout recommenditembased–-help 查看:
–input (-i) input, 設置數據輸入路徑
–output (-o) output ,設置結果輸出路徑
–similarityClassname (-s) ,設置相似度計算函數
–numRecommendations (-n) ,每個用戶推薦數量,默認10
–usersFile,計算用戶推薦結果的用戶數據
– itemsFile,推薦結果只包含該物品列表;
–maxSimilaritiesPerItem (-m), 物品最大相似物品數量,默認是100;
–maxPrefs (-mppu) ,最大評分,默認是: 500
–minPrefsPerUser (-mp) ,最小評分,默認是1
–booleanData , false評分 true 0、1
–threshold (-tr) ,相似度過濾
–filterFile (-f) ,過濾用戶推薦物品
–randomSeed ,抽樣
–tempDir tempDir ,臨時目錄
大數據之spark
spark-shell 退出的正確操作是**:quit**
二:spark相關概念
Application 運行在集群上的用戶程序,包含集群上的driver program 和多個executor線程組成;
Driver program application運行的main方法,并生sparkcontext;
Cluster manager 集群資源管理器 ;
Deploy mode 部署模式 用于區別driver program的運行方式:集群模式(cluter mode),driver在集群內部啟動;客戶端模式(client mode),driver進程從集群外部啟動;
Worker node 工作節點,運行application的節點
Executor work node的上進程,運行task并保持數據交互,每一個application有自己的executor
Task 運行于Executor中的任務單元,Spark應用程序最終被劃分為經過優化后的多個任務的集合
Job 由多個轉變構建的并行計算任務,具體為Spark中的action操作, 一個action就為一個job
Scala當中parallelize并行化的用法
parallelize并行化集合是根據一個已經存在的Scala集合創建的RDD對象。集合的里面的元素將會被拷貝進入新創建出的一個可被并行操作的分布式數據集。
eg:加載數據“1,2,3,4,5,6,7,8,9,10”:
scala> val num=sc.parallelize(1 to 10)
Spark-必會的基礎語法練習:
//創建一個List
val lst0 = List(1,7,9,8,0,3,5,4,6,2)
//將lst0中每個元素乘以10后生成一個新的集合
val lst1 = lst0.map(_*10)
println(lst1)
spark中函數用法
sc.parallelize():并行化
map():一種可迭代的鍵值對(key/value)結構。
filter():遍歷整個集合,你提供一個判斷條件(函數),來過濾集合元素
toDebugString:可以輸出你的RDD的組成
split():處理字符串
textFile():讀取文件
flatMap():將函數產出的集合串接在一起。
foreach:用于調用數組的每個元素,并將元素傳遞給回調函數。
sparkContext:
大數據之flume
flume命令:
help 幫助顯示此幫助文本
agent 代理運行一個flume代理
avro-client 運行avro客戶端
password 創建用于flume配置的密碼文件
version 版本顯示flume版本信息
命令選項:
–conf,-c 使用目錄下的配置文件
–classpath,-C 追加到classpath
–dryrun,-d 實際上并沒有啟動Flume,只是打印命令
–plugins-path colon-separated list of plugins.d directories. See the
plugins.d section in the user guide for more details.
Default: $FLUME_HOME/plugins.d
-Dproperty=value sets a Java system property value
-Xproperty=value sets a Java -X option
agent options:
–conf-file,-f 指定一個配置文件(必選)
–name,-n 這個代理的名稱(必填)
–help,-h -h顯示幫助文本
avro-client options:
–rpcProps,-P RPC客戶端屬性文件與服務器連接參數
–host,-H 主機名,事件將被發送到該主機
–port,-p <端口的avro源的>端口
–dirname
–filename,-F 文本文件流到avro源(默認:std輸入)
–headerFile,-R File 其中每個新行上都包含作為鍵/值對的事件頭
–help,-h 顯示幫助文本
Either --rpcProps or both --host and --port must be specified.
password options:
–outfile 將存儲已編碼密碼的文件輸出
注意,如果指定了目錄,那么總是先包含它在類路徑中。
大數據之hive
概述:
hive是基于Hadoop的一個數據倉庫工具,用來進行數據提取、轉化、加載,這是一種可以存儲、查詢和分析存儲在Hadoop中的大規模數據的機制。hive數據倉庫工具能將結構化的數據文件映射為一張數據庫表,并提供SQL查詢功能,能將SQL語句轉變成MapReduce任務來執行。Hive的優點是學習成本低,可以通過類似SQL語句實現快速MapReduce統計,使MapReduce變得更加簡單,而不必開發專門的MapReduce應用程序。hive是十分適合數據倉庫的統計分析和Windows注冊表文件。
hive語法與MySQL類似
總結
以上是生活随笔為你收集整理的Hadoop各组件详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于WPF界面框架合集
- 下一篇: oracle 亿级数据迁移,Oracle