一、4040端口

spark任务运行后,会将Driver所在机器绑定到4040端口,提供当前任务的监控页面。

此端口号默认为4040,展示信息如下:

  • 调度器阶段和任务列表

  • RDD大小和内存使用情况

  • 环境信息

  • 正在运行的executors的信息

演示如下:

  1. 通过spark的java接口启动spark

    SparkConf sc = new SparkConf(); // 创建一个SpakrConf对象用于配置Spark
    sc.setAppName("name") // 设定程序名字
        .setMaster("local"); // 选择启动模式,这里用的local模式
        
    SparkSession spark = SparkSession.builder().config(sc).getOrCreate(); //通过SparkSession启动
    ...
    
  2. 启动Spark后可以通过localhost:4040端口查看当前任务情况(目前测试过这个localhost可以是127.0.0.1或127.0.1.1或本机IPv4地址)。

  3. 当有多个Spark上下文时,端口号会顺延,如4041、4042…

  4. web端口可以通过spark.ui.port进行设置,例如:

    SparkConf sc = new SparkConf();
    sc.setAppName("name")
    	.setMaster("local")
    	.set("spark.ui.port", "4050"); // 设置后通过localhost:4050访问webui
    

注:4040端口仅在driver运行时存在,当程序结束,4040端口就不可访问了,这时可以通过history server访问历史任务信息

二、18080端口

18080端口为history server端口的WebUI,展示信息为已完成和未完成的应用信息,当4040端口关闭后,可以通过18080端口查看相关信息。

  • 展示信息包含4040端口的所有信息

演示如下:

  1. 首先创建history sever的读取路径文件夹:

    mkdir /usr/local/spark/spark-events(路径可自定义)

    vi /usr/local/spark/conf/spark-env.sh

    拷贝export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=/usr/local/spark/spark-events"sarpk-env.sh

注意:等于号后面的路径要与1中创建文件夹路径一致

  1. 启动history server:

    cd /usr/local/spark/sbin

    ./start-history-server.sh

  2. 通过spark的java接口配置SparkConf:

    SparkConf sc = new SparkConf();
    sc.setAppName("name")
        .setMaster("local")
        .set("spark.eventLog.dir", "/usr/local/spark/spark-events") // 配置history server的存储路径,需要与1中读取路径一直
        .set("spark.eventLog.enabled", "true") // 开启事件记录
        .set("spark.eventLog.compress", "true") // 对存入的日志压缩
    
  3. 运行java代码后,然后即可通过localhost:18080查看历史任务信息

​ 注:localhost是启动spark-history-server的机器的配置文件spark-env.sh中的SPARK_LOCAL_IP

  1. history server端口号可以通过spark.history.ui.port进行设置,例如设置为28080:

    vi /usr/local/spark/conf/spark-env.sh

    export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=/usr/local/spark/spark-events -Dspark.history.ui.port=28080"

    修改后重启history server:

    ./stop-history-server.sh

    ./start-history-server.sh

    即可通过localhost:28080端口访问

三、8080端口

8080端口为展示master的信息的默认端口,主要展示信息如下:

  • Spakr master的url
  • worker信息
  • 任务信息

查看8080端口首先需要启动Spark StandAlone集群,这里通过手动启动:

  1. 命令行输入./sbin/start-master.sh启动master ,启动后可以在localhost:8080端口查看(localhost为机器的配置文件spark-env.sh中的SPARK_LOCAL_IP),此时还没有worker绑定到master

    注:master的url可以通过spark-env.sh中的SPARK_MASTER_HOSTSPARK_MASTER_PORT修改。也可以在命令行启动时修改,例如./sbin/start-master.sh -h 127.0.0.1 -p 6666

  2. 绑定一个worker到master:

    cd /usr/local/spark/sbin

    ./start-worker.sh spark://master'url(其中master'url可以从localhost:8080中查看)

    注:worker启动时也可以通过-h-p修改worker的url。

  3. 刷新8080端口网页,可以发现已经出现一个worker,这时已经部署好了1个master+1个worker的集群了,点击woker id可以查看worker信息。

    注:如果是worker是从另一台机器绑定到master,需要将worker所在及其的SPARK_LOCAL_IP更改为IPv4地址才能通过master所在机器查看worker信息。

  4. 通过java端开启一个任务(统计文档字数):

    SparkConf sc = new SparkConf();
    sc.setAppName("Simple Application")
        .setMaster("spark://172.16.14.197:7077") // 声明任务绑定到的master的url
        .set("spark.eventLog.dir", "/usr/local/spark/spark-events") 
        .set("spark.eventLog.enabled", "true")
        .set("spark.eventLog.compress", "true");
    
    SparkSession spark = SparkSession.builder().config(sc).getOrCreate();
    
    // 如果是集群,这里的文档需要在每台worker上都存在,否则会报文件不存在错误
    Dataset<String> testData = spark.read().textFile("/usr/local/spark/LICENSE");
    Dataset<String> testData1 = spark.read().textFile("/usr/local/spark/NOTICE");
    
    long num = testData.count();
    long num1 = testData1.count();
    
    System.out.println(num);
    System.out.println(num1);
    
    spark.stop();
    

    执行后,可以通过18080端口查看任务运行情况。

  5. 8080端口号同样可以被修改,在spark-env.sh中加入SPARK_MASTER_WEBUI_PORT=9090,就将端口号修改成了9090。

Logo

大数据从业者之家,一起探索大数据的无限可能!

更多推荐