研究hadoop分散式運算平臺及三台伺服器的實現
來源:互聯網
上載者:User
參考文章
HTTP://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop1/index.html
HTTP://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop2/index.html
HTTP://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop3/
HTTP://hi.baidu.com/zeorliu/blog/item/3633468235fce8a40cf4d23d.html
按照developerworks上的這幾篇文章去做,就可以把hadoop配置起來,我在這裡就不多囉嗦了,下面呢是我在配置過程中遇到問題時的一些記錄,可以參考一下。
--------------20080819------------------
安裝cygwin
HTTP://bbs.wuyou.com/viewthread.php?tid=119296&extra=page%3D6
體驗hadoop
$ cd /cygdrive/e/workspace/searchengine/hadoop/hadoop-0.18.0
$ mkdir test-in
$ cd test-in
#在 test-in 目錄下創建兩個文字檔, WordCount 程式將統計其中各個單詞出現次數
$ echo "hello world bye world" >file1.txt
$ echo "hello hadoop goodbye hadoop" >file2.txt
$ cd ..
$ bin/hadoop jar hadoop-0.18.0-examples.jar wordcount test-in test-out
#執行完畢,下面查看執行結果:
$ cd test-out
$ cat part-00000
bye 1
goodbye 1
hadoop 2
hello 2
world 2
-------------------------20080822
偽分散式運行模式
這種模式也是在一台單機上運行,但用不同的 JAVA 進程模仿分散式運行中的各類結點 ( NameNode, DataNode, JobTracker, TaskTracker, Secondary NameNode ),請注意分散式 運行中的這幾個結點的區別:
從分散式存儲的角度來說,集群中的結點由一個 NameNode 和若干個 DataNode 組成, 另有一個 Secondary NameNode 作為 NameNode 的備份。 從分散式應用的角度來說,集群中的結點由一個 JobTracker 和若干個 TaskTracker 組成,JobTracker 負責任務的調度,TaskTracker 負責並存執行任務。 TaskTracker 必須運行在 DataNode 上,這樣便於資料的本地計算。 JobTracker 和 NameNode 則無須在同一台機器上。
(1) 按代碼清單2修改 conf/hadoop-site.xml。 注意 conf/hadoop-default.xml 中是 Hadoop 缺省的參數,你可以通過讀此檔瞭解 Hadoop 中有哪些參數可供配置,但不要修改此檔。 可通過修改 conf/hadoop-site.xml 改變缺省參數值,此檔中設置的參數值會覆蓋 conf/hadoop-default.xml 的同名參數。
<configuration>
<property>
<name>fs.default.name</name>
<value>localhost:9000</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
(2)配置 SSH,如代碼清單3所示:
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ cd /cygdrive/c/hadoop-0.16.0
$ bin/hadoop namenode –format
$ bin/start-all.sh
$ ps –ef
$ bin/hadoop dfs -put ./test-in input
#將本地檔案系統上的 ./test-in 目錄拷到 HDFS 的根目錄上,目錄名改為 input
#執行 bin/hadoop dfs –help 可以學習各種 HDFS 命令的使用。
$ bin/hadoop jar hadoop-0.18.0-examples.jar wordcount input output
#查看執行結果:
#將檔從 HDFS 拷到本地檔案系統中再查看:
$ bin/hadoop dfs -get output output
$ cat output/*
#也可以直接查看
$ bin/hadoop dfs -cat output/*
$ bin/stop-all.sh #停止 hadoop 進程
故障診斷
(1) 執行 $ bin/start-all.sh 啟動 Hadoop 進程後,會啟動5個 java 進程, 同時會在 /tmp 目錄下創建五個 pid 檔記錄這些進程 ID 號。 通過這五個檔,可以得知 namenode, datanode, secondary namenode, jobtracker, tasktracker 分別對應于哪一個 JAVA 進程。 當你覺得 Hadoop 工作不正常時,可以首先查看這5個 java 進程是否在正常運行。
(2) 使用 web 介面。 訪問 HTTP://localhost:50030 可以查看 JobTracker 的運行狀態。 訪問 HTTP://localhost:50060 可以查看 TaskTracker 的運行狀態。 訪問 HTTP://localhost:50070 可以查看 NameNode 以及整個分散式檔案系統的狀態,流覽分散式檔案系統中的檔以及 log 等。
(3) 查看 ${HADOOP_HOME}/logs 目錄下的 log 檔,namenode, datanode, secondary namenode, jobtracker, tasktracker 各有一個對應的 log 檔 ,每一次運行的計算任務也有對應用 log 檔。 分析這些 log 檔有助於找到故障原因。
---------------------20080825---------------------
下載所有版本,取0.18做為研究版本,需要下載jdk1.6來編譯,才能通過
---------------------20080826---------------------------
安裝IBM MapReduce Tools for Eclipse
1)配置Hadoop Home Directory ,注意這個目錄下面需要有*core.jar包
2)配置運行,start Hadoop Server,需要指定cygwin的目錄方式,才能找到hadoop home
用192.168.1.91~93做測試,91為linux1,92為linux2,93為linux3.
linux1通過可信任的ssh方式來登錄linux2,linux3,來控制tasktracker和datanode
hadoop目錄:/home/kevin/hadoop-0.18
jdk目錄:/home/kevin/jdk1.6.0_10
>>>>>設定檔
masters內容如下:
linux1
slaves內容如下:
linux2
linux3
hadoop-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://linux1:9000/</value>
<description>The name of the default file system. Either the literal string
"local" or a host:port for DFS.</description>
</property>
<property>
<name>mapred.job.tracker</name>
<value>hdfs://linux1:9001/</value>
<description>The host and port that the MapReduce job tracker runs at. If
"local", then jobs are run in-process as a single map and reduce task.</description>
</property>
<property>
<name>dfs.name.dir</name>
<value>/home/kevin/hadoopfs/name</value>
<description>Determines where on the local filesystem the DFS name node
should store the name table. If this is a comma-delimited list of directories
then the name table is replicated in all of the directories,
for redundancy. </description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/kevin/hadoopfs/data</value>
<description>Determines where on the local filesystem an DFS data node
should store its blocks. If this is a comma-delimited list of directories,
then data will be stored in all named directories, typically on different devices.
Directories that do not exist are ignored.</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>Default block replication. The actual number of replications
can be specified when the file is created. The default is used if replication
is not specified in create time.</description>
</property>