搭建MESOS大數據平臺的總結
基于阿三的《Mesos大數據資源調度與大規模容器運行最佳實踐》,主要就列舉一些注意事項
搭建采用的是在筆記本電腦上的virtualbox內建的虛擬機,基本配置:1C2G20G 網絡連接:采用橋接方式
操作系統: Ubuntu14.04LTS (一開始采用Ubuntu14.10版本,編譯mesos時各種報錯,后換為14.04版本)
一、mesos
基本按照書上P8~15頁上的操作即可,需要注意的是要將/etc/host文件修改如下:
127.0.0.1 localhost
127.0.0.1 mesos //此行注釋掉
192.168.1.112 mesos //采用固定IP(用ifconfig查詢)
vagrant我沒有安裝成功,這塊如果有人在virtubox的ubuntu虛擬機中裝成功的,可以告訴我一下,我學習學習
二、 zookeeper
注:書的編排估計有點問題,前面mesos安裝部署時舉例沒有講zookeeper配置方式,而后面的hadoop、spark、storm等等舉例又用的是zookeeper配置方式,所以這里要先做一下P108頁的zookeeper配置。
三. hadoop
基本上可以參照P23~27頁操作,需要注意:
1. 設置環境變量,在/etc/profile開頭添加:
export JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64/" //JDK安裝目錄
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/home/fjibj/hadoop //hadoop安裝目錄
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
2. 如果運行hadoop命令時報找不到native本地庫的錯誤,需要重新編譯CDH:
mvn package -Pdist,native -DskipTests -Dtar
編譯時會遇到各種問題,下面把我遇到的問題及解決方案列一下:
(1)findbugs: findbugs必須網上下載,解壓,之后編譯安裝:
unzip findbugs-3.0.1-source.zip
進入到解壓后的目錄,直接運行ant命令
然后在shell輸入: export FINDBUGS_HOME=解壓后的目錄 。不安裝的話會有這個錯誤:
Caused by: org.apache.maven.plugin.MojoExecutionException: An Ant BuildException has occured: stylesheet /home/hadoop/hadoop-2.0.4-alpha-src/hadoop-common-project/hadoop-common/${env.FINDBUGS_HOME}/src/xsl/default.xsl doesn't exist.
(2)如果運行hadoop命令時報找不到native本地庫,檢查hadoop-2.5.0-cdh5.2.0/lib/native目錄下是否有Linux-amd64-64目錄及該目錄下一堆.so文件(包括一些軟連接),如果沒有需要重新編譯CDH,進入到hadoop-2.5.0- cdh5.2.0/src目錄下運行:
mvn package -Pdist,native -DskipTests -Dtar
經過漫長的編譯時間后,
將編譯后的src/hadoop-dist/target/hadoop-2.5.0-cdh5.2.0/lib/native下的內容復制到lib/native/Linux-amd64-64目錄下,并建立相應的軟連接
(3) 執行hadoop jobtracker時如果
遇到Failed to load native Mesos library from /home/fjibj/hadoop/lib/native/Linux-amd64-64
15/11/05 02:52:41 FATAL mapred.JobTracker: java.lang.UnsatisfiedLinkError: no mesos in java.library.path
執行:
fjibj@mesos:/usr/local/lib$ cp libmesos-0.25.0.so ~/hadoop/lib/native/Linux-amd64-64/
fjibj@mesos:/usr/local/lib$ cd ~/hadoop/lib/native/Linux-amd64-64/
fjibj@mesos:~/hadoop/lib/native/Linux-amd64-64$ ln -s libmesos-0.25.0.so libmesos.so
(4) 如果上傳文件到dfs時遇到put: Cannot create file/xxxxx.tar.gz._COPYING_. Name node is in safe mode.可以
去除安全模式:hadoop dfsadmin -safemode leave
(5)hadoop datanode不能啟動或經常自動掛掉的解決方案:
a)進入/home/fjibj/hadoop/logs/hadoop-fjibj-datanode-mesos.out所在目錄,檢查
tail -100 hadoop-fjibj-datanode-mesos.log
發現有:
java.io.IOException: Incompatible clusterIDs in /home/fjibj/tmp/dfs/data:namenode clusterID = CID-62809071-82b4-4cca-bbcf-c87d4ddb85fd; datanode clusterID = CID-8606188a-f0b5-4999-88d9-5ed44bea449d
表示datanode與namenode的clusterID不一致
b) 檢查core-site.xml或hdfs-site.xml中的hadoop.tmp.dir的值,這里是/home/fjibj/tmp,同時檢查是否有設置dfs.data.dir,如果有的話以dfs.data.dir的值為準
c) 進入上一步查出的目錄(/home/fjibj/tmp)/dfs/data/current目錄下,修改VERSION文件:
將其中的
clusterID= 前面異常信息中的namenode clusterID的值
保存
d) 重啟datanode
hadoop-daemon.sh start datanode
四、spark
基本可參考P38~41頁上操作,需要注意:
(1)vim conf/spark-defaults.conf
spark.executor.uri hdfs://localhost:9000/tmp/spark-1.5.1.tar.gz
spark.io.compression.codec lzf
spark.master mesos://zk://localhost:2181/mesos
spark.mesos.coarse true
(2)vim conf/spark-env.sh
JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64/"
MESOS_HOME=/home/fjibj/mesos
MESOS_NATIVE_JAVA_LIBRARY=/home/fjibj/hadoop/lib/native/Linux-amd64-64/libmesos.so
SPARK_EXECUTOR_URI=hdfs://localhost:9000/tmp/spark-1.5.1.tar.gz
MASTER=mesos://zk://localhost:2181/mesos
HADOOP_HOME=/home/fjibj/hadoop
PATH=$HADOOP_HOME/bin:$PATH
SPARK_DIST_CLASSPATH=$(hadoop classpath)
SPARK_EXECUTOR_MEMORY=100M
SPARK_WORKER_MEMORY=100M
(3)運行 ./bin/run-example org.apache.spark.examples.SparkPi時遇到
Caused by: org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] null
是由于snappy版本問題,可采用修改壓縮方式解決:
修改vim conf/spark-defaults.conf添加:
spark.io.compression.codec lzf
(遇到WARN component.AbstractLifeCycle: FAILED SelectChannelConnector@0.0.0.0:4040: java.net.BindException: Address already in use
java.net.BindException: Address already in use問題可直接忽略,spark會嘗試4041,4042等其他端口)
(4)將spark目錄重新打包并上傳到hdfs
tar zcvf spark-1.5.1.tar.gz spark-1.5.1-bin-without-hadoop
hadoop fs -put spark-1.5.1.tar.gz /tmp
(5)以zookeeper方式啟動mesos-master、mesos-slave、hadoop namenode、hadoop datanode
啟動zookeeper:
cd mesos/3rdparty/zookeeper-3.4.5/
bin/zkServer.sh start
或
mesos/3rdparty/zookeeper-3.4.5/bin/zkServer.sh start
啟動mesos master:
mesos-master --quorum=1 --work_dir=/var/lib/mesos --zk=zk://localhost:2181/mesos --log_dir=/home/fjibj/mesos/mesos-master.log &
啟動mesos slave:
mesos-slave --master=zk://localhost:2181/mesos
五、各平臺對應的WEB UI:
mesos: http://192.168.1.112:5050/
hdfs: http://192.168.1.112:50070/
spark: http://192.168.1.112:4040/
六、后面storm直到marathon的安裝部署都比較順利