Mesos上安裝Hadoop超詳細部署攻略


內容原創,轉載請注明,謝謝!

第一章 基本介紹

 

1.准備資料和情況說明。

使用背景:
     a.希望在一個集群上配備兩套計算框架。比如MPI STORM HADOOP SPARK。
     b.CPU和內存資源的高效管理
     c.需要細粒度的資源共享,使上層的框架實現特定的調度目標。
 
     參考資料:主要是兩部分,一部分是別人的兩篇博客(國內說mesos結合hadoop估計也就這兩篇了),還有就是GITHUB的官方文檔。
 
 
     博客資料:http://www.cnblogs.com/jasonkoo/category/398407.html
                   http://blog.chinaunix.net/uid-27103408-id-3480967.html
---------------------------------------下面是參考的hadoop獨立安裝的博文--------------------
        http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503949.html
 
 
 強烈推薦仔細看官方文檔:
         Mesos官方文檔(包括如何部署在Hadoop上):https://github.com/apache/mesos/blob/trunk/docs/Home.md
         Hadoop官方網站:http://hadoop.apache.org/
 
                       
 

第二章 環境准備

1.基本配置

 
操作系統的安裝這里不再贅述,我采用的是minimal(其他的也可),就是最小化的安裝,需要什么再裝。所有操作均在終端操作。
分區只分了個 /  
 
2.SecureCRT的安裝(直接裝獨立LINUX的可不裝,無影響)
注意:SecureCRT用鼠標左鍵選中要復制的文字按下左鍵就是復制,要使用的時候右鍵粘貼,這個非常注意。如果不知道請記住使用。
 
用SecureCRT采用遠程登入的方式進行操作,因為SecureCRT有自帶的上傳下載功能,方便我們的操作。
 使用:如下圖所示
 
 


 
 
 
3.配置YUM源 方便快速的下載
 
cd /etc/yum.repos.d

vi CentOS-base.repo

 


Baseurl本身是被#注釋掉的 將所有的baseurl前面的#全部去掉 這樣即可使用YUM。但是官方的源速度很慢。所以建議使用163的源 下面講下使用方法。

修改源注意要有命名服務器。配置方式 

 

vi /etc/resolv.conf

nameserver   <這里寫你命名服務器IP>

 


 

去 http://mirrors.163.com/.help/centos.html  這個網站上有配置163源的方法。

 

注意:因為在終端,知道地址如何下載呢?這里裝一個東西。yum install wget。以后知道下載地址。直接wget www.wankaiming.com/1.txt  就可以下載txt這個文件了

 

4.使用SecureCRT來完成上傳下載。(這樣大文件你就可以迅雷下載了)

教程網站:http://hi.baidu.com/minordragon/item/e8612fbbbd08eff062388e0b

 

注意:先安裝該軟件 yum install lrzsz

 

上傳效果一覽


第三章 Mesos安裝

1.介紹

     近期的一項任務是在一套集群上使用Hadoop和storm兩種分布式計算框架,為了更加充分合理地管理集群中的資源,用到了mesos這種資源管理平台。mesos最初是UC Berkeley AMP實驗室的一個研究項目,后來開源,並加入Apache,成為一個孵化器項目。

    從其主頁可以了解到mesos是一種集群管理器,它為不同的分布式應用或框架提供高效的資源隔離與共享服務。在mesos上面可以運行Hadoop, MPI, Hypertable, Spark和其他應用。

    mesos的用途有四點:

1. 在一個動態共享的結點池中運行Hadoop, MPI, Spark和其他框架 

2. 在同一個集群上運行多個Hadoop實例,以隔離生產和實驗作業,甚至是多個版本的Hadoop作業  

3. 在相同的結點集合上以批應用的形式運行長期服務(比如Hypertable, Hbase) 

4. 無需重新設計低級基礎設施就可以構建新的集群計算框架,並使其與現存框架共存。

    mesos的特征有:

1. 使用Zookeeper,使主結點具有容錯性 

2. 使用快速、事件驅動的C++實現,能夠擴展到1萬個結點

3. 使用Linux Containers實現了任務之間的隔離 

4.多種資源調度(內存和CPU) 

5. 高效的應用控制調度機制,讓不同框架獲得它們自身的安置目標(比如數據局部性)

6.支持使用Java, Python, C++來開發新的並行應用 

        7. Web界面查看集群狀態。       

2.軟件要求

(1)g++ 4.1或更高版本

安裝命令:yum install gcc-c++

(2)Python 2.6 (用於mesos的web界面)

安裝命令:yum install python

(3) Python 2.6 developer packages

安裝命令:yum install python-devel

(4)cppunit (用於構建zookeeper)

安裝命令:yum install cppunit

(5)ava JDK 1.6 或更高版本

說明:

通過yum install XXX 的方式完成以上1-4的安裝。很多時候有待devel的不知道怎么裝,可以采用通配符yum install python* 即可

 

Jdk 1.6還有hadoop的安裝文件通過SecureCRT上傳到4台虛擬機上。

3.基本准備

    3.1 關閉防火牆(所有機器均設置)
   
在root下完成
chkconfig iptables off (永久生效)

service iptables stop (臨時有效)

 

  
  3.2 配置hosts文件(這個文件非常重要,一定要配置正確。所有機器均設置)
在root下完成

vi /etc/hosts

添加如下
192.168.4.100 mastersrv
192.168.4.101 slavesrv1
192.168.4.102 slavesrv2
192.168.4.103 slavesrv3

 

 
 3.3 增加我們的hadoop用戶(所有機器均設置)
在root下執行
1.添加用戶 adduser hadoop 2.修改密碼 passwd hadoop

 

注意:文中提到的主目錄均指的是hadoop用戶的主目錄即/home/hadoop下,路徑使用~的時候切記保證是hadoop用戶在使用。

 

4.完成主機無密碼登入到節點

 
4.1准備工作
yum install openssh
yum install openssh-clients
yum install rsycn

4.2在mastersrv上生成密鑰

先切換成hadoop用戶

su hadoop


進入hadoop主目錄

cd  ~

生成密鑰
ssh-keygen -t ras -P ''

此時密鑰對默認生成在你的主目錄下。即 /home/hadoop/.ssh .

注意.ssh是隱藏文件請采用 ll -a 或者 ls -a

把id_rsa.pub追加到授權的key里面

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

此時在.ssh文件下已經又authorized_keys

為了保證hadoop用戶能夠正常使用RSA功能,做一些權限的修改

chmod 600 ~/.ssh/authorized_keys

然后啟用RSA功能(此時先更換到root用戶)所有節點上均要執行以下的設置

vi /etc/ssh/sshd_config

RSAAuthentication yes 

PubkeyAuthentication yes 

AuthorizedKeysFile .ssh/authorized_keys 

在vi命令模式下輸入/RSAA  即可直接定位到此處,去除前面的#即可.然后保存

重啟SSH服務所有節點上均要執行以下的設置

service sshd restart

驗證是否正確

su hadoop

ssh localhost

注意此時可能問你Are you sure you want to continue connecting(YES/NO)?  這里選yes即可,因為第一次連接會把要連接的機器hostname保存在konwn_hosts中

4.3將公鑰傳遞給所有的節點

首先在所有的節點上登入hadoop 然后在它的主目錄即/home/hadoop下創建.ssh文件夾

mkdir .ssh

改變它的權限

chmod 700 ~/.ssh
再回到mastersrv上用hadoop完成以下傳遞公鑰的過程

scp ~/.ssh/id_rsa.pub hadoop@192.168.4.101:~/
scp ~/.ssh/id_rsa.pub hadoop@192.168.4.102:~/
scp ~/.ssh/id_rsa.pub hadoop@192.168.4.103:~/


在“每個”節點上將id_rsa.pub轉移到剛才建的.ssh目錄下

mv id_rsa.pub ~/.ssh


修改它的名字
cd ~/.ssh
mv id_rsa.pub authorized_keys


並且為了保證正常工作修改它的權限


chmod 600 authorized_keys

驗證是否能從mastersrv登入到所有節點上(單向的,不能從節點登入主機是正常的,如需要可以拷貝私鑰)

在mastersrv上執行以下操作

ssh slavesrv1
ssh slavesrv2
ssh slavesrv3

第一次登入要輸入個yes前面提到過

 

 

5.安裝MESOS

版本:mesos-0.9.0
可以自己在hadoop主目錄建個upload目錄

mkdir upload

cd upload

下載到upload目錄下

 

下載到當前目錄:wget http://www.fayea.com/apache-mirror/incubator/mesos/mesos-0.9.0-incubating/mesos-0.9.0-incubating.tar.gz
 
 
解壓安裝文件

tar -zxvf  mesos-0.9.0-incubating.tar.gz
拷貝到主目錄下

cp mesos-0.9.0 ~/
configure腳本配置

./configure --with-java-home=/usr/java/jdk1.6.0_43 --prefix=/home/hadoop/mesos

至於以上的一些參數為何是這樣,詳情請見官方文檔,皆有說明。以上指定了jdk的目錄(你安裝的位置寫你自己的)以及mesos的安裝目錄。此時hadoop主目錄下有如下的文件夾了

https://github.com/apache/mesos/blob/trunk/docs/Home.md

 

忘記自己所在目錄采用pwd命令

build 和 安裝

cd mesos-0.9.0
make 
make install
將安裝目錄“mesos”傳送到所有節點的主目錄下

scp -r ~/mesos hadoop@slavesrv1:~/
scp -r ~/mesos hadoop@slavesrv2:~/
scp -r ~/mesos hadoop@slavesrv3:~/

6.配置MESOS

6.1 mastersrv上的配置

cd ~/mesos/var/mesos/deploy

在deploy下創建兩個文件

mkdir masters
mkdir slaves

#masters文件的內容
mastersrv


#slaves文件的內容
slavesrv1
slavesrv2
slavesrv3

cd ~/mesos/var/mesos/conf
vi mesos.conf

#mesos.conf的內容如下
log_dir=/home/hadoop/mesos/log

注意:mesos.conf配置文件能配置哪些東西,如何寫,有什么作用請看官方文檔。

https://github.com/apache/mesos/blob/trunk/docs/Configuration.textile

6.2所有節點上的配置

#節點上mesos.conf

master=master:5050
log_dir=/home/hadoop/mesos/log
resources=cpus:1;mem:1000 

7.啟動mesos

cd ~/mesos/sbin

./mesos-start-cluster.sh


要停止請使用
./mesos-stop-cluster.sh


如果不想每次進目錄使用腳本請配置/etc/profile並且生效

此時打開瀏覽器輸入主機IP和8080端口可以看到mesos狀態  http://192.168.4.100:8080 效果如下


可以看到資源情況節點信息。如果連接了框架還會有框架信息。當有任務運行的時候還能具體進去看執行情況。比如hadoop的mpa和reduce

 

第四章 安裝Hadoop

1.基本說明

hadoop on mesos官方文檔https://github.com/apache/mesos/blob/trunk/docs/Running-Hadoop-on-Mesos.md

由官方文檔我們可知,支持mesos的hadoop版本為

我們下載的mesos中已經包含了0.20.205.0這個版本,所以我們使用該版本,並且它有腳本可以給我們自動打補丁。如果使用CDH3U3這種版本就要手動打補丁,不建議。

2.解壓hadoop並且打好補丁

cd  ~/mesos-0.9.0/hadoop

此時看到的東西如下

執行補丁。完成解壓,配置,BUILD,打補丁等一系列工作。

./TUTORIAL

基本上一路回車到底。中間的信息也可以稍微看看。如果成功,大概就是提示你要運行一個example的時候讓你回車確認的時候,這時候上面會有字
build successful!  說明之前沒有錯誤。


接下去會讓你按回車運行wordcount的例子,一直回車,然后會卡在map 0% reduce 0%.這是正常的,你都沒寫配置文件怎么會成功呢?直接Ctrl+C結束進程

3.hadoop的配置

3.1 配置主目錄環境變量

#先切換到root

vi /etc/profile    

#shift+g切換到最后一行按I進行輸入

export HADOOP_HOME=/home/hadoop/mesos-0.9.0/hadoop/hadoop-0.20.205.0

#使它生效
source /etc/profile

以后要進入這個目錄直接cd $HADOOP_HOME 即可

3.2拷貝兩個文件到$HADOOP_HOME下

cp /home/hadoop/mesos-0.9.0/protobuf-2.4.1.jar $HADOOP_HOME/

cp /home/hadoop/mesos-0.9.0/src/mesos-0.9.0.jar $HADOOP_HOME/

這兩個文件很重要,配置中也會用到

$HADOOP_HOME即/home/hadoop/mesos-0.9.0/hadoop/hadoop-0.20.205.0下就會有這兩個文件了

3.3 對$HADOOP_HOME/conf 目錄下的文件進行配置

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://mastersrv:54310</value>
   </property>

   <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/tmp_hadoop</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>1</value>
</property>
</configuration>

 

 

 

mapred-site.xml

 

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

 

 

 

 

hadoop-env.sh(重要!絕大多數時候出錯就是這里沒配好。之前按別人的方法配,但總是出錯,不知道是JDK的原因還是下載的mesos內容有細微差異造成)

 

# Set Hadoop-specific environment variables here.

# The only required environment variable is JAVA_HOME.  All others are
# optional.  When running a distributed configuration it is best to
# set JAVA_HOME in this file, so that it is correctly defined on
# remote nodes.

# Mesos build directory, useful for finding JARs and the native library.
test -z ${MESOS_BUILD_DIR} && \
    export MESOS_BUILD_DIR=`cd ../.. && pwd`

# Google protobuf (necessary for running the MesosScheduler).
export PROTOBUF_JAR=${HADOOP_HOME}/protobuf-2.4.1.jar




# Mesos.
export MESOS_JAR=${HADOOP_HOME}/mesos-0.9.0.jar



# Native Mesos library.
export MESOS_NATIVE_LIBRARY=/home/hadoop/mesos/lib/libmesos-0.9.0.so

# The java implementation to use.  Required.
export JAVA_HOME=/usr/java/jdk1.6.0_43

# Extra Java CLASSPATH elements.  Optional.
export HADOOP_CLASSPATH=${HADOOP_HOME}/build/contrib/mesos/classes:${MESOS_JAR}:${PROTOBUF_JAR}

# The maximum amount of heap to use, in MB. Default is 1000.
# export HADOOP_HEAPSIZE=2000

# Extra Java runtime options.  Empty by default.
# export HADOOP_OPTS=-server

# Command specific options appended to HADOOP_OPTS when specified
export HADOOP_NAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS"
export HADOOP_SECONDARYNAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_SECONDARYNAMENODE_OPTS"
export HADOOP_DATANODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_DATANODE_OPTS"
export HADOOP_BALANCER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_BALANCER_OPTS"
export HADOOP_JOBTRACKER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS"
# export HADOOP_TASKTRACKER_OPTS=

# The following applies to multiple commands (fs, dfs, fsck, distcp etc)
# export HADOOP_CLIENT_OPTS

# Extra ssh options.  Empty by default.
# export HADOOP_SSH_OPTS="-o ConnectTimeout=1 -o SendEnv=HADOOP_CONF_DIR"

# Where log files are stored.  $HADOOP_HOME/logs by default.
# export HADOOP_LOG_DIR=${HADOOP_HOME}/logs

# File naming remote slave hosts.  $HADOOP_HOME/conf/slaves by default.
# export HADOOP_SLAVES=${HADOOP_HOME}/conf/slaves

# host:path where hadoop code should be rsync'd from.  Unset by default.
# export HADOOP_MASTER=master:/home/$USER/src/hadoop

# Seconds to sleep between slave commands.  Unset by default.  This
# can be useful in large clusters, where, e.g., slave rsyncs can
# otherwise arrive faster than the master can service them.
# export HADOOP_SLAVE_SLEEP=0.1

# The directory where pid files are stored. /tmp by default.
# export HADOOP_PID_DIR=/var/hadoop/pids

# A string representing this instance of hadoop. $USER by default.
# export HADOOP_IDENT_STRING=$USER

# The scheduling priority for daemon processes.  See 'man nice'.
# export HADOOP_NICENESS=10

# close warning information
export HADOOP_HOME_WARN_SUPPRESS=TRUE 

 

因為該配置文件比較重要所以把完整文件放上來了 其實大部分是注釋。改的無非是

1.PROTOBUF_JAR

2. MESOS_JAR

3.MESOS_NATIVE_LIBRARY

4.HADOOP_CLASSPATH

5.HADOOP_HOME_WARN

請仔細對照

 

masters


mastersrv

 

slaves

 

slavesrv1
slavesrv2
slavesrv3

 

 

4.啟動在mesos上的hadoop

4.1先確保mesos已經正常啟動,能夠在瀏覽器中打開mesos管理界面並且看到節點正常連接

4.2在$HADOOP_HOME目錄下運行如下命令。

注意:因為mesos的原因,請不要在hadoop/bin目錄下直接采用./的形式來運行腳本。要在$HADOOP_HOME下采用 bin/腳本名 的方式來運行hadoop相關的命令

 

cd $HADOOP_HOME

bin/hadoop namenode -format

#看到成功信息后所有機器hadoop主目錄下就會有tmp_hadoop目錄。


#開啟hdfs
bin/start-dfs.sh

#打開jobtracker
bin/hadoop jobtracker

 

具體的效果如下(從執行完format命令之后開始):

4.3 現在的狀況,可用 jps查看當前的java進程是這樣的

4.4 啟動start-dfs.sh之后的情況

在mastersrv上

 

 

在slavesrvX上

 

4.5執行bin/hadoop jobtracker后的情況.等一下出現如下信息表示正常啟動

遠程再開啟個主機的登入用 jps驗證發現jobtracker已經開啟。

注意:有時候開啟jobtracker會有safemode錯誤,這個沒關系,會告訴等待多少秒,等待過去就好了,這個是他本身的一個機制。可自行百度

4.6在$HADOOP_HOME下提交任務,運行wordcount程序(必須以hadoop用戶身份運行,否則出錯

#先准備要計數的文件
cd ~
mkdir examples
vi file1.txt     
vi file2.txt

內容自己寫。我寫的如下
-----------------------------
Hello World Hello World Hello World
------------------------------
Hello Hadoop Hello Hadoop Hello Hadoop


cd $HADOOP_HOME

#在HDFS創建個目錄放文件
bin/hadoop fs -mkdir input

#將文件放進去
bin/hadoop fs -put /home/hadoop/examples/file*.txt input

#看看有沒
bin/hadoop fs -ls input

#提交任務(此時在$HADOOP_HOME下)
 bin/hadoop jar hadoop-examples-0.20.205.0.jar wordcount input output

4.7運行效果如下,此時MESOS的管理界面也能看到信息。

 

 

 

4.8查看輸出結果

bin/hadoop fs -ls output

看到有文件了

查看
bin/hadoop fs -cat output/part-r-00000

 

 

總結:花了將近一周,經歷了各種錯誤,也算獲益良多,有問題歡迎留言探討。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM