hadoop集羣配置和測試

剛接觸Hadoop三天,今天終於成功用三臺機跑起測試,記錄一下。html

 

1、準備(全部節點都須要作):java

系統:Ubuntu12.04node

java版本:JDK1.7(安裝步驟看上一篇文章)ubuntu

SSH(ubuntu自帶)服務器

確保三臺機在同一個ip段,最好設置爲靜態IP,重啓後就不用糾結IP變化了ssh

機器分配:一臺master,兩臺slavejvm

 

個人主機信息是(hosts文件添加以下信息):分佈式

192.168.88.123    h1ide

192.168.88.124    h2oop

192.168.88.125    h3

其中第一項是內網IP ,第二項是主機名

 

各節點做用:

h1:NameNode、JobTracker

h2:DataNode、TaskTracker

h3:DataNode、TaskTracker

 

安裝SSH:

sudo apt-get install ssh

測試:ssh localhost

輸入當前用戶的密碼回車 沒異常說明安裝成功

 

開啓SSHD服務:

安裝:sudo apt-get install openssh-server

確認是否啓動:

ps  -e | grep  ssh

找到到sshd,有即啓動了。

 

建立Hadoop用戶(名爲grid)

adduser grid

信息隨便填,之後運行操做Hadoop都是用這個用戶(注意看清命令行別用了其餘用戶)

 

2、配置Hadoop

  1.無密碼登錄

  在Hadoop啓動之後,Namenode是經過SSH(Secure Shell)來啓動和中止各個datanode上的各類守護進程的,這就需要在節點之間執行指令的時候是不需要輸入密碼的形式,故咱們需要配置SSH運用無密碼公鑰認證的形式。

 首先設置namenode的ssh爲無需密碼的、自動登錄。

  換切到grid用戶

  su grid

  cd

  ssh-keygen -t rsa

  完成後會在grid目錄產生隱藏文件.ssh,經過ls查看,而後

  cp id_rsa.pub authorized_keys

  測試

  ssh h1

  第一次會提示確認繼續鏈接,打yes,這會把該服務器添加到你的已知主機列表中

  一樣在h2,h3上作以上操做

  最後,如何使各個節點相互訪問不須要密碼,將三個節點的authorized_keys文件裏面的內容合成一個文件而後替換掉原來的,替換完畢後能夠用 

  ssh XX(XX爲主機名)

  相互測試是否鏈接成功。

 

  2.配置Hadoop文件:

在hadoop/conf目錄下修改文件有hadoop-env.sh,core-site.xml,hdfs-site.xml,mapred-site.xml,master,slaves

hadoop-env.sh

修改JAVA_HOME路徑

export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45

記得去掉前面的#

 

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://h1:49000</value>
    </property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/grid/var</value>
</property>
</configuration>

 

1)fs.default.name是NameNode的URI。hdfs://主機名:端口/
2)hadoop.tmp.dir :Hadoop的默認臨時路徑,這個最好配置,若是在新增節點或者其餘狀況下莫名其妙的DataNode啓動不了,就刪除此文件中的tmp目錄便可。不過若是刪除了NameNode機器的此目錄,那麼就須要從新執行NameNode格式化的命令。

 

 

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.name.dir</name>
    <value>/home/grid/name1,/home/grid/name2</value> 
    <description> </description>
</property>
<property>
    <name>dfs.data.dir</name>
    <value>/home/grid/data1,/home/grid/data2</value>
    <description> </description>
</property>
<property>
    <name>dfs.replication</name>
    <value>2</value>
    </property>
</configuration>

 

1) dfs.name.dir是NameNode持久存儲名字空間及事務日誌的本地文件系統路徑。 當這個值是一個逗號分割的目錄列表時,nametable數據將會被複制到全部目錄中作冗餘備份。
2) dfs.data.dir是DataNode存放塊數據的本地文件系統路徑,逗號分割的列表。 當這個值是逗號分割的目錄列表時,數據將被存儲在全部目錄下,一般分佈在不一樣設備上。
3)dfs.replication是數據須要備份的數量,默認是3,若是此數大於集羣的機器數會出錯。

注意:此處的name一、name二、data一、data2目錄不能預先建立,hadoop格式化時會自動建立,若是預先建立反而會有問題。

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>h1:49001</value>    
    </property>
    <property>
        <name>mapred.local.dir</name>
        <value>/home/grid/var</value>
    </property>
</configuration>

 

1)mapred.job.tracker是JobTracker的主機(或者IP)和端口。主機:端口。

 

配置masters和slaves主從結點

master

h1

slaves

h2
h3

 

配置完畢,把配置好的hadoop文件夾拷貝到其餘集羣的機器上,並保證其餘機器的JDK 安裝路徑一致(若是不一致就另外再修改配置文件conf/hadoop-env.sh憋)

scp -r /home/grid/hadoop-0.20.2 grid@h2:/home/grid

scp -r /home/grid/hadoop-0.20.2 grid@h2:/home/grid

 

3、啓動Hadoop

一、先格式化一個新的分佈式文件系統

cd

bin/hadoop namenode -format

成功後系統輸出: 

INFO common.Storage: Storagedirectory /opt/hadoop/hadoopfs/name2 has been successfully formatted.

這一行,看到successfully單詞木有,格式化成功。

 

執行完後能夠到master機器上看到/home/hadoop//name1和/home/hadoop//name2兩個目錄。

 

2.啓動全部節點

在主節點master上面啓動hadoop,主節點會啓動全部從節點的hadoop

cd

bin/start-all.sh(同時啓動HDFS和Map/Reduce)

輸出:

grid@h1:~/hadoop-0.20.2$ bin/start-all.sh
starting namenode, logging to /home/grid/hadoop-0.20.2/bin/../logs/hadoop-grid-namenode-h1.out
h2: starting datanode, logging to /home/grid/hadoop-0.20.2/bin/../logs/hadoop-grid-datanode-h2.out
h3: starting datanode, logging to /home/grid/hadoop-0.20.2/bin/../logs/hadoop-grid-datanode-h3.out
h1: starting secondarynamenode, logging to /home/grid/hadoop-0.20.2/bin/../logs/hadoop-grid-secondarynamenode-h1.out
starting jobtracker, logging to /home/grid/hadoop-0.20.2/bin/../logs/hadoop-grid-jobtracker-h1.out
h2: starting tasktracker, logging to /home/grid/hadoop-0.20.2/bin/../logs/hadoop-grid-tasktracker-h2.out
h3: starting tasktracker, logging to /home/grid/hadoop-0.20.2/bin/../logs/hadoop-grid-tasktracker-h3.out

 

沒有出現什麼Error或Warming之類的就表示運行成功了

運行成功後看看程序是否正常

/usr/lib/jvm/jdk1.7.0_45/bin//jps

能夠看到在h1結點上有進程

2928 NameNode
3319 Jps
3105 SecondaryNameNode
3184 JobTracker

很熟悉的字眼我就很少說了,在slaves結點上也檢測下是否正常,會有

TaskTracker,DataNode

 

若沒缺乏以上進程即配置有問題。

 

4、測試

建一個目錄,裏面建兩個txt文件,用hadoop項目現有的hadoop-0.20.2-examples.jar例子測試txt裏面單詞的出現次數。

cd

mkdir input

cd input

echo "hello world" > test1.txt

echo "hello hadoop" > test2.txt

建完文件後,將文件放到HDFS系統的in目錄上

cd ../hadoop-0.20.2

bin/hadoop dfs -put ../input in

 

測試了,運行

bin/hadoop jar hadoop-0.20.2-examples.jar wordcount in out

會出現一系列的運行信息

grid@h1:~/hadoop-0.20.2$ bin/hadoop jar hadoop-0.20.2-examples.jar wordcount in out
13/12/26 14:04:05 INFO input.FileInputFormat: Total input paths to process : 2
13/12/26 14:04:06 INFO mapred.JobClient: Running job: job_201312261337_0006
13/12/26 14:04:07 INFO mapred.JobClient:  map 0% reduce 0%
13/12/26 14:04:14 INFO mapred.JobClient:  map 50% reduce 0%
13/12/26 14:04:15 INFO mapred.JobClient:  map 100% reduce 0%
13/12/26 14:04:23 INFO mapred.JobClient:  map 100% reduce 100%
13/12/26 14:04:25 INFO mapred.JobClient: Job complete: job_201312261337_0006
13/12/26 14:04:25 INFO mapred.JobClient: Counters: 17
13/12/26 14:04:25 INFO mapred.JobClient:   Job Counters 
13/12/26 14:04:25 INFO mapred.JobClient:     Launched reduce tasks=1
13/12/26 14:04:25 INFO mapred.JobClient:     Launched map tasks=2
13/12/26 14:04:25 INFO mapred.JobClient:     Data-local map tasks=2
13/12/26 14:04:25 INFO mapred.JobClient:   FileSystemCounters
13/12/26 14:04:25 INFO mapred.JobClient:     FILE_BYTES_READ=55
13/12/26 14:04:25 INFO mapred.JobClient:     HDFS_BYTES_READ=25
13/12/26 14:04:25 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=180
13/12/26 14:04:25 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=25
13/12/26 14:04:25 INFO mapred.JobClient:   Map-Reduce Framework
13/12/26 14:04:25 INFO mapred.JobClient:     Reduce input groups=3
13/12/26 14:04:25 INFO mapred.JobClient:     Combine output records=4
13/12/26 14:04:25 INFO mapred.JobClient:     Map input records=2
13/12/26 14:04:25 INFO mapred.JobClient:     Reduce shuffle bytes=61
13/12/26 14:04:25 INFO mapred.JobClient:     Reduce output records=3
13/12/26 14:04:25 INFO mapred.JobClient:     Spilled Records=8
13/12/26 14:04:25 INFO mapred.JobClient:     Map output bytes=41
13/12/26 14:04:25 INFO mapred.JobClient:     Combine input records=4
13/12/26 14:04:25 INFO mapred.JobClient:     Map output records=4
13/12/26 14:04:25 INFO mapred.JobClient:     Reduce input records=4

 

  

沒有什麼Error或Warming之類的字眼特別是有

map 100% reduce 100%

表示成功運行了,結果可一輸入

bin/hadoop dfs -cat out/*

看到結果

hadoop 1
hello 2
world 1

 

over。。。。。。

相關文章
相關標籤/搜索