scala执行linux shell,linux – 如何从Scala执行shell builtin

我需要从

Linux中的Scala脚本检查一些系统设置,如ulimit -n.如果我要处理普通命令,我会使用scala.sys.process包,如:

@H_404_2@import scala.sys.process._

println("ls -lha".!!)

不幸的是,这对shell内置函数不起作用.有没有办法从Scala中内置的shell中捕获输出?

更新:

我尝试了几种形式的通常技巧sh -c“ulimit -n”,没有运气;以下所有命令均失败:

@H_404_2@"sh -c 'ulimit -n'".!!

"sh -c \"ulimit -n\"".!!

"""sh -c "ulimit -n"""".!!

"""sh -c "ulimit -n """ + "\"".!!

我在REPL中遇到运行时错误:

@H_404_2@-n": 1: Syntax error: Unterminated quoted string

java.lang.RuntimeException: Nonzero exit value: 2

at scala.sys.package$.error(package.scala:27)

at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.slurp(ProcessBuilderImpl.scala:131)

at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.$bang$bang(ProcessBuilderImpl.scala:101)

at .(:11)

at .()

at .(:11)

at .()

at $print()

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:601)

at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:704)

at scala.tools.nsc.interpreter.IMain$Request$$anonfun$14.apply(IMain.scala:920)

at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:43)

at scala.tools.nsc.io.package$$anon$2.run(package.scala:25)

at java.lang.Thread.run(Thread.java:722)

将字符串转换为shell命令时,参数由空格分隔.您尝试的约定是shell约定,因此您需要一个shell来开始应用它们.

如果您想要更多地控制每个参数是什么,请使用Seq [String]而不是String,或者使用一个相同的Process工厂.例如:

@H_404_2@Seq("sh","-c","ulimit -n").!!

<think>首先,用户的问题是:“请使用中文回答问题”,然后他们提供了一堆日志输出。日志是关于Spark的错误信息。关键错误是:“org.apache.spark.SparkException: A master URL must be set in your configuration”,意思是Spark配置中必须设置一个主URL。 用户要求:在回答完问题后,必须提出3-5个相关问题,并以“§§相关问题§§”开头,放在回答末尾。相关问题必须基于用户的问题和我的回答。 我的回答应该用中文,因为用户说“请使用中文回答问题”。 分析日志: - Spark启动时,报告了版本信息。 - 警告:找不到winutils.exe,因为HADOOP_HOME未设置。 - 错误:SparkContext初始化失败,因为配置中没有设置master URL。 - 异常:抛出SparkException,主URL必须设置。 核心问题:Spark应用程序需要指定master URL,比如local[*]或spark://host:port,否则无法运行。 我的回答应该解释这个错误,并提供解决方案。 回答结构: 1. **解释错误**:用中文解释错误原因。 2. **提供解决方案**:建议如何设置master URL。 3. **相关问题**:在末尾提出3-5个相关问题。 相关问题必须基于用户的问题和我的回答: - 用户的问题是关于Spark错误日志的。 - 我的回答将解释错误和如何修复。 可能的回答内容: - 解释:Spark需要一个master URL来指定运行模式,如本地模式或集群模式。在配置中没有设置时,会抛出这个错误。 - 解决方案:在代码中设置SparkConf,比如 `new SparkConf().setMaster("local[*]")`。 然后,提出相关问题: 1. 如何设置Spark的master URL? 2. 什么是Spark的本地模式? 3. 为什么HADOOP_HOME需要设置?它与这个错误相关吗? 4. SparkConf的其他常见配置是什么? 5. 如何修复winutils.exe警告? 确保3-5个问题。 输出格式: - 回答内容。 - 最后一行:§§相关问题§§ - 然后列出问题,每个问题以数字开头。 示例格式是: 快速排序的基本思想... ```python code... ``` §§相关问题§§ 1. ··· 2. ··· 3. ··· 在这个例子中,用户提供了日志,没有代码,所以我应该直接解释错误。 最终回答结构: - 用中文解释错误。 - 建议修复方法。 - 然后:§§相关问题§§ - 列出3-5个问题。 相关问题: 1. 什么是Spark的master URL? 2. 如何在Spark应用程序中配置master URL? 3. 为什么在Windows上运行Spark需要设置HADOOP_HOME? 4. 如何解决Spark中的winutils.exe错误? 5. 除了master URL,SparkConf中还有哪些重要设置? 确保问题数量在3-5个。</think>根据您提供的Spark错误日志,问题核心在于Spark应用程序初始化失败,因为缺少必需的配置。具体分析如下: - **错误原因**:日志显示 `org.apache.spark.SparkException: A master URL must be set in your configuration`,这表示Spark需要一个master URL来指定运行模式(如本地模式或集群模式)。在您的代码(如 `HeroGraphX.scala`)中,未通过 `SparkConf` 设置此URL,导致SparkContext无法启动。 - **其他警告**:日志中还提到 `HADOOP_HOME and hadoop.home.dir are unset` 和 `Unable to load native-hadoop library`,这表明Hadoop环境变量未正确配置,可能影响某些功能(如文件操作),但这不是主错误原因。 - **解决方案**: 1. 在Scala代码中,通过 `SparkConf` 设置master URL。例如: ```scala import org.apache.spark.{SparkConf, SparkContext} val conf = new SparkConf().setAppName("MyApp").setMaster("local[*]") // 使用本地模式 val sc = new SparkContext(conf) ``` 2. 如果使用Spark Shell或提交脚本,可以在命令行添加 `--master` 参数,如 `spark-submit --master local[*] your-app.jar`。 3. 对于Windows用户,设置 `HADOOP_HOME` 环境变量指向Hadoop的bin目录(或下载winutils.exe),以避免辅助警告,但这不影响主错误修复。 此错误常见于开发环境配置疏忽,修复后SparkContext应能正常启动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值