1. 程式人生 > >mesos上安裝hadoop過程簡介

mesos上安裝hadoop過程簡介

有關於mesos的安裝過程,可以參見上一篇文章。本文假設mesos的執行環境已經配置、部署成功。mesos-0.9.0中集成了hadoop-0.20.205.0這個版本的hadoop,是否對於其他版本的hadoop支援,本文沒有驗證。
1、進入安裝時編譯mesos的目錄:mesos-0.9.0,然後執行make hadoop命令,假如沒有發生任何異常,可以直接進入下一步,假如出現這樣的錯誤:
[javac] /home/ddx/mesos-0.9.0/hadoop/hadoop-0.20.205.0/src/contrib/gridmix/src/java/org/apache/hadoop/mapred/gridmix/Gridmix.java:399: 錯誤: 型別引數? extends T不在型別變數E的範圍內 [javac] /home/ddx/mesos-0.9.0/hadoop/hadoop-0.20.205.0/src/contrib/gridmix/src/java/org/apache/hadoop/mapred/gridmix/Gridmix.java:396: 錯誤: 型別引數? extends T不在型別變數E的範圍內 BUILD FAILED
/home/mesos/mesos-0.9.0/build/hadoop/hadoop-0.20.205.0/build.xml:659:
The following error occurred while executing this line: /home/mesos/mesos-0.9.0/build/hadoop/hadoop-0.20.205.0/src/contrib/build.xml:30:
The following error occurred while executing this line: /home/mesos/mesos-0.9.0/build/hadoop/hadoop-0.20.205.0/src/contrib/build-contrib.xml:193:
Compile failed; see the compiler error output for details.
Total time: 10 seconds Oh no! We failed to run 'MESOS_JAR=/home/mesos/mesos-0.9.0/build/src/mesos-0.9.0.jar ant'. If you need help try emailing:
我們應該進入 /home/ddx/mesos-0.9.0/hadoop/hadoop-0.20.205.0/src/contrib/gridmix/src/java/org/apache/hadoop/mapred/gridmix/Gridmix.java
將解決方法是把Enum改成Enum,兩處都要改動,重新make hadoop,就可以執行成功。
這一步其實很關鍵,因為假如沒有成功的話,在後面啟動jobtracker的時候會爆出一些莫名其妙的錯誤,讓人很是頭疼,至於錯誤的原因我目前也是不是很清楚,可能是jdk版本不同造成的!


2、make hadoop執行完畢之後會在mesos-0.9.0的目錄中生成一個hadoop/hadoop-0.20.205.0的目錄,有關於hadoop的所有東西,這下面都有了。
這個時候我們要將編譯生成的兩個jar包拷貝到hadoop的目錄下(其實這一步不是必須的,這樣做主要為了後面指明這個兩個jar包的位置的時候比較的方便),分別是:/home/ddx/mesos-0.9.0/protobuf-2.4.1.jar和/home/ddx/mesos-0.9.0/src/mesos-0.9.0.jar:
cp /home/ddx/mesos-0.9.0/protobuf-2.4.1.jar /home/ddx/mesos-0.9.0/hadoop/
cp /home/ddx/mesos-0.9.0/src/mesos-0.9.0.jar /home/ddx/mesos-0.9.0/hadoop/


3、然後進入/home/ddx/mesos-0.9.0/hadoop/hadoop-0.20.205.0/conf/目錄下,配置:mapred-site.xml,core-site.xml,hdfs-site.xml,hadoop-env.sh,masters,slaves這六個檔案,如下:
(1)core-site.xml


<configuration>
<property>
  <name>fs.default.name</name>
  <value>hdfs://master:54310</value>
  <description>The name of the default file system.  A URI whose
  scheme and authority determine the FileSystem implementation.  The
  uri's scheme determines the config property (fs.SCHEME.impl) naming
  the FileSystem implementation class.  The uri's authority is used to
  determine the host, port, etc. for a filesystem.</description>
</property>
</configuration>
~


(2)hdfs-site.xml


<configuration>
<property>
  <name>dfs.replication</name>
  <value>3</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>
</configuration>
~


(3)mapred-site.xml


<configuration>
  <property>
    <name>mapred.job.tracker</name>
    <value>master:54311</value>
  </property>
  <property>
    <name>mapred.jobtracker.taskScheduler</name>
    <value>org.apache.hadoop.mapred.MesosScheduler</value>
  </property>
  <property>
    <name>mapred.mesos.master</name>
    <value>master:5050</value>
  </property>
</configuration>
~


(4)hadoop-env.sh在其中追加一下內容:


export PROTOBUF_JAR=/home/ddx/mesos-0.9.0/hadoop/protobuf-2.4.1.jar


# Mesos.
export MESOS_JAR=/home/ddx/mesos-0.9.0/hadoop/mesos-0.9.0.jar


# Native Mesos library.
export MESOS_NATIVE_LIBRARY=/home/ddx/mesos/lib/libmesos.so


# The java implementation to use.  Required.
export JAVA_HOME=/usr/local/jdk1.7.0_09/


# Extra Java CLASSPATH elements.  Optional.
export HADOOP_CLASSPATH=/home/ddx/mesos-0.9.0/hadoop/hadoop-0.20.205.0/build/contrib/mesos/classes:${MESOS_JAR}:${PROTOBUF_JAR}
(5)masters
master


(6)slaves
slave1
slave2
其中master和slave的關係與上文中mesos的配置時一樣的。


4、將編譯配置好的檔案/home/ddx/mesos-0.9.0/hadoop/拷貝到slave1和slave2的相同路徑下。
scp -r /home/ddx/mesos-0.9.0/hadoop slave1:/home/ddx/mesos-0.9.0/
scp -r /home/ddx/mesos-0.9.0/hadoop slave2:/home/ddx/mesos-0.9.0/


5、在master節點上了的/home/ddx/mesos-0.9.0/hadoop/hadoop-0.20.205.0/目錄下:
bin/hadoop namenode -format
對了這裡還有一點需要注意:就是hadoop目錄的所有者問題,一定要將目錄的所有者改為當前執行hadoop的使用者,否則容易出現許可權的錯誤。


6、啟動hdfs
bin/start-dfs.sh


7、啟動jobtracker
bin/hadoop jobtracker
執行到這一步假如沒有出現錯誤,hadoop就已經成功和mesos對接起來了,我們此時登陸master:8080埠就可以看到,Active Framwork中出現了hadoop。


8、啟動一個wordcount的測試程式:
(1)bin/hadoop dfs -mkdir /usr/hadoop/input         建立一個輸入檔案的儲存目錄。
(2)bin/hadoop dfs -copyFromLocal /home/ddx/hello.txt /usr/hadoop/input                  將測試檔案拷貝到儲存目錄下
(3)bin/hadoop jar hadoop-examples-0.20.205.0.jar wordcount /usr/hadoop/input /usr/hadoop/output                   執行wordcount程式
(4)bin/hadoop dfs -ls /usr/hadoop/output           檢視輸出目錄:


Found 3 items
-rw-r--r--   3 ddx supergroup          0 2013-01-23 15:17 /usr/hadoop/output/_SUCCESS
drwxr-xr-x   - ddx supergroup          0 2013-01-23 15:16 /usr/hadoop/output/_logs
-rw-r--r--   3 ddx supergroup        133 2013-01-23 15:16 /usr/hadoop/output/part-r-00000


(5)bin/hadoop dfs -cat /usr/hadoop/output/part-r-00000          檢視輸出結果:


boby    1
dao 1
dong    1
han 1
hello   3
husband 1
is  4
lei 1
li  1
meet    1
mei 2
my  3
name    2
name?   1
nice    1
to  1
what    1
xiang   1
you 1
your    1


9、可以再次登陸master:8080埠檢視各個task的分配情況。
小結:本文主要參見其他前輩的文章進行了mesos上hadoop的部署,寫這篇文章的目的:1、總結一下自己部署的過程,供大家參考,儘量少走彎路。2、對於前輩們安裝過程的一個補充,畢竟大家遇到的bug有可能不完全一樣。 3、希望能夠跟一些志同道合的朋友共同學習,共同進步吧。