通过scala代码可以直接调用JVM的系统功能或者OS的系统功能或者OS的shell命令,这可以极大的简化外部功能的实现
前言
写了一个 spark 的文件操作的代码。遇到一个权限问题。
HDFS 提供 API 修改某个路径的权限。
1 | val sparkConf = new SparkConf() |
但是没有递归修改某个路径的权限。
最先想法是通过递归的方式去一个个路径改权限。
同事给了一个 idea ,说可以试试代码调用外部命令来直接使用 hadoop fs -chmod -R 777 path 的方式来实现。
原理
scala外部命令工作的原理:
通过scala代码可以直接调用JVM的系统功能或者OS的系统功能或者OS的shell命令,这可以极大的简化外部功能的实现,因为这种工作方式实际上是复用JVM和OS本身提供的功能,作为scala本身是直接把结果拿过来,其实这是代码模块化和软件复用的一种表现。
scala是基于JVM进程的,scala程序运行的时候会运行在JVM进程中,而JVM进程是OS的一个普通进程,通过JVM可以直接和OS进行交互,而OS有例如启动进程等功能,所以scala程序可以通过JVM去调用外部的功能。
示例
spark-shell
1 | import sys.process._ |
代码
1 | import sys.process._ |
参考链接