代码改变世界

CentOS7 安装spark集群

2016-01-10 22:28  DoPeter  阅读(1805)  评论(0编辑  收藏  举报

Spark版本 1.6.0

Scala版本 2.11.7

Zookeeper版本 3.4.7

 

配置虚拟机


 

3台虚拟机,sm,sd1,sd2

 

 

1. 关闭防火墙

systemctl stop firewalld

systemctl stop firewalld

如果不关闭防火墙,需要为防火墙添加进站出站规则,否则无法访问spark的管理页面

 

2. 修改机器名

hostnamectl set-hostname sm

其他2台机器同上

 

3. 修改host

vim /etc/hosts

 

 

4. 配置ssh免密码登陆

在sm机器

ssh-keygen -t rsa

ssh-copy-id -i ~/.ssh/id_rsa.pub peter@sd1

ssh-copy-id -i ~/.ssh/id_rsa.pub peter@sd2

ssh-copy-id -i ~/.ssh/id_rsa.pub peter@sm

 

如果不配置本机的ssh免密码登陆,在后面启动spark集群的时候,会发现本机的worker无法启动

 

4. 安装Java

 

安装Zookeeper


 

复制zookeeper的gz文件至sm机器

 

1. 解压

tar zxf zookeeper-3.4.7.tar.gz

 

2. 配置

cd conf

cp zoo_sample.cfg zoo.cfg

vim zoo.cfg

 

 

3. 设置serverid

进入data文件夹

cd /home/peter/App/Spark/zookeeper-3.4.7/data

sm机器

echo "1">myid

 

4. Copy至其他机器

scp -r /home/peter/App/Spark/zookeeper-3.4.7  peter@sd2:/home/peter/App/Spark/zookeeper-3.4.7

 

5. 修改另外台机器的serverid

重复第3步,分别将id设置为配置文件中对应的id

cd /home/peter/App/Spark/zookeeper-3.4.7/data

sd1

echo "2">myid

sd2

echo "3">myid

 

安装Spark


 

在sm机器

1. 拷贝安装文件并解压

scala-2.11.7.tgz

spark-1.6.0-bin-hadoop2.6.tgz

hadoop-2.6.0.tar.gz

 

分别解压

 

2. 设置环境变量

vim ~/.bash_profile

 

export JAVA_HOME=/home/peter/App/jdk1.8.0_66
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export SCALA_HOME=/home/peter/App/Spark/scala-2.11.7

export SPARK_HOME=/home/peter/App/Spark/spark-1.6.0-bin-hadoop2.6

export HADOOP_HOME=/home/peter/App/Spark/hadoop-2.6.0
export HADOOP_CONF_DIR=/home/peter/App/Spark/hadoop-2.6.0/etc/hadoop

export PATH=$PATH:$SCALA_HOME/bin:$SPARK_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source ~/.bash_profile

 

3. 设置Spark

cd /home/peter/App/Spark/spark-1.6.0-bin-hadoop2.6/conf

cp spark-env.sh.template spark-env.sh

export SCALA_HOME=/home/peter/App/Spark/scala-2.11.7
export SPARK_WORKER_MEMORY=1G
export JAVA_HOME=/home/peter/App/jdk1.8.0_66
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=sm:2181,sd1:2181,sd2:2181 -Dspark.deploy.zookeeper.dir=/spark"

 

配置slaves

cp slaves.template slaves

vim slaves

 

 

4. 拷贝安装文件以及配置文件至其他机器

Java安装文件及配置文件

Hadoop

Spark

Scala

 

5. 启动Spark集群

每台机器启动ZK

/home/peter/App/Spark/zookeeper-3.4.7/bin/zkServer.sh start

在SM机器启动Spark集群

cd /home/peter/App/Spark/spark-1.6.0-bin-hadoop2.6

./sbin/start-all.sh

选中一台机器作为Standby Master,启动Master进程

./sbin/start-master.sh

 

启动后,可访问Spark Alive Master的管理页面以及Standby Master的管理页面

 

 

 

如果将Alive Master节点关闭或者Kill掉ZK以及Master进程,Spark会自动切换到Standby Master

 

提交任务至Spark


 

 

参考Spark QuickStart中的例子

提交一个Jar包进行测试

POM配置

    <dependencies>
        <dependency> <!-- Spark dependency -->
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.10</artifactId>
            <version>1.6.0</version>
        </dependency>
    </dependencies>

 

public class Entry {
    public static void main(String[] args)
    {
        System.out.println("Step 1");
        String logFile = "/home/peter/App/Spark/spark-1.6.0-bin-hadoop2.6/README.md"; // Should be some file on your system
        SparkConf conf = new SparkConf().setAppName("Test Application")
                .setMaster("spark://192.168.1.90:7077")
                //.set("spark.driver.host", "192.168.1.111")
               // .set("SPARK_WORKER_IP","192.168.1.111")
                //.setJars(new String[]{"/home/peter/App/Spark/work/homework.jar"})
                ;

        System.out.println("Step 2.");

        JavaSparkContext sc = new JavaSparkContext(conf);
        JavaRDD<String> logData = sc.textFile(logFile).cache();

        long numAs = logData.filter(new Function<String, Boolean>() {
            public Boolean call(String s) { return s.contains("a"); }
        }).count();

       long numBs = logData.filter(new Function<String, Boolean>() {
            public Boolean call(String s) { return s.contains("b"); }
        }).count();

        System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);

    }
}

 

生成Jar包

可能哪里的配置有些问题,Jar包开始无法正确运行,查找了一些资料后,是一些引用版本比较混乱引起的。

在Jar包的META-INF文件夹中删除下面的文件

 

MANIFEST.MF文件中也必须有Main-Class

Manifest-Version: 1.0
Main-Class: Entry

 

拷贝jar包至sm机器上,并运行