1.Spark 环境下 Scala 和 Python 两种语言的对比!
2.如何使用scala开发spark作业并访问hive
3.Spark第一个程序,WordCount
4.Spark-Submit 源码剖析
5.spark平台下,scala比java更有优势么?
6.IntelliJ-IDEA-Maven-Scala-Spark开发环境搭建
Spark 环境下 Scala 和 Python 两种语言的对比!
在年前后的互联网大数据热潮中,Apache Spark凭借其高性能和完善的生态系统,成为了数据处理领域的全网视频源码热门选择。Spark框架的主要编写语言是Scala,同时支持Python和Java。Scala的简洁语法和类型推断使其在Spark开发中相对于Java具有明显优势,特别是其REPL环境对于数据处理至关重要。然而,Python,以其易学易用和交互式编程环境,也吸引了大量开发者。
在性能方面,Scala作为编译型语言,比Python的解释型特性快约倍,且能无缝对接Hadoop框架。然而,Python的性能劣势可以通过增加硬件核数来弥补,而在Spark开发中,性能并非决定语言选择的唯一因素。
在上手难度和语法方面,uniapp小游戏源码Python以其接近伪代码的简洁性,让代码阅读和编写更为流畅。然而,Scala的API链式调用和一些独特语法规则可能需要一定时间适应。Scala适合处理复杂工作流,而Python则适合简单的逻辑处理。
并发性上,由于GIL的存在,Python在Spark中的并发性不如Scala。类型安全上,Scala的静态类型系统提供了更好的错误检查,有助于重构和优化。
Spark集成上,Scala作为Spark的原生语言,对于底层修改和功能优化更方便。Python虽然有scikit-learn等工具,但在Spark的最新特性移植和工程性上不如Scala。
在高级特性上,Python在数据科学工具和机器学习算法方面更丰富,而Scala在流式计算和工程应用上更有优势。
总结来说,Scala和Python在Spark环境中各有千秋。6合社区源码Python更适合数据分析和机器学习,而Scala则更偏向于复杂工程场景。两者都是构建数据科学应用的有效工具,选择哪一种取决于具体需求和项目特性。
如何使用scala开发spark作业并访问hive
如何使用scala开发spark作业,并访问hive?
1、为了让Spark能够连接到Hive的原有数据仓库,我们需要将Hive中的hive-site.xml文件拷贝到Spark的conf目录下,这样就可以通过这个配置文件找到Hive的元数据以及数据存放。
在这里由于我的Spark是自动安装和部署的,因此需要知道CDH将hive-site.xml放在哪里。经过摸索。该文件默认所在的路径是:/etc/hive/conf下。
同理,spark的conf也是在/etc/spark/conf。
此时,如上所述,将对应的hive-site.xml拷贝到spark/conf目录下即可
如果Hive的元数据存放在Mysql中,我们还需要准备好Mysql相关驱动,比如:mysql-connector-java-5.1.-bin.jar。
Spark第一个程序,WordCount
1、YY支付平台源码环境准备:idea,jdk,scala,请参考相关文章
2、创建一个新的maven项目
3、在项目中添加必要的依赖关系
4、在项目根目录下创建名为“datas”的文件夹,并在该文件夹中创建两个文本文件“1.txt”和“2.txt”,分别写入相应的数据
5、在maven项目文件夹上右击,选择添加Scala支持
6、在Java目录下创建一个名为“WordCount.scala”的Scala文件,文件内容如下
7、执行程序后,结果如下:大功告成!o(╯□╰)o
Spark-Submit 源码剖析
直奔主题吧:
常规Spark提交任务脚本如下:
其中几个关键的参数:
再看下cluster.conf配置参数,如下:
spark-submit提交一个job到spark集群中,大致的经历三个过程:
代码总Main入口如下:
Main支持两种模式CLI:SparkSubmit;SparkClass
首先是checkArgument做参数校验
而sparksubmit则是通过buildCommand来创建
buildCommand核心是AbstractCommandBuilder类
继续往下剥洋葱AbstractCommandBuilder如下:
定义Spark命令创建的方法一个抽象类,SparkSubmitCommandBuilder刚好是实现类如下
SparkSubmit种类可以分为以上6种。SparkSubmitCommandBuilder有两个构造方法有参数和无参数:
有参数中根据参数传入拆分三种方式,然后通过OptionParser解析Args,构造参数创建对象后核心方法是通过buildCommand,而buildCommand又是源码反码咋算通过buildSparkSubmitCommand来生成具体提交。
buildSparkSubmitCommand会返回List的命令集合,分为两个部分去创建此List,
第一个如下加入Driver_memory参数
第二个是通过buildSparkSubmitArgs方法构建的具体参数是MASTER,DEPLOY_MODE,FILES,CLASS等等,这些就和我们上面截图中是对应上的。是通过OptionParser方式获取到。
那么到这里的话buildCommand就生成了一个完成sparksubmit参数的命令List
而生成命令之后执行的任务开启点在org.apache.spark.deploy.SparkSubmit.scala
继续往下剥洋葱SparkSubmit.scala代码入口如下:
SparkSubmit,kill,request都支持,后两个方法知识支持standalone和Mesos集群方式下。dosubmit作为函数入口,其中第一步是初始化LOG,然后初始化解析参数涉及到类
SparkSubmitArguments作为参数初始化类,继承SparkSubmitArgumentsParser类
其中env是测试用的,参数解析如下,parse方法继承了SparkSubmitArgumentsParser解析函数查找 args 中设置的--选项和值并解析为 name 和 value ,如 --master yarn-client 会被解析为值为 --master 的 name 和值为 yarn-client 的 value 。
这之后调用SparkSubmitArguments#handle(MASTER, "yarn-client")进行处理。
这个函数也很简单,根据参数 opt 及 value,设置各个成员的值。接上例,parse 中调用 handle("--master", "yarn-client")后,在 handle 函数中,master 成员将被赋值为 yarn-client。
回到SparkSubmit.scala通过SparkSubmitArguments生成了args,然后调用action来匹配动作是submit,kill,request_status,print_version。
直接看submit的action,doRunMain执行入口
其中prepareSubmitEnvironment初始化环境变量该方法返回一个四元 Tuple ,分别表示子进程参数、子进程 classpath 列表、系统属性 map 、子进程 main 方法。完成了提交环境的准备工作之后,接下来就将启动子进程。
runMain则是执行入口,入参则是执行参数SparkSubmitArguments
Main执行非常的简单:几个核心步骤
先是打印一串日志(可忽略),然后是创建了loader是把依赖包jar全部导入到项目中
然后是MainClass的生成,异常处理是ClassNotFoundException和NoClassDeffoundError
再者是生成Application,根据MainClass生成APP,最后调用start执行
具体执行是SparkApplication.scala,那么继续往下剥~
仔细阅读下SparkApplication还是挺深的,所以打算另外写篇继续深入研读~
spark平台下,scala比java更有优势么?
在Spark平台下,Scala相较于Java,确实展现出了诸多优势,尤其是在操作和语言特性上。
首先,从Scala的集合操作过渡到Spark的RDD操作,更为自然流畅,而Java则需要更大的转变,容易带来一些不必要的复杂性。这使得Scala在Spark平台下具备了显著的优势。
Scala在多个层面展现了其独特魅力。其静态强类型与类型推导的结合,提供了类型安全的同时,也简化了代码编写过程。Scala作为一门图灵完备的语言,不仅在类型系统上具备完备性,还融合了函数式编程与面向对象编程的优点,实现了功能与实践的完美结合。此外,Scala能够无缝调用Java库,与JVM的兼容性使得其在与Java生态系统的交互中如鱼得水。虽然编译速度稍慢,但开发效率的提升足以弥补这一不足。丰富的生态系统和众多库的可用性,进一步丰富了Scala的应用场景。
值得一提的是,Scala的适用范围广泛,几乎任何Java能使用的场景,Scala都能胜任。这意味着开发者能够在不牺牲通用性的同时,享受到Scala带来的便利与效率。
至于Scala是否会取代Java,从语言的角度来看,Scala无疑具备了取代Java的可能性。毕竟,两者在功能和设计上存在代际差异。然而,实际上的取代需要开发者亲身体验和实践。仅仅依赖理论分析或观望,并不能真正推动技术的进化。因此,鼓励开发者深入学习和实践Scala,以推动这一趋势的实现。
IntelliJ-IDEA-Maven-Scala-Spark开发环境搭建
首先,你需要从官方网站下载并安装Java Development Kit (JDK)。确保安装完成后,检查环境变量是否配置正确。接着,转向Scala,从其官方网站下载并安装最新版本。安装完成后,你可以在IntelliJ IDEA中寻找Scala插件,进行安装以支持Scala开发。
在IntelliJ IDEA中,启动新项目,跟随向导创建一个Maven项目。在向导中,你需要填写项目的基本信息,包括项目名称和版本号。下一步,进入项目的pom.xml文件,这里你可以自定义Maven的依赖项和版本,比如添加对Scala的支持。
删除pom.xml中默认生成的代码,然后动手编写你自己的Hello World程序。这是展示Scala功能的良好起点。记得保存并整理你的代码结构。
编译完成后,你需要定义打包命令,这将生成可部署的项目包。根据你的需求,可以选择合适的打包选项,比如运行`mvn clean package`命令来执行这个过程。
为了测试你的项目,你可以选择将打包后的文件上传到测试环境,或者在本地运行。这样,你可以验证Scala、Maven和Spark集成环境是否已经配置妥当。
以上步骤由Yezhiwei撰写,他在他的博客 IntelliJ-IDEA-Maven-Scala-Spark开发环境搭建-Yezhiwei的博客 | Yezhiwei Blog 上分享了这些经验。请注意,所有内容均来源于网络,版权归属原作者,如遇到问题,请直接与他们联系获取帮助。感谢阅读!