美文网首页
Spark安装及初次使用

Spark安装及初次使用

作者: 静宸丶水默含声 | 来源:发表于2019-02-26 15:12 被阅读1次
    准备工作:
    • 准备三台机器,master01,master02(HA),slave01,slave02
    • hadoop集群,zookeeper集群搭建完成
    • spark-2.1.1-bin-hadoop2.7.tgz安装包

    一、配置Spark【Standalone】

    1.解压安装包到指定位置
    tar -xf spark-2.1.1-bin-hadoop2.7.tgz -C /home/bigdata/Hadoop
    2.配置slaves和spark-env.sh

    [bigdata@master01 hadoop]$ cd /home/bigdata/hadoop/spark-2.1.1-bin-hadoop2.7/conf
    # 将slaves.template复制为slaves
    [bigdata@master01 hadoop]$ cp slaves.template slaves
    # 将spark-env.sh.template复制为spark-env.sh
    [bigdata@master01 hadoop]$ cp spark-env.sh.template spark-env.sh
    

    修改slave文件

    slave01
    slave02
    

    修改spark-env.sh文件

    SPARK_MASTER_HOST=master01
    SPARK_MASTER_PORT=7077
    

    3.将配置好的Spark文件拷贝到其他节点上

    [bigdata@master01 hadoop]$ scp slaves bigdata@slave01:~/hadoop/spark-2.1.1-bin-hadoop2.7/conf
    [bigdata@master01 hadoop]$ scp slaves bigdata@slave02:~/hadoop/spark-2.1.1-bin-hadoop2.7/conf
    [bigdata@master01 hadoop]$ scp spark-env.sh bigdata@slave01:~/hadoop/spark-2.1.1-bin-hadoop2.7/conf
    [bigdata@master01 hadoop]$ scp spark-env.sh bigdata@slave02:~/hadoop/spark-2.1.1-bin-hadoop2.7/conf
    

    4.启动Spark集群

    [bigdata@master01 hadoop]$ /home/bigdata/hadoop/spark-2.1.1-bin-hadoop2.7/sbin/start-all.sh
    

    Spark管理界面查看集群状态(主节点):http://master01:8080/
    注意:如果遇到 “JAVA_HOME not set” 异常,可以在sbin目录下的spark-config.sh 文件中加入如下配置:
    export JAVA_HOME=XXXX

    二、配置Job History Server【Standalone】

    1.配置spark-default.conf
    [bigdata@master01 hadoop]$ cd /home/bigdata/hadoop/spark-2.1.1-bin-hadoop2.7/conf
    [bigdata@master01 hadoop]$ cp spark-default.conf.template spark-default.conf
    

    修改spark-default.conf文件,开启Log,【注意:HDFS上的目录需要提前存在】

    spark.eventLog.enabled  true
    spark.eventLog.dir       hdfs://master01:9000/directory
    spark.eventLog.compress true
    
    2.修改spark-env.sh文件,添加如下配置:
    export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=4000
    -Dspark.history.retainedApplications=3
    -Dspark.history.fs.logDirectory=hdfs://master01:9000/directory"
    
    3.将配置好的Spark文件拷贝到其他节点上
    4.启动过程
    • 启动Spark
    [bigdata@master01 hadoop]$ /home/bigdata/hadoop/spark-2.1.1-bin-hadoop2.7/sbin/start-all.sh
    
    • 启动HDFS
    • 启动Job History Server
    [bigdata@master01 hadoop]$ /home/bigdata/hadoop/spark-2.1.1-bin-hadoop2.7/sbin/start-history-server.sh
    

    注意:如果遇到Hadoop HDFS的写入权限问题:org.apache.hadoop.security.AccessControlException
    解决方案: 在hdfs-site.xml中添加如下配置,关闭权限验证

        <property>
                <name>dfs.permissions</name>
                <value>false</value>
        </property>  
    

    三、配置Spark HA【Standalone】

    解决Master节点存在单点故障

    1.启动至少两个Master节点来实现高可靠,配置方式比较简单:


    HA规划

    2.Spark集群规划:master01,master02是Master;slave01,slave02,slave03是Worker
    3.安装配置Zookeeper集群,并启动Zookeeper集群
    4.停止spark所有服务,修改配置文件spark-env.sh,在该配置文件中注释掉SPARK_MASTER_HOST并添加如下配置:

    export SPARK_DAEMON_JAVA_OPTS="
     -Dspark.deploy.recoveryMode=ZOOKEEPER
     -Dspark.deploy.zookeeper.url=zk1,zk2,zk3
     -Dspark.deploy.zookeeper.dir=/spark"
    

    5.在 master01节点上修改spark-env.sh配置文件,将配置文件同步到所有节点
    6.在master01上执行sbin/start-all.sh脚本,启动集群并启动第一个master节点,然后在master02上执行sbin/start-master.sh启动第二个master节点
    7.程序中spark集群的访问地址需要改成:
    spark://master01:port1,master02:port2

    四、配置Spark【Yarn】

    1.修改Hadoop配置下的yarn-site.xml

    <configuration>
    <!-- Site specific YARN configuration properties -->
            <property>
                    <name>yarn.resourcemanager.hostname</name>
                    <value>master01</value>
            </property>
            <property>
                    <name>yarn.nodemanager.aux-services</name>
                    <value>mapreduce_shuffle</value>
            </property>
            <!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
            <property>
                    <name>yarn.nodemanager.pmem-check-enabled</name>
                    <value>false</value>
            </property>
            <!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
            <property>
                    <name>yarn.nodemanager.vmem-check-enabled</name>
                    <value>false</value>
            </property>
    </configuration>
    

    2.修改Spark-env.sh 添加:

    HADOOP_CONF_DIR=/home/bigdata/hadoop/hadoop-2.7.3/etc/hadoop
    YARN_CONF_DIR=/home/bigdata/hadoop/hadoop-2.7.3/etc/hadoop
    

    3.启动spark history server

    五、spark程序初试

    1.执行第一个spark程序(standalone)
    # 该算法是利用蒙特·卡罗算法求PI
    [bigdata@master01 hadoop]$ /home/bigdata/hadoop/spark-2.1.1-bin-hadoop2.7/bin/spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master spark://master01:7077 \
    --executor-memory 1G \
    --total-executor-cores 2 \
    /home/bigdata/hadoop/spark-2.1.1-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.1.1.jar \
    100
    

    参数说明:
    --master spark://master01:7077 指定Master的地址
    --executor-memory 1G 指定每个executor可用内存为1G
    --total-executor-cores 2 指定每个executor使用的cup核数为2个

    2.执行第一个spark程序(yarn)
    [bigdata@master01 hadoop]$ /home/bigdata/hadoop/spark-2.1.1-bin-hadoop2.7/bin/spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master yarn \
    --deploy-mode client \
    /home/bigdata/hadoop/spark-2.1.1-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.1.1.jar \
    100
    
    3.Spark应用提交

    bin/spark-submit脚本启动应用. 这个脚本负责设置spark使用的classpath和依赖,支持不同类型的集群管理器和发布模式:

    ./bin/spark-submit \
      --class <main-class>
      --master <master-url> \
      --deploy-mode <deploy-mode> \
      --conf <key>=<value> \
      ... # other options
      <application-jar> \
      [application-arguments]
    

    一些常用选项:

    • --class: 你的应用的启动类 (如 org.apache.spark.examples.SparkPi)

    • --master: 集群的master URL (如 spark://23.195.26.187:7077)

    • --deploy-mode: 是否发布你的驱动到worker节点(cluster) 或者作为一个本地客户端 (client) (default: client)*

    • --conf: 任意的Spark配置属性, 格式key=value. 如果值包含空格,可以加引号“key=value”. 缺省的Spark配置

    • application-jar: 打包好的应用jar,包含依赖. 这个URL在集群中全局可见。

    • application-arguments: 传给main()方法的参数

    4.启动Spark shell
    /home/bigdata/hadoop/spark-2.1.1-bin-hadoop2.7/bin/spark-shell \
    --master spark://master01:7077 \
    --executor-memory 2g \
    --total-executor-cores 2
    

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

    5.在Spark shell中编写WordCount程序
    hadoop dfs -put ./RELEASE /
    
    • 在Spark shell中用scala语言编写spark程序
    scala> sc.textFile("hdfs://master01:9000/RELEASE").flatMap(_.split(" "))
    .map((_,1)).reduceByKey(_+_).saveAsTextFile("hdfs://master01:9000/out")
    
    • 使用hdfs命令查看结果
    hadoop dfs -cat hdfs://master01:9000/out/p*
    

    说明:
    scSparkContext对象,该对象时提交spark程序的入口
    textFile(hdfs://master01:9000/RELEASE)是hdfs中读取数据
    flatMap(_.split(" "))先map在压平
    map((_,1))将单词和1构成元组
    reduceByKey(_+_)按照key进行reduce,并将value累加
    saveAsTextFile("hdfs:// master01:9000/out")将结果写入到hdfs中

    spark数据处理过程

    相关文章

      网友评论

          本文标题:Spark安装及初次使用

          本文链接:https://www.haomeiwen.com/subject/muesyqtx.html