前言 最近想學習下大數據,有點急於求成,於是去網上找了各種培訓機構的視頻,發現大都質量不佳,理論基本不說或者簡單講下,然後教你照貓畫虎的敲代碼,出了問題都沒法分析。最後還是找了廈門大學的公開課從理論開始穩扎穩打的學習了。 一 Hadoop起源 Hadoop的理論起源主要來自谷歌公司的三大論文,並迅速 ...
前言
最近想學習下大數據,有點急於求成,於是去網上找了各種培訓機構的視頻,發現大都質量不佳,理論基本不說或者簡單講下,然後教你照貓畫虎的敲代碼,出了問題都沒法分析。最後還是找了廈門大學的公開課從理論開始穩扎穩打的學習了。
一 Hadoop起源
Hadoop的理論起源主要來自谷歌公司的三大論文,並迅速應用於全球各大互聯網公司。因此,學習大數據Hadoop是繞不開的一個知識點。今年來,大數據的興起其實來自於電腦技術的發展,物聯網技術產生了大量的數據,雲技術使得電腦存儲與運算資源更加普及,因此大數據技術應運而出,用以解決大量數據的存儲與計算的問題。
二 Hadoop生態圈
學習Hadoop,需要知道Hadoop生態圈中各個項目的功能與作用,為何要用開發這種新項目,而不使用已有項目實現這種功能。
2.1 HDFS
Hadoop的底層文件系統,與傳統文件系統不同在於它是分散式的。同時與已有的分散式文件系統相比,它又有著舊分散式文件系統沒有的優點。如:高可用性,高可靠性,吞吐量大,能使用廉價伺服器構建,可通過不斷增加機器數來進行拓展。具體實現在HDFS文章中記錄。
2.2 HBase
構建在HDFS之上的分散式資料庫系統。是一種基於列的NoSQL資料庫,從另一個角度看也能看成鍵值對的NoSQL資料庫。與傳統關係型資料庫相比,最大的優勢在於可通過增加機器進行橫向擴展,並且能使用廉價伺服器。
2.3 Hive
一種分散式數據倉庫,可以導入外部數據後用類SQL語言進行操作。一般用於歷史數據的查詢與分析。與HBase不同,HBase常用於實時的互動式查詢。
2.4 MapRuduce
一種分散式計算框架,MapRuce本來就是一種計算模型的名稱。核心思想是“分而治之”,能將計算分解成多個小計算,由多個機器同時計算。適合離線批處理。
2.5 Storm
一種流式計算框架,MapRuce適合批處理,無法完成流式數據的處理,因此開發出流式處理框架。
2.6 常見大數據處理需求
- 離線批處理,特點:使用歷史數據,大批量的處理,要求吞吐率。
- 實時互動式處理,特點:用戶交互使用,要求反映速度在秒級到數分鐘之間。
- 流式數據處理,特點:數據以流的形式輸入,要求毫秒級的處理速度,且處理後的數據大部分都不用儲存。
2.7 Hadoop組件關係
基本的關係就是,底層用HDFS存儲,之上是核心計算框架MapRuduce。而Hive,Hbase,Pig等等組件一般都是將自身的操作轉化成Mapreduce代碼然後通過Mapreduce進行計算實現功能。同時與MapRuduce框架同一層次的Storm解決了流式數據的處理。Hbase雖然是使用Mapreduce框架進行處理,但是基本也能實現實時互動式處理的要求。(也正是Mapreduce存在種種問題,Spark漸漸興起,雖然Mapreduce也做了各種優化,但是在某些領域相比Spark還是有些差距)。
三 Hadoop安裝
準備。同一區域網的Linux伺服器數台,我是用我的游戲本同時開了3個虛擬機代替的。
Linux里創建hadoop用戶,專門負責Hadoop項目,便於管理與許可權劃分。
安裝JDK,下載Hadoop時官方會指明JDK版本需求,設置JDK環境變數
安裝SSH並設置免密登錄。因為HDFS的NameNode與其他DateNode等節點的通訊與管理就是基於SSH協議的。並且將要使用的機器功能變數名稱寫入hosts文件,方便命名。
- 去官網下載並解壓Hadoop。修改hadoop配置文件,位於hadoop/etc/hadoop /下麵,分別有:
- slaves。寫入DateNode的機器,因為之前修改了功能變數名稱解析文件,可以直接寫功能變數名稱,不用寫IP了。
- core-site.xml。Hadoop的核心配置文件
fs.defaultFS,預設文件系統的主機和埠,這裡的文件系統就是hdfs。
hadoop.tmp.dir hadoop的臨時文件路徑,不設置則會使用系統臨時文件路徑,系統重啟後就丟失了。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
- hdfs-site.xml。HDFS的配置文件
dfs.namenode.secondary.http-address。SecondNameNode的機器和埠
dfs.replication。HDFS系統保存的文件副本數。
dfs.namenode.name.dir,dfs.datanode.data.dir。NameNode和DataNode數據在原本文件系統中的存放位置。
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
- mapred-site.xml。MapReuce的配置文件
mapreduce.framework.name。MapReuce的資源管理系統。這個選yarn,原本是MapReuce自己進行分散式計算時的資源管理,後來發現效率不足便分割開來重新開發了一套框架。
mapreduce.jobhistory.address。MapReuce的任務日誌系統,指定機器和埠。
mapreduce.jobhistory.webapp.address。任務日誌系統web頁面所使用的機器和埠,通過這個可以在web頁面中查看任務日誌系統。
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>Master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Master:19888</value>
</property>
</configuration>
- yarn-site.xml。YARN的配置文件
yarn.resourcemanager.hostname。YARN的ResourceManager所使用的機器。這個負責進行全局的資源分配,管理。
yarn.nodemanager.aux-services。可以自定義一些服務,比如MapReuce的shuffle就是用這個配置的。目前我們使用填shuffle就行了。
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
- 配置好以後將Hadoop文件從主節點複製到各個從節點,Hadoop的HADFS與MapReduce就安裝完成了。(CentOs系統需要關閉相應防火牆)
四 Hadoop生態圈其他組件安裝
看看網友博客和官方文檔差不多就會了,基本一個形式。下載解壓-配置環境變數-配置組件的配置文件,基本都是xxxx-env.sh,xxx-site.sh,xxx-core.sh,slave,work這種,在裡面按照需求配置參數就好了,具體參數意思和必須要配置的參數看看官方文檔也就懂了(滑稽)。