CentOS7上搭建Hadoop集群(入门级)
場景
Hadoop
??? Apache Hadoop是一款支持數據密集型分布式應用并以Apache 2.0許可協議發布的開源軟
件框架,支持在商品硬件構建的大型集群上運行應用程序。Hadoop是根據Google公司發表的
MapReduce和GFS論文自行開發而成的。
??? Hadoop框架透明地為應用提供可靠性和數據移動,它實現了名為MapReduce的編程范式:
應用程序被切分成許多小部分,而每個部分都能在集群中的任意節點上執行或重新執行。此
外,Hadoop還提供了分布式文件系統,用以存儲所有計算節點的數據,這為整個集群帶來了
非常高的帶寬。MapReduce和分布式文件系統的設計,使得整個框架能夠自動處理節點故障。
Hadoop2.0生態系統
HDFS
??? 對于分布式計算,每個服務器必須具備對數據的訪問能力,這就是HDFS (Hadoop
Distributed File System)所起到的作用。在處理大數據的過程中,當Hadoop集群中的服務器
出現錯誤時,整個計算過程并不會終止,同時HDFS可以保障在整個集群中發生故障錯誤時
的數據冗余。當計算完成時將結果寫入HDFS的一個節點之中,HDFS對存儲的數據格式并無
苛刻的要求,數據可以是非結構化或其他類別的,而關系數據庫在存儲數據之前需要將數據
結構化并定義Schema。
MapReduce
??? MapReduce是一個計算模型,用于大規模數據集的并行運算。它極大地方便了編程人員
在不會分布式并行編程的情況下,將自己的程序運行在分布式系統上。MapReduce的重要創
新是當處理一個大數據集查詢時會將其任務分解并在運行的多個節點中處理。當數據量很大
時就無法在一臺服務器上解決問題,此時分布式計算的優勢就體現出來了,將這種技術與
Linux服務器結合可以獲得性價比極高的替代大規模計算陣列的方法。Hadoop MapReduce級
的編程利用Java APIs,并可以手動加載數據文件到HDFS中。
ZooKeeper
??? ZooKeeper是一個分布式應用程序協調服務,是Hadoop和HBase的重要組件。它是一個
為分布式應用提供一致性服務的軟件,提供的功能包括配置維護、域名服務、分布式同步、
組服務等。
??? ZooKeeper集群提供了HA,可以保證在其中一些機器死機的情況下仍可以提供服務,而
且數據不會丟失;所有ZooKeeper服務的數據都存儲在內存中,且數據都是副本。ZooKeeper
集群中包括領導者(leader)和跟隨者( follower)兩種角色,當客戶端進行讀取時,跟隨者的
服務器負責給客戶端響應;客戶端的所有更新操作都必須通過領導者來處理。當更新被大多
數ZooKeeper服務成員持久化后,領導者會給客戶端響應。
HBase
??? HBase是一個針對結構化數據的可伸縮、高可靠、高性能、分布式和面向列的動態模式數
據庫。與傳統關系數據庫不同,HBase采用了BigTable的數據模型:增強的稀疏排序映射表
(key/value ),其中鍵由行關鍵字、列關鍵字和時間戳構成。HBase提供了對大規模數據的隨
機、實時讀寫訪問,使用Hadoop HDFS作為其文件存儲系統,同時HBase中保存的數據可以
使用MapReduce來處理,它將數據存儲和并行計算完美地結合在一起。
HBase與關系型數據的對比
Hive
??? Hive是基于Hadoop的一個數據倉庫工具,由Facebook開源,最初用于海量結構化日志
數據統計,可以將結構化的數據文件映射為一張數據庫表,并提供簡單的SQL查詢功能,可
以將SQL語句轉換為MapReduce任務運行。通常用于進行離線數據處理(采用MapReduce),
可以認為是一個從HQL (Hive QL)到MapReduce的語言翻譯器。
??? Hive的特點如下:
1、可擴展。Hive可以自由地擴展集群的規模,一般情況下不需要重啟服務。
2、支持UDF。Hive支持用戶自定義函數,用戶可以根據自己的需要來實現。
3、容錯。良好的容錯性,節點失效時SQL依然可以正確執行到結束。
4、自由的定義輸入格式。默認Hive支持txt, rc、sequence等,用戶可以自由地定制自
????? 己想要的輸入格式。
5、可以根據字段創建分區表,如根據日志數據中的日期。
Pig
??? Pig是一個高級過程語言,它簡化了Hadoop常見的工作任務,適合于使用Hadoop和
MapReduce平臺來查詢大型半結構化數據集。通過允許對分布式數據集進行類似SQL的查詢,
Pig可以簡化Hadoop的使用。Pig可以加載數據、表達轉換數據和存儲最終結果。Pig內置的
操作使得半結構化數據變得有意義(如日志文件),同時Pig可以擴展使用Java中添加的自定
義數據類型并支持數據轉換。可以避免用戶書寫MapReduce程序,由Pig自動轉成。任務編碼的方式允許系統自動去
優化執行過程,從而使用戶能夠專注于業務邏輯,用戶可以輕松地編寫自己的函數來進行特殊用途的處理。
Mahout
??? Mahout起源于2008年,最初是Apache Lucent的子項目,它在極短的時間內取得了長足
的發展,現在是Apache的頂級項目。Mahout的主要目標是創建一些可擴展的機器學習領域經
典算法的實現,旨在幫助開發人員更加方便快捷地創建智能應用程序。Mahout現在已經包含
了聚類、分類、推薦引擎(協同過濾)和頻繁集挖掘等廣泛使用的數據挖掘方法。除了算法,
Mahout還包含數據的輸入/輸出工具、與其他存儲系統(如數據庫、MongoDB或Cassandra)
集成等數據挖掘支持架構。
Sqoop
??? Sqoop是Hadoop與結構化數據存儲互相轉換的開源工具。可以使用Sqoop從外部的數據
存儲將數據導入到Hadoop分布式文件系統或相關系統,如Hive和HBase。Sqoop也可以用于
從Hadoop中提取數據,并將其導出到外部的數據存儲(如關系數據庫和企業數據倉庫),如
MySQL、Oracle、SQL Server,還可以通過腳本快速地實現數據的導入/導出。
Flume
??? Flume是Cloudera提供的一個高可用、高可靠、分布式的海量日志采集、聚合和傳輸的
系統。Flume支持在日志系統中定制各類數據發送方,用于收集數據。同時,Flume提供對數
據進行簡單處理,并寫到各種數據接收方(可定制)的能力。它將數據從產生、傳輸、處理
并最終寫入目標路徑的過程抽象為數據流,在具體的數據流中,數據源支持在Flume中定制
數據發送方,從而支持收集各種不同協議數據。同時,Flume數據流提供對日志數據進行簡單
處理的能力,如過濾、格式轉換等。總的來說,Flume是一個可擴展、適合復雜環境的海量日
志收集系統。
Chuwa
??? Chukwa是一個開源的用于監控大型分布式系統的數據收集系統,構建在Hadoop的HDFS
和MapReduce框架之上。Chukwa還包含了一個強大和靈活的工具集,可以用于展示、監控和
分析己收集的數據。
Oozie
??? Oozie是一個工作流引擎服務器,用于運行Hadoop MapReduce任務工作流(包括
MapReduce, Pig, Hive, Sqoop等)。Oozie Z作流通過HPDL (Hadoop Process Defintion
Languge)來構建,工作流定義通過HTTP提交,可以根據目錄中是否有數據來運行任務,任
務之間的依賴關系通過工作流來配置,任務可以定時調度。JobConf類要配置的內容,通過在
工作流(XML文件)中定義,實現了配置與代碼的分離。
Ambari
??? Ambari是一種基于Web的工具,用于創建、管理、監視Hadoop的集群,支持Hadoop HDFS,
Hadoop MapReduce, Hive, Hcatalog, HBase, ZooKeeper, Oozie, Pig和Sqoop等的集中管理。
Yarn
??? Yarn是Hadoop 2.0版本中的一個新增特性,主要負責集群的資源管理和調度。Yarn不僅
可以支持MapReduce計算,還支持Hive, HBase, Pig, Spark等應用,這樣就可以方便地使
用Yarn從系統層面對集群進行統一的管理。
??? Yarn仍然采用Master-Slave結構,在整個資源管理框架中,ResourceManager為Master,
NodeManager為Slave, ResourceManager負責整個系統的資源管理和分配,NodeManage:負責
每個DataNode上的資源和任務管理。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。
實現
集群環境搭建
1、首先搭建三臺CentOS7的服務器(虛擬機)。
CentOS7下載與各版本區別(國內鏡像網站下載):
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119025376
2、配置靜態IP
這樣可以避免IP沖突并獲得網絡相關信息
CentOS7中怎樣設置靜態IP:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119242495
3、配置主機名與hosts文件
配置一臺服務器為主節點master,另外兩臺為從節點slave1和從節點slave2
CentOS7中怎樣修改主機名和hosts文件(配置IP和主機名的對應管理):
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119245448
4、配置SSH免密鑰登錄。
??? Hadoop中的NameNode和DataNode數據通信采用了SSH協議,需要配置master對各slave
節點的免密鑰登錄。
CentOS7中多臺服務器配置SSH免密鑰登錄:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119245853
在設置之后如果使用虛擬機并且出現虛擬機內能訪問外網,虛擬機能訪問宿主機
但是宿主機訪問不了虛擬機的情況。
VMWare中修改CentOS虛擬機靜態IP后主機沒法訪問虛擬機:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119297108
5、安裝JDK
CentOS7中怎樣安裝JDK與配置環境變量:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119248028
三臺服務器上都配置一下
6、關閉所有虛擬機防火墻。
關閉防火墻
systemctl stop firewalld.service禁止firewall開機啟動
systemctl?disable?firewalld.service7、配置時鐘同步
CentOS7中多臺服務器配置時鐘同步:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119276930
Hadoop的安裝
下載地址:
http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz
這里下載的版本是2.8.0
下載成功之后
將其上傳到master主服務器并解壓到根目錄下hadoop目錄下
或者說可以直接用
wget https://archive.apache.org/dist/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz將其下載到服務器上并解壓
修改配置文件
進入解壓之后的/etc/hadoop目錄下可以看到這里很多配置文件
1、修改hadoop-env.sh 和 yarn-env.sh
以env.sh結尾的文件通常是配置所需的環境變量。
修改Java環境變量,修改為前面Java的安裝路徑
修改Hapdoop-env.sh
修改yarn-env.sh
2.修改core-site.xml
core-site.xml是Hadoop的全局配置文件,主要設置一些核心參數信息
如:
fs.defaultFS 設置集群的HDFS訪問路徑
hadoop.tmp.dir 指定NameNode、DataNode等存放數據的公共目錄
首先創建如下目錄
mkdir -p /hadoop/hdfs/tmp然后修改配置文件在<configuration>中添加如下
<configuration><property><name>fs.defaultFS</name><value>hdfs://master:9000</value></property><property><name>hadoop.tmp.dir</name><value>/hadoop/hdfs/tmp</value></property> </configuration>3、修改hdfs-site.xml
該文件是HDFS的配置文件,在<configuration>中添加如下
<configuration><property><name>dfs.replication</name><value>2</value></property> </configuration>dfs.replication用來設置副本存放個數,在實際生產中還會設置
dfs.namenode.name.dir? NameNode的存放路徑
dfs.datanode.data.dir DataNode的存放路徑
同時將core-site.xml中的hadoop.tmp.dir去掉避免沖突。
這里有幾個注意點:
這里設置這兩個目錄和上面core-site中設置的目錄為了避免沖突,要二選一,
最好不要都設置,甚至兩個設置不一樣的路徑。
然后這個路徑一定要提前創建好,否則put文件到hdfs系統時就會報錯。
4、修改mapred-site.xml
該文件是MapReduce的配置文件,由于Hadoop中不存在該文件,因此首先復制一個
cp /hadoop/hadoop-2.8.0/etc/hadoop/mapred-site.xml.template? /hadoop/hadoop-2.8.0/etc/hadoop/mapred-site.xml然后將其修改為指定由Yarn作為MapReduce的程序運行框架
如果沒有配置這項,那么提交的程序只會運行在local模式,而不是分布式模式。
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property> </configuration>5、修改yarn-site.xml
yarn-site.xml用來配置Yarn的一些信息。
yarn.nodemanager.aux-services?
配置用戶自定義服務,例如MapReduce的shuffle
yarn.resourcemanager.address?
設置客戶端訪問的地址,客戶端通過該地址向RM提交應用程序殺死應用程序等。
yarn.resourcemanager.scheduler.address?
設置ApplicationMaster的訪問地址,通過該地址向ResouceManager申請資源、釋放資源等
yarn.resourcemanager.resource-track.address?
設置NodeManager的訪問地址,通過該地址向ResourceManager匯報心跳、領取任務等。
yarn.resourcemanager.admin.address
設置管理員的訪問地址,通過該地址向ResouceManager發送管理命令等
yarn.resourcemanager.webapp.address
設置對外ResourceManager Web訪問地址,用戶可通過該地址在瀏覽器中查看集群的各類信息
修改為:
<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.resourcemanager.address</name><value>master:18040</value></property><property><name>yarn.resourcemanager.scheduler.address</name><value>master:18030</value></property><property><name>yarn.resourcemanager.resource-tracker.address</name><value>master:18025</value></property><property><name>yarn.resourcemanager.admin.address</name><value>master:18141</value></property><property><name>yarn.resourcemanager.webapp.address</name><value>master:18088</value></property> </configuration>6、創建文件slaves
touch /hadoop/hadoop-2.8.0/etc/hadoop/slaves將其內容修改為各slave節點的主機名
通過該master節點知道集群中有幾個子節點,然后通過主機名和/etc/hosts的信息就知道各子節點對應的IP并和其通信
該文件只需在master節點配置即可,子節點不需要。
7、將修改后的hadoop分發到子節點。
scp -r /hadoop slave1:/ scp -r /hadoop slave2:/這個過程可以會比較慢,需要等待
8、修改所有節點的環境變量
在/etc/profile的文件末尾添加Hadoop的環境變量
vim /etc/profile添加如下配置
export HADOOP_HOME=/hadoop/hadoop-2.8.0 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin然后使環境變量生效
source/etc/profile驗證下是否配置成功
hadoop version9、在master節點格式化NameNode
hdfs namenode -format等待格式化完成
10、在master節點啟動start-all.sh
start-all.sh就等同于start-dfs.sh和start-yarn.sh
此啟動命令在sbin目錄下,包括停止的腳本stop-all.sh
啟動后會提示輸入yes
啟動成功之后,在master以及各slave節點輸入
jps如果出現如下則是集群正常搭建
這塊需要特別注意的是:
1、在配置Hadoop集群的時候,可能會不小心多次執行啟動和格式化,這樣會造成NameNode
和DataNode中的cIusterlD值不一致,遇到這種情況修改DataNode中的clusterlD即可,位置
在/hadoop/hdfs/tmp/dfs/data/current/VERSION
2、在初學的時候由于配置步驟不熟悉或者集群非正常關閉,會出現進程都己啟動,但是
DataNode為0的情況,可以通過Web訪問查看集群情況,或者運行Hadoop自帶的MapReduce
實例驗證集群節點情況,如果出現異常,可以根據各個節點下的log日志查看異常原因.通常
可以通過以下方法解決:
??? 執行stop-all.sh命令,通過jps查看是否還有僵尸進程存在,有的話
將其殺死
??? 然后刪除/hadoop/dfs/tmp目錄下的所有文件,重新對其格式化。
3、如果確定是master的各個配置文件配置的不正確,需要將各子節點的hadoop目錄全部刪掉
然后從master節點中將配置正確后的整個hadoop目錄全部分發到各子節點,然后重新執行后面的
流程。
11、檢查NameNode和DataNode是否啟動正常
在瀏覽器中輸入
http://192.168.148.128:50070/
檢查NameNode是否啟動正常
?然后點擊Datanodes檢查是否啟動正常
12、檢查Yarn是否啟動正常
在瀏覽器中輸入
http://192.168.148.128:18088/
13、驗證整個集群是否正常
在master節點上運行Hadoop自帶的MapReduce例子,以驗證整個集群是否正常。
進入目錄/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/
運行命令
hadoop jar hadoop-mapreduce-examples-2.8.0.jar pi 10 10這個代碼是通過啟動10個map和10個reduce任務求pi值,如果出現如下則是整個集群正常。
如果運行后提示:
There are 0 datanode(s) running and no node(s) are excluded in this operation
則可能是如下原因
1、上面講的多次格式化之后clusterID不一致。
2、兩個地方配置的NameNode和DataNode的路徑不一致或者有問題。
3、服務器的防火墻沒有關。
4、其他原因導致datanode沒有正常啟動。
總結
以上是生活随笔為你收集整理的CentOS7上搭建Hadoop集群(入门级)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VMWare中修改CentOS虚拟机静态
- 下一篇: HDFS的访问方式之HDFS shell