spark版本升级问题org.apache.spark.Logging

git下面有一个spark项目,用的版本是1.6.2,据说很稳定的一个版本,因为在2.0以后出来一个sparksession整合df和df 于是将spar库版本升到2.4.3,下面是遇到的问题

1.升级后找不到org.apache.spark.Logging。

  1.6.2中用的trait Logging 找不到org.apache.spark.Logging。

  在spark2.4.3中对应是org.apache.spark.internal.Logging2.toArray()算子已经被collect替代

3.并且编译报错 missing or invalid dependency detected while loading class file 'ProductRDDFunctions.class'.

Error:scalac: missing or invalid dependency detected while loading class file 'ProductRDDFunctions.class'.
Could not access type Logging in package org.apache.spark,
because it (or its dependencies) are missing. Check your build definition for
missing or conflicting dependencies. (Re-run with `-Ylog-classpath` to see the problematic classpath.)
A full rebuild may help if 'ProductRDDFunctions.class' was compiled against an incompatible version of org.apache.spark.

进入到ProductRDDFunctions源码属于 phoenix-spark版本4.9.0-hbase-1.2包中,报错提到Could not access type Logging in package org.apache.spark, 上面提到logging在2.4.3中全路径是org.apache.spark.internal.Logging。可以判定jar不匹配导致的

本地用的spark是2.4.3  scala2.11,在maven库中找比较新的版本(自己选用的4.14.3-HBase-1.3版本),更新pom依赖版本后问题解决

 

4.升级后编译报错算子mean(),问题为解决,后期解决了补上

   val test: DataFrame = frame.select("rating", "prediction")
  // rating为表中已有的数据,prediction为计算出的预测值
  // mean()为取平均值
// 原来的用法
 // test.map(x=>math.pow(x.getDouble(0)-x.getDouble(1),2)).mean()


//修改后的用法
  val testresult: Dataset[Double] = test.map(x=>math.pow(x.getDouble(0)-x.getDouble(1),2))
   val MSE: DataFrame = testresult.describe("mean")


//修改后编译时报错信息
Error:(32, 45) Unable to find encoder for type Double. An implicit Encoder[Double] is needed to store Double instances in a Dataset. Primitive types (Int, String, etc) and Product types (case classes) are supported by importing spark.implicits._  Support for serializing other types will be added in future releases.
  val testresult: Dataset[Double] = test.map(x=>math.pow(x.getDouble(0)-x.getDouble(1),2))

//按照报错提示添加implicit  var matchError = org.apache.spark.sql.Encoders[DoubleType]依然报错
### Spark 集群启动后的 Master 和 Worker 日志路径及状态 当使用 `start-all.sh` 脚本启动 Spark 集群时,Master 和 Worker 的日志通常会保存在 `$SPARK_HOME/logs` 目录下。具体来说: - **Master 日志**:位于 `${SPARK_HOME}/logs/spark-${USER}-org.apache.spark.deploy.master.Master-*.out` 文件中[^1]。 - **Worker 日志**:位于 `${SPARK_HOME}/logs/spark-${USER}-org.apache.spark.deploy.worker.Worker-*.out` 文件中[^2]。 可以通过查看这些日志文件来确认 Master 和 Worker 是否正常启动以及是否有任何错误信息。 关于集群的状态监控,可以访问 Web UI 来获取实时的运行情况。默认情况下: - **Master 的 Web UI 地址** 是 `http://<master-host>:8080`,这里 `<master-host>` 是指 Master 所在主机的 IP 或者域名[^3]。 - **Worker 的 Web UI 地址** 则是 `http://<worker-host>:8081`,其中 `<worker-host>` 表示某个 Worker 节点的地址。 如果需要进一步调整日志级别或者存储位置,则可以在 `conf/log4j.properties.template` 中修改配置并重命名为 `log4j.properties`。 对于版本号为 `spark-3.3.4-bin-hadoop3-scala2.13` 的环境,默认的日志行为遵循上述描述;如果有自定义设置(比如 HDFS 上面记录事件),则需额外关注对应的参数如 `spark.eventLog.dir` 等是否被重新指定。 ```bash # 查看当前 SPARK_HOME 下的日志目录结构 ls ${SPARK_HOME}/logs/ ``` #### 示例代码片段用于验证服务状态 以下是通过脚本简单检测 Spark Master 和 Worker 运行状况的一个例子: ```python import requests def check_spark_status(master_url, worker_urls): try: master_response = requests.get(f"{master_url}/json/") if master_response.status_code == 200 and 'activeapps' in master_response.json(): print("Master is running.") for idx, url in enumerate(worker_urls, start=1): worker_response = requests.get(url + "/json/") if worker_response.status_code == 200 and 'executors' in worker_response.json(): print(f"Worker {idx} is running at {url}.") else: print(f"Worker {idx} not responding or inactive.") except Exception as e: print(f"Error occurred while checking status: {e}") if __name__ == "__main__": MASTER_URL = "http://localhost:8080" WORKER_URLS = ["http://localhost:8081", "http://another-worker:8081"] check_spark_status(MASTER_URL, WORKER_URLS) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值