linux怎样查看sparklinux查看php运行状态态

想研读下spark的源码,怎么搭阅读和调试的环境呢? - 知乎804被浏览44476分享邀请回答build/sbt -Dscala-2.10 -Phive clean assembly/assembly
简单说,这是因为 Spark 的 SBT build 对 Scala 版本的设置做了特殊处理,标准的 Maven -P 参数是无效的。注意:正在开发中的 Spark 2.0 已经取消了 assembly jar,把上述的 assembly/assembly 替换为 package 即可。工程导入新近版本的 IDEA 对 SBT 的支持已经改进了很多,早就不再需要 sbt-idea 插件。此外,由于 Spark 同时使用 Maven 和 SBT 两套 build 系统,用 Maven 和 SBT 都可以顺利导入。社区里,不同的开发者对 SBT 和 Maven 的偏好各有不同。我印象里 Cloudera 的人相对来说更喜欢 Maven,因为 Maven 对 release publishing 更友好,更方便他们将 Spark 集成进 CDH。而 Databricks 内一般用 SBT 的更多,主要是因为 SBT REPL 开发体验更流畅。我个人的偏好比较分裂——工程导入用 Maven,build 和 test 用 SBT。选择依据主要是最大化日常开发的迭代速度。IDEA 在导入 SBT 工程的时候会出现全局卡死的情况。整个导入过程是同步的,完成之前无法执行任何操作。偏偏 SBT 的依赖解析又极慢,再配合中国特色的社会主义和谐网络,每回导入打个坐,一年下来不是升仙就是成佛了吧……用 Maven 导入 IDEA 工程,这个问题就缓解了许多。Maven 的依赖解析更快,而且 IDEA 的 Maven 支持更成熟,整个解析过程是异步的,不影响其他操作。导入方法也极简单:File / Open,选定 Spark 根目录下的 pom.xml,确定即可。用 Maven 导入工程的另一个优点是,在 IDEA 的 Maven tool window(View & Tool Windows & Maven Projects)里可以很方便地调整 active profiles。假设当前 branch 开发的功能仅和 Hadoop 2.2 下的 Spark SQL 的 Hive 集成相关,那么就可以打开 hadoop-2.2 和 hive profile,关闭其他的 profile。这样一来,无关的 sub-project 就不会被激活,代码索引、依赖解析更快,内存占用也更低。SBT 配置Spark SBT build 中包含多个 sub-project,日常开发调试时经常需要切换到不同的 sub-project。因此我会简单调整一下 SBT 的 prompt string,以便显示当前的 project 名称。这步并非必须。在 $HOME/.sbt/0.13/global.sbt 中添加以下内容即可:import scala.Console.{BLUE, RESET, UNDERLINED}
shellPrompt := { state =&
val projectId = Project.extract(state).currentProject.id
s"$BLUE${UNDERLINED}sbt ($projectId)&$RESET "
效果如下:$ ./build/sbt -Phive -Phive-thriftserver
sbt (spark)& project hive
sbt (hive)&
调试一个困扰着很多初学者,甚至是一些已经有相当 Spark 开发经验的工程师的问题,就是如何在 IDEA 中调试 Spark(注意这里指的是 Spark 本身,而不是基于 Spark 开发的应用)。可能是由于 SBT / Maven 混用以及使用 assembly jar 的缘故,在 IDEA 里直接 build 和调试 Spark 并不方便,往往会碰到一些奇怪的错误,以至于 IDEA 完全退化成一个代码阅读工具和编辑器。这个问题实际上可以通过远程调试很好地解决。以下以监听模式(listen mode)为例演示如何在 IDEA 内“远程”调试本地 SBT 内启动的 Spark test case。在 IDEA 中建立 Remote Debugging Configuration选取菜单项 Run & Edit Configurations... 点击左上角加号,选取 Remote 建立一套远程调试配置,并命名为“Remote Debugging (listen)”:默认的配置刚好合用:默认的配置刚好合用:Transport:Socket,目标程序与 debugger 间通过 socket 通讯Debugger mode:Listen,debugger 担任服务器预先启动并在指定端口监听,等待目标程序主动连入Host / Port:Debugger 监听的地址和端口,默认为 localhost:5005点击 Debug 建立配置并启动 remote debugger 开始监听。今后需要再次启动 remote debugger 时,按 F9 选择建立好的“Remote Debugging (listen)”配置即可。在 SBT 中启用远程调试假设我们要调试一个跟 Spark SQL Hive 集成有关的 bug。首先,在 Spark 源码树 sql/hive 这个 sub-project 中挑个合适的 test suite(比如 HiveQuerySuite),添加一个用于复现该 bug 的 test case foo。然后进入 SBT:$ ./build/sbt -Phive -Phive-thriftserver
sbt (spark)&
切换至 hive sub-project:sbt (spark)& project hive
sbt (hive)&
设置监听模式远程调试选项:sbt (hive)& set javaOptions in Test += "-agentlib:jdwp=transport=dt_socket,server=n,suspend=n,address=localhost:5005"
(依具体情况,server、suspend、address 三个参数可以按需调整。各参数含义、取值参见 。)注意:一般情况下,运行 test case 并不需要特地切换当前 sub-project。但 SBT 中的 settings key 是跟着当前 sub-project 走的。调试 hive sub-project 下的 test case 必须在 hive sub-project 下设置 javaOptions。最后启动我们的 test case:sbt (hive)& testOnly *.HiveQuerySuite -- -t foo
(末尾的 -t foo 是传递给 ScalaTest runner 的命令行参数,表示只运行 test suite 中的 foo 这个 test case。其他参数及用法参见 。)在 remote debugger 已经成功启动并处于监听模式的前提下,此时 SBT 应该能够自动连入 remote debugger,事先在 IDEA 里设置了断点的话,也会生效。在 SBT 中关闭远程调试一旦在 SBT REPL 中设置了上述的 javaOptions,整个 SBT session 中执行任何 test 都会尝试连接 remote debugger。调试结束后,要关闭远程调试,可以执行以下命令清除先前的设置:sbt (hive)& session clear
其他sparkShell taskSpark SBT build 中定义了一个 SBT task sparkShell,可以直接在 SBT 内启动一个 Spark shell。做简单测试时很方便。30732 条评论分享收藏感谢收起673 条评论分享收藏感谢收起查看更多回答}

我要回帖

更多关于 linux查看php运行状态 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信