Hadoop簡介和安裝
Hadoop
簡介
Hadoop 是Apache Lucene創始人道格·卡丁(Doug Cutting)創建的,Lucene是一個應用廣泛的文本搜索庫,Hadoop起源于開源網絡搜索引擎Apache Nutch,后者是Lucene項目的一部分.
Apache Hadoop項目的目標是可靠的、可拓展的分布式計算開發開源軟件。
Apache Hadoop平臺本質是一個計算存儲框架,允許使用簡單的編程模型跨計算機集群地處理大型數據集,將計算存儲操作從單個服務器拓展到數千臺服務器(小型機)每臺服務器提供本地計算和存儲。平臺本身不是依靠提升硬件來提高高可用的,而是在應用層檢測和處理故障。從而在一組計算機上提供高性能的服務,每個計算機都可能出現故障,Hadoop中所有的模塊。都基于一個假設,即硬件故障是常見事件,應由框架自動處理。
Hadoop是一個用Java編寫的Apache開放源代碼框架,它允許使用簡單的編程模型在計算機集中環境分布式處理大型數據集。Hadoop框架式應用程序在跨計算機集群提供分布式存儲在計算集群提供的存儲和計算環境中工作,Hadoop旨在從單個服務器擴展到數千臺機器,每臺機器提供了本地計算和存儲。
其核心構成分別為 HDFS(分布式文件系統)、MapReduce(分布式計算系統)、Yarn(資源管理系統)
HDFS
HDFS是Google發布于2003年10月的《Google FS》的開源實現。
Hadoop分布式文件系統(HDFS)能夠提供對數據訪問的高吞吐量,適用于大數據場景的數據存儲,因為HDFS提高了高可靠性(主要通過多副本實現)、高拓展性(通過添加機器來達到線性拓展)、和高吞吐率的數據存儲服務,Hadoop是被設計成能夠運行在通用的硬件上的分布式文件系統,因此可以使用廉價的通用機器。大大減少了公司的成本。
HDFS的基本原理是將數據文件以指定大小拆分成數據塊,并將數據塊以副本的方式存儲到多臺機器上,即使其中某一個節點出現故障,那么該節點上的數據塊副本丟失還有其對應的其他節點的數據副本,但是前提是你的副本系數大于1,HDFS將數據文件拆分、容錯、負載均衡等透明化(用戶感知不到整個過程,只知道上傳了一個文件到HDFS上其中數據的切分、存儲在那些機器上是感知不到的)我們可以把HDFS看成是一個容量巨大的、具有高容錯的磁盤,在使用的時候完全可以當作本地的磁盤進行使用,所以說HDFS是適用于海量數據的可靠性存儲。
Mapreduce
Mapreduce是一個分布式、并發處理的編程模型,用于進行大數據量的計算,MapReduce的名字源于模型中的兩個操作:Map(映射)和Reduce(歸納)。Mapreduce是一種簡化并進行應用程序開發的編程模型,能夠讓沒有多少并行應用經驗的開發人員可以進行快速地學會并行應用開發,而且不需要去關注并行計算中地一些底層問題,按照Mapreduce API的編程模型實現業務邏輯的開發即可。
一個Mapreduce作業通常會把輸入的結果集切分成若干個獨立的數據塊,由map任務以并行處理的方式,對map的輸出先進行排序,然后把結果輸入給reduce任務由reduce任務來完成最終的統一處理。通常Mapreduce作業的輸入和輸出都是用HDFS進行存儲的,也就是說Mapreduce框架處理數據的輸入源和輸出目的地大部分場景都是儲存在HDFS上。
在部署Hadoop集群時,通常是將計算節點和存儲節點部署在同一個節點上,這樣做的原因是允許計算框架在任務調度時,可以先將作業優先調度到那些已經存有數據節點上進行數據計算,這樣可以使整個集群的網絡帶寬十分高效地利用,這也是大數據中十分著名地話“移動計算而不是移動數據”。
Yarn
Yarn的全成是 Yarn Another Resource Negotiator,是一個同源資源管理系統,可以為運行在YARN之上的分布式程序提供統一的資源管理和調度。在Yarn我們可以運行不同類型的作業,如:Mapreduce、Spark、TEZ等不同的計算框架
Yarn是隨著Hadoop發展而催生的新框架,Yarn的基本思想是將Hadoop1.x中的Mapreduce架構中的JobTracker的資源管理和作業調度監控功能進行分離,解決了Hadoop1.x只能運行 Mapreduce框架的限制。
安裝
機器
準備3臺linux機器
本教程ip配置如下
修改主機名
vim /etc/sysconfig/network
ETWORKING=yes
HOSTNAME=datanode1
#其他機器依次執行
SSH
設置master節點和兩個slave節點之間的雙向ssh免密通信,下面以master節點ssh免密登陸slave節點設置為例,進行ssh設置介紹(以下操作均在master機器上操作):
首先生成master的rsa密鑰:ssh-keygen -t rsa
設置全部采用默認值進行回車
將生成的rsa追加寫入授權文件:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
給授權文件權限:chmod 600 ?~/.ssh/authorized_keys
進行本機ssh測試:ssh datasnode1 正常免密登陸后所有的ssh第一次都需要密碼,此后都不需要密碼
將master上的authorized_keys傳到datanode1
sudo scp ~/.ssh/id_rsa.pub hadoop@datanode1:~/
登陸到slave1操作:ssh slave1輸入密碼登陸
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
修改authorized_keys權限:chmod 600 ?~/.ssh/authorized_keys
退出slave1:exit
進行免密ssh登陸測試:ssh slave1
JAVA
1.解壓
tar -zxvf jdk-8u162-linux-x64.tar.gz -C /opt/module/
2.配置
# 修改 /etc/profile
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_162
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
3.更新
source /etc/profile
NTP 時間同步
修改配置
vim /etc/ntp.conf
主機配置
從機配置
從節點同步時間
service ntpd restart
chkconfig ntpd on ?# 開機啟動
ntpdate -u datanode1
crontab -e
* */1 * * * /usr/sbin/ntpdate datanode1 ? ? #每一小時同步一次
同步腳本
#!/bin/bash
#1 獲取輸入參數個數,如果沒有參數,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 獲取文件名稱
p1=
fname=`basename $p1`
echo fname=$fname
#3 獲取上級目錄到絕對路徑
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 獲取當前用戶名稱
user=`whoami`
#5 循環
for((host=1; host<4; host++)); do
#echo $pdir/$fname $user@datanode$host:$pdir
echo --------------- datanode$host ----------------
rsync -rvl $pdir/$fname $user@datanode$host:$pdir
done
解壓文件
tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
mv hadoop-2.7.2 hadoop
修改配置
export JAVA_HOME=/opt/module/jdk1.8.0_162
#some Java parameters
export JAVA_HOME=/opt/module/jdk1.8.0_162
export JAVA_HOME=/opt/module/jdk1.8.0_162
[hadoop@datanode1 module]$ xsync hadoop/
[hadoop@datanode1 module]$ xsync jdk1.8.0_162/
hdfs namenode -format
啟動
[hadoop@datanode1 hadoop]$ start-dfs.sh
[hadoop@datanode1 hadoop]$ jps
51235 NameNode
51356 DataNode
52111 Jps
51919 NodeManager
[hadoop@datanode3 hadoop]$ start-yarn.sh
[hadoop@datanode3 hadoop]$ jps
22260 ResourceManager
22090 DataNode
22384 NodeManager
23013 Jps
界面
大數據開發 Hadoop
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。