掌握IDEA导入Spark源码和Scala编译技巧

版权申诉
0 下载量 109 浏览量 更新于2024-10-09 收藏 10KB ZIP 举报
资源摘要信息: "在本读书笔记中,我们将详细介绍如何在IntelliJ IDEA集成开发环境中导入Apache Spark源码,并进行阅读与编译Scala程序的步骤。由于Apache Spark是一个用Scala编写的开源大数据处理框架,因此,对于想要深入了解Spark内部机制的开发者来说,直接阅读源码是一个非常有价值的学习方式。此笔记假定读者已经具备一定的Scala编程基础和对IDEA操作的基本了解。" 知识点详解: 1. IntelliJ IDEA基础配置 IntelliJ IDEA是Java开发者广泛使用的集成开发环境,提供了对Scala语言的良好支持。要使用IDEA来阅读和编译Spark源码,首先需要下载并安装最新版的IntelliJ IDEA(社区版或专业版)。安装完成后,需要配置Scala插件,以便IDEA能支持Scala语言特性。 2. 下载Spark源码 Spark的源码托管在GitHub上,可以通过访问Spark的官方GitHub仓库(***)来克隆或下载源码。对于阅读源码的目的,推荐下载压缩包然后解压,因为这样可以更快地开始阅读。 3. 导入源码到IntelliJ IDEA - 打开IntelliJ IDEA,选择“File”菜单下的“Open”选项,然后在弹出的文件选择对话框中定位到Spark源码解压后的目录。 - 点击“OK”,IDEA将开始识别项目结构并加载源码,这个过程可能需要一段时间。 - 在导入过程中,IDEA会尝试解析项目依赖并下载所需的库,可能需要配置Maven或SBT(Scala构建工具)。 4. 配置项目依赖 Spark使用SBT作为其构建和依赖管理工具。为了正确编译和运行Spark程序,需要配置SBT环境。 - 在IDEA中,打开“Preferences”(或“Settings”),找到SBT设置项。 - 配置SBT的Home Directory为本地SBT安装路径或者IntelliJ IDEA自带的SBT版本。 - 确保SBT能够正确解析项目的依赖项。 5. 编译Spark源码 Spark源码导入完成后,下一步就是编译源码。 - 在IDEA的右侧边栏中打开“Maven Projects”面板(或SBT控制面板)。 - 从面板中找到“spark”项目,并点击“package”或者“install”来编译整个项目。 - 编译过程会下载所有需要的依赖,并编译Spark源码,最终生成可运行的jar包。 6. 阅读和调试源码 编译完成后,可以开始对Spark源码进行阅读和调试。 - 利用IDEA的导航功能,如“Navigate to Source”(Ctrl + Shift + N)快速跳转到指定的源文件。 - 使用代码高亮、代码补全、智能提示等功能来提高阅读效率。 - 通过设置断点来调试代码,查看程序运行时变量的状态和程序的执行流程。 7. 对Scala程序的编译 虽然本笔记主要关注Spark源码,但提到的步骤同样适用于在IDEA中编译普通的Scala程序。 - 在IDEA中创建一个新的Scala项目或模块。 - 添加必要的Scala和项目依赖库。 - 编写Scala代码,并使用IDEA强大的编译器来编译和运行程序。 - 通过编译时错误提示和运行时日志来调试和优化程序。 通过以上步骤,读者可以在IntelliJ IDEA中有效地导入和阅读Spark源码,并对Scala程序进行编译和开发。这个过程不仅有助于理解Spark的工作原理,也能够提升Scala编程技能。

Exception in thread "main" java.lang.RuntimeException: java.lang.NoSuchFieldException: DEFAULT_TINY_CACHE_SIZE at org.apache.spark.network.util.NettyUtils.getPrivateStaticField(NettyUtils.java:131) at org.apache.spark.network.util.NettyUtils.createPooledByteBufAllocator(NettyUtils.java:118) at org.apache.spark.network.server.TransportServer.init(TransportServer.java:95) at org.apache.spark.network.server.TransportServer.<init>(TransportServer.java:74) at org.apache.spark.network.TransportContext.createServer(TransportContext.java:114) at org.apache.spark.rpc.netty.NettyRpcEnv.startServer(NettyRpcEnv.scala:118) at org.apache.spark.rpc.netty.NettyRpcEnvFactory$$anonfun$4.apply(NettyRpcEnv.scala:454) at org.apache.spark.rpc.netty.NettyRpcEnvFactory$$anonfun$4.apply(NettyRpcEnv.scala:453) at org.apache.spark.util.Utils$$anonfun$startServiceOnPort$1.apply$mcVI$sp(Utils.scala:2237) at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:160) at org.apache.spark.util.Utils$.startServiceOnPort(Utils.scala:2229) at org.apache.spark.rpc.netty.NettyRpcEnvFactory.create(NettyRpcEnv.scala:458) at org.apache.spark.rpc.RpcEnv$.create(RpcEnv.scala:56) at org.apache.spark.SparkEnv$.create(SparkEnv.scala:246) at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:175) at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:257) at org.apache.spark.SparkContext.<init>(SparkContext.scala:432) at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2509) at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:909) at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:901) at scala.Option.getOrElse(Option.scala:121) at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:901) at com.cssl.scala720.KafkaSparkStreamingHBase$.main(KafkaSparkStreamingHBase.scala:28) at com.cssl.scala720.KafkaSparkStreamingHBase.main(KafkaSparkStreamingHBase.scala) Caused by: java.lang.NoSuchFieldException: DEFAULT_TINY_CACHE_SIZE at java.lang.Class.getDeclaredField(Class.java:2070) at org.apache.spark.network.util.NettyUtils.getPrivateStaticField(NettyUtils.java:127) ... 23 more Process finished with exit code 1

2023-07-24 上传

报错Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties 23/06/01 20:24:22 INFO SparkContext: Running Spark version 2.0.0 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections/map/UnmodifiableMap at org.apache.hadoop.conf.Configuration$DeprecationContext.<init>(Configuration.java:409) at org.apache.hadoop.conf.Configuration.<clinit>(Configuration.java:448) at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:260) at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:790) at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:760) at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:633) at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2245) at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2245) at scala.Option.getOrElse(Option.scala:121) at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2245) at org.apache.spark.SparkContext.<init>(SparkContext.scala:297) at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2256) at org.apache.spark.sql.SparkSession$Builder$$anonfun$8.apply(SparkSession.scala:831) at org.apache.spark.sql.SparkSession$Builder$$anonfun$8.apply(SparkSession.scala:823) at scala.Option.getOrElse(Option.scala:121) at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:823) at spark.sparkMysql$.main(sparkToMysql.scala:11) at spark.sparkMysql.main(sparkToMysql.scala) Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.map.UnmodifiableMap at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 18 more Process finished with exi

2023-06-02 上传