基于阿三的《Mesos大数据资源调度与大规模容器运行最佳实践》,主要就列举一些注意事项
搭建采用的是在笔记本电脑上的virtualbox内建的虚拟机,基本配置:1C2G20G 网络连接:采用桥接方式
操作系统: Ubuntu14.04LTS (一开始采用Ubuntu14.10版本,编译mesos时各种报错,后换为14.04版本)
一、mesos
基本按照书上P8~15页上的操作即可,需要注意的是要将/etc/host文件修改如下:
127.0.0.1 localhost
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的安装部署都比较顺利