最近接触到大数据,帮同事搭建环境。因都是最新版本,中间参考过好多博客,被坑的不要不要的。现将我的部署总结下,供大家参考。
我准备了10台服务器,做的集群。服务器全是阿里云的ecs,系统版本centos6.5 64位,spark2.0 mesos1.0.1
服务器命名规则M00001,M00002....M00008,其中M00001作为mesos的master节点,其他都是slave节点。
M00001的公钥推到其他slave节点。
1.gcc升级到4.8.2
wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2
利用脚本下载依赖的库
cd gcc-4.8.2
./contrib/download_prerequisites
创建编译目录
mkdir build
编译安装
cd build
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
make -j4
make install
yum -y install glibc-devel.i686 glibc-devel
完事后,gcc -v看看是否升级成功。
2.系统内核升级
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel-lt
sed -i 's/default=1/default=0/g' /boot/grub/grub.conf
reboot
重启后uname -a 看看系统内科是否升级到3.0以上。
3.安装其他依赖
wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
yum groupinstall -y "Development Tools"
yum install -y apache-maven python-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel subversion-devel apr-util-devel
yum install libcgroup
chkconfig cgconfig on
service cgconfig start
还有java环境这个少不了。我用的1.7的。
4.zookeeper安装
在M00001,M00002,M00003上安装zookeeper服务,保障mesos集群的稳定。
tar xvf zookeeper-3.4.6.tar.gz
修改zookeeper的配置文件。
cp /Application/zookeeper/conf/zoo_sample.cfg /Application/zookeeper/conf/zoo.cfg
vim zoo.cfg
server.1=10.45.17.195:2888:3888
server.2=10.45.234.126:2888:3888
server.3=10.45.229.150:2888:3888
将zookeeper推送的M00002和M00003上。
启动zookeeper
/Application/zookeeper/bin/zkServer.sh start
提示缺少myid,创建/tmp/zookeeper/myid
输入id号,3台服务器的id号要连续。
再次启动zookeeper。
5.安装mesos
官方下载mesos安装包,编译过程比较长。
tar xvf mesos-1.0.1.tar.gz
cd mesos-1.0.1
mkdir build
cd build
../configure
make
make install
相关配置修改:
mesos的配置目录在/usr/local/etc/mesos下
master节点配置如下:
vim masters
master节点的ip
vim slaves
slave节点的ip
mesos-master-env.sh
vim mesos-master-env.sh
export MESOS_zk=zk://10.251.177.219:2181,10.163.122.93:2181,10.251.131.33:2181/mesos
export MESOS_quorum=1
export MESOS_log_dir=/var/log/mesos/master
export MESOS_work_dir=/var/run/mesos/master
mesos-slave-env.sh
vim mesos-slave-env.sh
export MESOS_zk=zk://10.251.177.219:2181,10.163.122.93:2181,10.251.131.33:2181/mesos
export MESOS_log_dir=/var/log/mesos
export MESOS_work_dir=/var/run/mesos
export MESOS_switch_user=false
export MESOS_gc_delay=1days
mesos-agent-env.sh
vim mesos-agent-env.sh
export MESOS_master=10.251.177.219:5050
export MESOS_ip=10.251.177.219
export MESOS_port=5051
export MESOS_log_dir=/var/log/mesos
export MESOS_work_dir=/var/run/mesos
export MESOS_logging_level=INFO
export MESOS_isolation=cgroups
slave节点:
将mesos-master-env.sh,mesos-slave-env.sh,mesos-agent-env.sh配置推送到slave节点。
启动mesos
首先保证zookeeper集群启动运行中。
master节点:
nohup /usr/local/sbin/mesos-master --log_dir=/var/log/mesos/master --work_dir=/var/run/mesos/master --cluster=mesos --zk=zk://10.251.177.219:2181,10.163.122.93:2181,10.251.131.33:2181/mesos --quorum=1 >/dev/null 2>&1 &
nohup /Application/mesos-1.0.1/build/bin/mesos-agent.sh --work_dir=/var/run/mesos/ --master=zk://10.251.177.219:2181,10.163.122.93:2181,10.251.131.33:2181/mesos >/dev/null 2>&1 &
slave节点:
nohup /usr/local/sbin/mesos-slave --log_dir=/var/log/mesos/master --work_dir=/var/run/mesos/master --master=zk://10.251.177.219:2181,10.163.122.93:2181,10.251.131.33:2181/mesos --gc_delay="1days" --switch_user="false" >/dev/null 2>&1 &
启动完成后,可登陆web页面查看集群状态
mesos部署到此结束。
spark部署:
Spark 服务器2 台,S00001,S00002。S00001最为master节点。
1.依赖环境java和scala
vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.7.0_80
export JRE_HOME=/usr/local/java/jdk1.7.0_80/jre
export SPARK_HOME=/Application/spark-2.0.0-bin-hadoop2.7
export SCALA_HOME=/usr/local/scala
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin
2.zookeeper复用前面mesos的
3.spark配置文件
master:
vim spark-env.sh
export SCALA_HOME=/usr/local/scala
export JAVA_HOME=/usr/local/java/jdk1.7.0_80
export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so
export MASTER=mesos://zk://10.251.177.219:2181,10.163.122.93:2181,10.251.131.33:2181:2181/mesos
export SPARK_LOCAL_HOSTNAME=`ifconfig eth0 | awk '/inet addr/{print substr($2,6)}'`
export SPARK_EXECUTOR_URI=http://10.251.130.101/spark-2.0.0-bin-hadoop2.7.tgz
export SPARK_LOCAL_IP='0.0.0.0'
vim slaves
添加节点名称
S0002
slave:
vim spark-env.sh
export SCALA_HOME=/usr/local/scala
export JAVA_HOME=/usr/local/java/jdk1.7.0_80
export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so
export MASTER=mesos://zk://10.251.177.219:2181,10.163.122.93:2181,10.251.131.33:2181/mesos
export SPARK_LOCAL_HOSTNAME=`ifconfig eth0 | awk '/inet addr/{print substr($2,6)}'`
export SPARK_EXECUTOR_URI=http://10.251.130.101/spark-2.0.0-bin-hadoop2.7.tgz (注意这里,我直接把spark的包放在nginx上了,mesos直接从这里调用,后期会放到hdfs,这sprak包里面的配置文件只修改spark-env.sh)
export SPARK_LOCAL_IP='0.0.0.0'
4.spark 启动
master:
/Application/spark-2.0.0-bin-hadoop2.7/sbin/start-all.sh
/Application/spark-2.0.0-bin-hadoop2.7/sbin/start-mesos-dispatcher.sh --master mesos://zk://10.251.177.219:2181,10.163.122.93:2181,10.251.131.33:2181/mesos >/dev/null 2>&1 &
slave:
nohup /Application/spark-2.0.0-bin-hadoop2.7/sbin/start-mesos-dispatcher.sh --master mesos://zk://10.251.177.219:2181,10.163.122.93:2181,10.251.131.33:2181/mesos >/dev/null 2>&1 &
我个人理解只要一台spark机器提交任务到mesos集群,mesos的salve节点去nginx上下载spark程序到本地解压运行。可spark的master节点无法提交任务,所以有增了一台saprk节点,来提交任务。
差点忘了,mesos的集群要装scala环境,spark最终跑在mesos的机器上。