hadoop集羣搭建-Linux(Haoop cluster on Linux)

1.hadoop簡介
hadoop是當今流行的分佈式並行計算框架和大數據解決方案,利用基於商品硬件的計算機集羣,具有容錯性好和伸縮性強的特點。造價低廉,技術通用開放,維護和管理方便。特別適合超大數據的處理,對於TB和PB級的數據都可以應付(當然需要往集羣中加入更多的機器,上百、上千或者上萬臺機器的hadoop集羣都屢見不鮮)。
與其他並行計算不同的一個鮮明特點是其計算理念:代碼向數據處移動,而不是數據向代碼處移動。
理解這個計算理念是深入理解hadoop的基石。試想我們用傳統方法怎麼處理一個文件:將文件拿到代碼運行的機器,然後以拿到的文件作爲程序的輸入,在本地計算機進行處理,最後將結果輸出。但是當文件特別大時比如10TB,而本地計算機的磁盤( 如100G)和內存(如8G)較小時,用這種方式來處理是不可能的;即使將文件分成片(每片足夠小都可被本地計算機處理)運送過來處理,但是處理完成恐怕也得很長時間以後。因此可行的做法是將處理的代碼發送到數據所在的機器,並且數據所在的環境最好是多個計算機組成的集羣,集羣裏的機器並行運算,邏輯上猶如一個超大硬盤超大內存的超大型計算機。

2.基本概念與術語
hadoop基於2種基本技術,一是hadoop分佈式文件系統即hdfs,另一個是mapreduce計算框架。hadoop的生產環境的最初目標操作系統爲linux(Redhat,SuSE,Oracle Linux,Ubuntu等都可以),經過Hortonworks和微軟的合作,hadoop運行的操作系統也可以是Windows。
hdfs承擔存儲功能,mapreduce承擔計算功能。

mapreduce有2種版本,一是mapreduce v1,二是mapreduce v2.無論v1還是v2,都支持四個基本概念:name node, job tracker, data node,task tracker.
理解這四個基本概念是理解hadoop集羣的基礎。
hdfs:無論文件多大,hadoop都可以容納:添加新的機器以擴充其容量,一個大文件可以按塊分佈在不同機器上,各個機器上的文件分佈都統一在name node上管理。
name node:提供元數據管理和名字空間管理。任何文件的分佈情況都可從name node 上查詢得知。
data node : 每臺data機器上都有一個data node,負責數據管理。
job tracker :負責mapreduce 計算任務的資源管理和調度,會向各個data node分派任務。
task tracker:每臺data node機器上有一個task tracker,負責監控本機上的計算任務執行情況。
name node, data node, job tracker和task tracker是OS的四個守護進程,是hadoop集羣運行的基礎。
因爲data node 所在的機器既能承擔計算任務又能承擔存儲任務,因此data node機器上同時運行task tracker.也可以將name node和job tracker 運行在一臺機器上。

從邏輯上看,hadoop集羣如下圖所示:


物理結構上,hadoop集羣如下圖所示:


也可以將承擔matser角色的組件全都運行在一臺機器上


自從hadoop 2.x後,其資源調度框架改爲YARN (Yet Another Resource Negotiator)

YARN的邏輯結構如下:



3.所需要的軟硬件環境

硬件:

 選項一:準備若干臺計算機,pc機、小型機、服務器、筆記本電腦等都可以。
 選項二:在一臺計算機上利用虛擬化軟件(vmware,oracle virtualbox等)跑多臺虛擬機。
軟件:
 操作系統:linux (如ubuntu, redhat, SUSE等)
 JAVA: jdk1.6或者jdk1.7   
 hadoop軟件包: hadoop-1.1.2 或者0.23.x。 下載地址:http://apache.etoak.com/hadoop/common/


4.正式搭建hadoop集羣(hadoop-1.x或0.23.x)
假設我們要搭建一個有三個節點的hadoop cluster,一個節點作爲master運行namenode,jobtracker(主機名爲master)和seconday namenode;其他兩個節點作爲 slave運行datanode和 tasktracker(主機名分別爲slave1,slave2)。每個節點操作系統都是ubuntu。
4.1 在每個節點上建立一個同名用戶,比如hduser。
以下步驟儘量以hduser登錄並執行。
4.2 在每個節點上確保java 已經安裝。
4.3 在每個節點運行  sudo apt-get install ssh 來安裝ssh(以root用戶運行此命令也可,hduser用戶也可使用ssh)。
4.4 配置每臺機器的/etc/hosts保證各臺機器之間通過機器名可以互訪,如果已經互連則忽略此步驟。
4.5 在每個節點上執行以下命令:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
4.6 在master上執行:
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys  

如果是RPM-based Linux,如 redHat,還需執行 chmod 644 ~/.ssh/authorized_keys
---保證可在master無需密碼以ssh登錄到本機(ssh localhost)

scp  ~/.ssh/authorized_keys   slave1:/home/hduser/.ssh/
scp  ~/.ssh/authorized_keys   slave2:/home/hduser/.ssh/
---保證可在master無需密碼以ssh登錄到slave1,slave2(ssh salve1  ; ssh slave2)
4.7 在master上將hadoop安裝包解壓安裝,比如安裝到~/hadoop
4.8 在master上配置conf/hadoop-env.sh文件
#添加
export JAVA_HOME=/usr/lib/jvm/java-6-sun/ (這裏修改爲你的jdk的安裝位置。 )
可以先在master上進行,然後用scp拷貝到其他機器 (scp  ~/hadoop/conf/hadoop-env.sh hduser@slave:~/hadoop/conf/hadoop-env.sh)。
4.9  在master上 配置~/hadoop/conf/slaves文件,每行一個機器名
slave1
slave2
4.10 在master上編輯hadoop配置文件~/hadoop/conf/core-site.xml, ~/hadoop/conf/hdfs-site.xml,   ~/hadoop/conf/mapred-site.xml
core-site.xml:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
  <property>   
   <name>fs.default.name</name>
   <value>hdfs://master:9000</value> //根據你的環境修改
  </property>
<property>
    <name>hadoop.tmp.dir</name>//Hadoop的默認臨時路徑,這個最好配置(如果不配置hadoop有時會莫名其妙無法啓動),
    <value>/home/hduser/tmp/</value>
</property>
</configuration>

hdfs-site.xml :
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>
</configuration>

mapred-site.xml:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
 <property>
   <name>mapred.job.tracker</name>
   <value>master:9001</value> //根據你的環境修改
 </property>
</configuration>

然後用scp將整個~/hadoop拷貝到其他機器 (scp -rp ~/hadoop hduser@slave:~/)

4.10 格式化文件系統
~/hadoop/bin/hadoop namenode -format
4.11 啓動hadoop
~/hadoop/bin/start-all.sh
如果要停止hadoop :~/hadoop/bin/stop-all.sh
4.12 驗證hadoop 運行:
在master瀏覽器上執行: http://localhost:50030  和http://localhost:50070/ 可以分別看到mapreduce job和hdfs
4.13 加入新節點:
在NameNode節點上修改$HADOOP_HOME/conf/slaves文件,加入新加節點主機名,再建立到新加節點無密碼的SSH連接
運行啓動命令:
start-all.sh






發佈了30 篇原創文章 · 獲贊 7 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章