我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建

  1. Spark2.0下载

  2. root用户下将下载好的压缩包压解到/user目录下

       tar -zxvf spark-2.0.0-bin-hadoop2.6.tgz -C /user
    
  3. 在 /user目录下创建软连接(快捷方式)

    ln -s spark-2.0.0-bin-hadoop2.6/ spark
    
  4. 修改配置文件spark-env.sh,没有就将spark-env.sh.template改名

      vi spark-env.sh
    

    export  JAVA_HOME=/user/jdk1.8
    #export SCALA_HOME=/user/scala
    export  HADOOP_HOME=/user/hadoop-2.6.5
    export  HADOOP_CONF_DIR=/user/hadoop-2.6.5/etc/hadoop
    export  SPARK_WORKER_MEMRY=500m
    export  SPARK_WORKER_CORES=1
    export  SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=Master:2181,Slave1:2181,Slave2:2181 -Dspark.deploy.zookeeper.dir=/user/spark/spark_status"
    SPARK_LOG_DIR=/user/spark/logs     # 更换日记目录,先创建好 # Where log files are stored.  (Default: ${SPARK_HOME}/logs) 
    SPARK_PID_DIR=/user/spark/tmp      #更换临时文件目录,先创建好 #Where the pid file is stored. (Default: /tmp) 
    
  5. 复制slaves.template为slaves,添加自己主机hostname
    我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建

  6. 将spark更改文件组

    chown -R hadoop:hadoop /user/spark-2.0.0-bin-hadoop2.6
    chown -R hadoop:hadoop /user/spark
    
  7. 切换成hadoop用户,将spark分发到其他节点

    scp -r /user/spark-2.0.0-bin-hadoop2.6 [email protected]:/user
    scp -r /user/spark-2.0.0-bin-hadoop2.6 [email protected]:/user
    
  8. 配置环境变量,三台机都配

    vi ~/.bashrc
    ----------------------------------------------------------------
    PATH=/user/spark/bin:/user/spark/sbin:$PATH
    :wq!
    source ~/.bashrc
    
  9. 启动zookeeper集群,进入zookeeper目录,三台都要开

    /bin/zkServer.sh start
    /bin/zkServer.sh status
    
    ---------------------------------
    此时看到一个leader和两个follower
    
  10. 启动HDFS集群,任意一台机即可,建议在master上,前提全部免密登录

    start-dfs.sh
    
  11. 在启动Spark集群

    cd /user/spark
    start-all.sh

  12. 查看进程
    Master
    我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建
    Slave1
    我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建
    Slave2
    我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建

  13. 问题
    查看进程发现spark集群只有Master成功启动了Master进程,其他2个节点均没有启动成功,需要手动启动,进入 spark目录

       sbin/start-master.sh 
    
  14. 进入web master:8080,Slave1:8080,Slave2:8080可以看到Slave1的status为ACTIVE
    我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建
    我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建
    我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建

  15. kill掉Slave1的master进程,验证是否高可用
    我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建

  16. 在此打开Slave1:8080,发现已经加载不到
    我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建

  17. 而Slave2的status变成了ACTIVE,高可用成功
    我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建
    Master则不变
    我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建

基本使用

当Master处于ALIVE时,节点哪一个处于ALIVE就使用哪一个,不然虽然可以使用,但是会报一大堆错误。
我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建

[[email protected] spark]$ bin/spark-submit \
> --class org.apache.spark.examples.SparkPi \
> --master spark://Master:7077 \    # 不要全部复制,这里注意:节点哪一个处于ALIVE就使用哪一个,只改变这个 spark://Master:7077
> --executor-memory 500m \
> --total-executor-cores 1 \
> /user/spark/examples/jars/spark-examples_2.11-2.0.0.jar \
> 100

结果如下图,Pi的输出在中间
我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建

  1. 开启Spark

     [[email protected] spark]$ bin/spark-shell \
        > --master spark://Master:7077 \
        > --executor-memory 500m \
        > --total-executor-cores 1 
    
  2. 当看到这个说明就成功啦

    我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建

注意:
如果启动spark shell时没有指定master地址,但是也可以正常启动spark shell和执行spark shell中的程序,其实是启动了spark的local模式,该模式仅在本机启动一个进程,没有与集群建立联系。
Spark Shell中已经默认将SparkContext类初始化为对象sc。用户代码如果需要用到,则直接应用sc即可
Spark Shell中已经默认将SparkSQl类初始化为对象spark。用户代码如果需要用到,则直接应用spark即可

  1. 由于是集群,所以在Slave1上编写文件上传到HDFS在Master上一样可以使用

    vi hello.txt
    ---------------------------------------------
    like,cattle
    like,filesh
    like,she
    like,her
    
  2. 上传至HDFS,前提配好环境变量

    hadoop fs -put hello.txt /
    hadoop fs -ls /
    
  3. 在spark shell中用scala语言编写spark程序

    sc.textFile("hello.txt").flatMap(_.split(",")).map((_,1)).reduceByKey(_+_).saveAsTextFile("/out")
    
  • 突然报了个错,前面吧啦吧啦一大堆,最后来个: Caused by: java.net.UnknownHostException:ns 可能原因是主机映射关系没做好,反正我解决了。由于之前hadoop上的配置文件core-size.xml上的

我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建

  • 所以spark不认识这个hdfs://ns,解决办法: 重新修改 /etc/hosts 文件,在后面加上
    192.168.23.200 ns 像这样

我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建

  • 重新开启spark-shell

      sc.textFile("/hello.txt").flatMap(_.split(",")).map((_,1)).reduceByKey(_+_).saveAsTextFile("/out2")
    
  • 查看hdfs上的文件

     hadoop fs -ls /out2
     hadoop fs -cat /out2/pa*
    
  • 如图

我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建

参考博客 http://www.cnblogs.com/qingyunzong/p/8888080.html#_label1