• [二次开发] 【MRS产品】【Spark2x功能】spark on yarn模式在客户端提交scala调用python算法的程序,python
    【功能模块】【操作步骤&问题现象】1、sparkstreaming对接kafka,应用使用scala里面,应用里面调用了python 有一些python的算法。2、提交spark任务后里面的算法跑在集群里,发现缺少numpy依赖,3、求助:在集群配置依赖仍然调不到,且在集群配置比较危险会影响其他服务环境,所以这种场景应该怎么创造spark程序运行的环境呢?【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] 【技术长文】scala简介
    1. Scala简介scala是运行在JVM上的多范式编程语言,同时支持面向对象和面向函数编程。(Scala这个名字来源于“scalable language”,即“可伸缩的语言”)早期,scala刚出现的时候,并没有怎么引起重视,随着Spark和Kafka这样基于scala的大数据框架的兴起,scala逐步进入大数据开发者的眼帘。scala的主要优势是它的表达性。接下来,我们要来学习:为什么要使用scala?通过两个案例对比Java语言和scala语言2. 为什么使用scala开发大数据应用程序(Spark程序、Flink程序)表达能力强,一行代码抵得上Java多行,开发速度快兼容Java,可以访问庞大的Java类库,例如:操作mysql、redis、freemarker、activemq等等3. Scala对比Java下面通过两个案例,分别使用java和scala实现的代码数量定义三个实体类(用户、订单、商品)for java:/** * 用户实体类 */ public class User { private String name; private List<Order> orders; public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Order> getOrders() { return orders; } public void setOrders(List<Order> orders) { this.orders = orders; } } /** * 订单实体类 */ public class Order { private int id; private List<Product> products; public int getId() { return id; } public void setId(int id) { this.id = id; } public List<Product> getProducts() { return products; } public void setProducts(List<Product> products) { this.products = products; } } /** * 商品实体类 */ public class Product { private int id; private String category; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } }for scala:case class User(var name:String, var orders:List[Order]) // 用户实体类 case class Order(var id:Int, var products:List[Product]) // 订单实体类 case class Product(var id:Int, var category:String) // 商品实体类
  • [体验官] scala列表去重
    object tem{def dups[T](list: List[T]) = list.foldLeft(List.empty[T]){        (seen, cur) =>              if(seen.contains(cur)) (seen) else (seen :+ cur)                }     //非泛型实现  def duplicate[Int](list: List[Int]) = list.foldLeft(List.empty[Int]){         (result, cur) => if(result.contains(cur)) result else result :+ cur           }   //   //   //  def main(args: Array[String]) {               // println(countWords("Jack,gates,jack,Lucy:jack,Gates!"))     val dup = List(1,1,1,2,3,4,5,5,6,100,101,101,102)     val list = List("aa","dd","aa","vv","dd")     println(duplicate(dup))     println(dups(dup))     println(dups(list))                            }运行效果:root@ecs-385f:~# scala tem.scala  warning: 1 deprecation (since 2.13.0); re-run with -deprecation for detailsList(1, 2, 3, 4, 5, 6, 100, 101, 102)List(1, 2, 3, 4, 5, 6, 100, 101, 102)List(aa, dd, vv)
  • [体验官] scala Map使用、数组和循环遍历
    test.scala:object WordCount {    def main(args: Array[String]):Unit={    var ar = Array("#","$","¥")    w(ar);    map();  }     def w(args: Array[String]): Unit = {    args.foreach(arg => println(arg))    var r = 1    var a = Array(1,2,3,4,5,6,7,8)    for (i <- 1 to a.length){      r = r * i    }     println(r);  }   def map(): Unit = {    var map = Map(1 -> "one", 2 -> "two", 3 -> "three")    map += (4 -> "4th")    map.foreach(value => println(value + " "))  }   } root@ecs-385f:~# scala test.scalawarning: 1 deprecation (since 2.13.0); re-run with -deprecation for details#$¥40320(1,one) (2,two) (3,three) (4,4th) 
  • [体验官] scala计算班级平均分数
    import scala.io.StdInobject ForDmo02 {    def main(args: Array[String]): Unit = {          val classNum = 2//表示班级个数          val stuNum = 3//表示学生个数          var score = 0.0//表示各个学生的成绩          var classScore = 0.0//班级的总分          var totalScore = 0.0//所有班级总分          for (i <- 1 to classNum) {              classScore = 0.0//先将classScore清零              for (j <- 1 to stuNum){                   printf("请输入第%d班级的第%d学生的成绩\n",i ,j )                   score = StdIn.readDouble()                   classScore +=score              }               //积累totalscore            totalScore += classScore            printf("第%d班班级的平均分为%.2f\n",i,classScore/stuNum)          }          printf("所有班级的平均分为%.2f",totalScore/(stuNum*classNum))                                                              }                                                             }root@ecs-385f:~# scala fenshu.scala请输入第1班级的第1学生的成绩22请输入第1班级的第2学生的成绩33请输入第1班级的第3学生的成绩11第1班班级的平均分为22.00请输入第2班级的第1学生的成绩99请输入第2班级的第2学生的成绩87请输入第2班级的第3学生的成绩67第2班班级的平均分为84.33所有班级的平均分为53.17root@ecs-385f:~# 原代码改自:https://blog.csdn.net/realize_dream/article/details/85281586
  • [体验官] ubuntu安装scala
    scala 最新的版本2.13.5小提示:如果网络受限而不能下载,换个移动网络环境试试。官网地址:https://www.scala-lang.org/download/ubuntu版本下载链接:https://downloads.lightbend.com/scala/2.13.5/scala-2.13.5.tgz下载后解压缩:sudo tar -xzvf scala-2.13.5.tgz -C /usr/localsudo mv scala-2.13.5 scala 设置环境变量:vi /etc/profile在文件的末尾追加:export SCALA_HOME=/usr/local/scala export PATH=$SCALA_HOME/bin:$PATH:wqroot@ecs-385f:~# source /etc/profileroot@ecs-385f:~# scalaWelcome to Scala 2.13.5 (OpenJDK 64-Bit Server VM, Java 11.0.10).Type in expressions for evaluation. Or try :help.scala> 
  • [技术干货] 通过 Maven 编译打包 Java + Scala 混合项目
    ## 1 - 问题描述 ### 1.1 背景说明 为客户提供样例代码,测试中需要对 Java + Scala 编写的 Maven 项目进行编译打包,由于 依赖了部分外部 jar 包,也就是有部分 jar 包没有在 pom.xml 中指定,导致编译失败。 ### 1.2 存在的问题 原有样例代码中,pom.xml 引入了 `org.scala-tools.maven-scala-plugin` 插件(),用于打包 Scala 项目,其配置方式如下: ```xml <plugin> <groupId>org.scala-tools</groupId> <artifactId>maven-scala-plugin</artifactId> <version>2.15.2</version> <configuration> <recompileMode>modified-only</recompileMode> </configuration> <executions> <execution> <id>main-scalac</id> <phase>process-resources</phase> <goals> <goal>add-source</goal> <goal>compile</goal> </goals> </execution> </executions> </plugin> ``` 该插件从2011年起就没有更新过,官网地址也已失效,无法找到有效的支持文档。 ## 2 - 问题解决 ### 2.1 方法一:通过scope=system引入外部依赖 Maven 支持在 dependency 中引入系统依赖,其中 `scope = system` 与 `scope = provided` 的依赖范围一致:**只在编译和测试范围内有效,运行时范围内无效**。具体配置示例如下: ```xml <dependency> <groupId>com.huawei.bigdata</groupId> <artifactId>spark-client</artifactId> <scope>system</scope> <systemPath>${project.basedir}/libs/spark-client.jar</systemPath> </dependency> ``` 将所有的外部 jar 包都通过这种方式引入,即可正常编译。 但由于外部依赖包通常都会比较多,这种方式维护成本太高,所以不予考虑。 ### 2.2 方法二:通过新插件指定外部依赖 经过搜索,找到了一款新插件:,pom.xml 中这样配置: ```xml <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>3.2.1</version> <executions> <execution> <id>scala-compile-first</id> <phase>process-resources</phase> <goals> <goal>add-source</goal> <goal>compile</goal> </goals> </execution> <execution> <id>scala-test-compile</id> <phase>process-test-resources</phase> <goals> <goal>add-source</goal> <goal>testCompile</goal> </goals> </execution> </executions> <configuration> <args> <!-- 编译时使用 libs 目录下的 jar 包,通过 mvn scala:help 查看说明 --> <arg>-extdirs</arg> <arg>${project.basedir}/libs</arg> </args> <scalaVersion>2.11.8</scalaVersion> </configuration> </plugin> ``` 通过 -extdirs 参数,指定外部依赖的 jar 包。 其他参数的查看:在终端窗口中,通过命令 mvn scala:help 查看主要配置项参数,例如: ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202008/04/165332edbzm0f9p28he0vu.png) 更详细的使用说明,请参考: **编译、打包用法:** (1) 直接在 IDEA 的 Maven -> Project -> Lifecucle -> compile | package 进行编译或打包; (2) 在终端窗口,通过如下命令进行编译打包: ```bash mvn clean scala:compile compile package ``` 说明:在 compile 前加 scala:compile,这是该插件提供的选项,表示:先编译scala,再编译java,最后打包。
  • scala-compiler-2.11.7.jar移植指南
    1 简介 Scala-compiler,是scala语言的一个编译器。2 编译环境配置2.1 安装Openjdk下载并安装到指定目录(如/opt/tools/installed):wget  https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u191-b12/OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gztar   -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gzmv jdk8u191-b12   /opt/tools/installed/配置java环境变量,在/etc/profile文件末尾处增加下面的代码:JAVA_HOME=/opt/tools/installed/jdk8u191-b12PATH=$JAVA_HOME/bin:$PATHexport   JAVA_HOME PATH运行下面命令,使修改的环境变量生效:source   /etc/profile2.2 安装Maven下载并安装到指定目录(如/opt/tools/installed):wget   https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gztar   -zxf apache-maven-3.5.4-bin.tar.gzmv   apache-maven-3.5.4 /opt/tools/installed/修改maven环境变量,在/etc/profile文件末尾增加下面高亮代码:JAVA_HOME=/opt/tools/installed/jdk8u191-b12MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATHexport   MAVEN_HOME   JAVA_HOME PATH运行下面的命令,是修改的环境变量生效:source   /etc/profile修改maven配置文件中的:本地仓路径、远程仓等:<!--默认在“~/.m2/”目录下,修改成你自己想保存的目录--><localRepository>/path/to/local/repo</localRepository> <!--修改成自己搭建的maven仓库,ARM使能后的jar包替换到该仓库--><mirror></mirror>2.3 安装ant下载ant 1.7.1版本并解压:wget https://archive.apache.org/dist/ant/binaries/apache-ant-1.7.1-bin.tar.gztar   -xzf apache-ant-1.7.1-bin.tar.gz运行下面命令,使修改的环境变量生效:JAVA_HOME=/opt/tools/installed/jdk8u191-b12ANT_HOME=/opt/tools/apache-ant-1.7.1MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/libPATH=$ANT_HOME/bin:$JAVA_HOME/bin:$PATHexport   MAVEN_HOME JAVA_HOME ANT_HOME CLASSPATH PATH 运行下面命令,使修改的环境变量生效:source   /etc/profile 3 组件编译安装    1)从github官方网站下载对应版本源码并解压git clone https://github.com/scala/scala.gitcd   scalagit checkout v2.11.72)编译jline-2.12.1,参考链接https://bbs.huaweicloud.com/forum/thread-22742-1-1.html编译并将编译过后的jline-2.12.1.jar替换到maven本地仓库3)执行编译ant会在./build/pack/lib目录下生成对应的jar包:将scala-compiler.jar重命名为scala-compiler-2.11.7.jar
  • [其他语言] 【华为云鲲鹏云服务最佳实践】【编译器篇】第001期scala-compiler-2.11.8安装配置指南
    1、简介Scala-compiler是scala语言的一个编译器。类别:编译器2、基础环境类别子项版本获取地址(方法)华为云虚拟机KC1(920)--OSCentOS7.6Kernel4.14软件包 Scala-compiler2.11.8https://github.com/scala/scala.git3、依赖安装1)安装操作系统自带依赖软件版本yum install git gcc gcc-c++ make cmake libtool autoconf automake ant  java-1.8.0-openjdk java-1.8.0-openjdk-devel-y2)安装Maven简介:通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。安装软件:apache-maven-3.5.4-bin.tar.gzwget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gztar -zxvf apache-maven-3.5.4-bin.tar.gz -C /usr/local/hadoopapps/apache-maven/配置mvn的环境变量vim /etc/profileexport M2_HOME=/usr/local/hadoopapps/apache-maven/apache-maven-3.5.4 export PATH=$M2_HOME/bin:$PATH  使环境变量生效source /etc/profile测试是否安装完成mvn –v3)安装jline-2.12.1  安装jansi-native为保证jansi编译成功后的jar包包含的so文件为aarch64 架构,需要优先编译jansi-native,通过在jansi的解压目录下使用mvn dependency:tree 命令可以查看到所依赖的jansi-native的版本号为1.5,故对jansi-native-1.5进行编译,并打入maven本地仓库。wget https://github.com/fusesource/jansi-native/archive/jansi-native-1.5.tar.gztar –xvf  jansi-native-1.5.tar.gzcd jansi-native-1.5mvn -Dplatform=linux64  install编译过程中如果出现如下问题     在编译的库目录下,找到'configure.ac',用文本编辑器打开,找到类似以下的文本,在最后一行添加AM_PROG_AR即可。              进入 ./target/native-build,执行以下两步后重新编译。aclocalautomake --add-missing编译好的jar包在target目录下  安装jansi-1.11下载源码wget https://github.com/fusesource/jansi/archive/jansi-1.11.tar.gz解压tar –xzvf jansi-1.11.tar.gz进入jansi目录cd jansi-jansi-project-1.11vim pom.xml 修改pom.xml,注释掉下边内容         mvn install -Dmaven.javadoc.skip=true编译完成后生成的jar包在target目录下,若编译是未加install参数,则可以手动将jansi-1.5.jar放至maven本地仓库,以保证编译jline时调取我们已编译好的jar包。编译jline-2.12.1编译jline-2.12.1的依赖关系为jansi-1.11,此时在本地maven库已经安装了包含aarch64的so文件的jansi-1.11.jar包,故可以直接开始编译。下载源码wget https://github.com/jline/jline2/archive/jline-2.12.1.tar.gz解压tar -xzvf jline-2.12.1.tar.gzcd jline-2.12.1mvn install package编译完成后生成的jar包已经放至target目录下和本地仓库内4、组件编译cd /optgit clone https://github.com/scala/scala.gitcd scalagit checkout v2.11.8执行命令进行编译ant5、系统配置  无6、测试验证编译好的Scala-compiler.jar中.so库的架构。mkdir  tmpcd  tmp/cp    /opt/scala/build/pack/lib/scala-compiler  ./jar xf   Scala-compiler.jarfind ./ -name  *.sofile ./META-INF/native/linux64/libjansi.so 如下图所示     7、参考信息   无8、FAQ   无
  • KUNPENG平台Scala2.13.0移植自动安装脚本
    1 Scala简介Scala一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言 、并集成面向对象编程和函数式编程的各种特性。Scala是一种纯面向对象的语言,每一个值都是对象。对象的数据类型以及行为由类和特征(Trait)描述。类抽象机制的扩展有两种途径。一种途径是子类继承,另一种途径是灵活的混入(Mixin)机制。这两种途径能避免多重继承的种种问题。  2 环境信息2.1 环境信息类别子项版本获取地址OSCentOS7.5 Aarch64href="https://www.centos.org/download/" https://www.centos.org/download/服务器配置16U16GB40GB软件Scala2.13.0https://downloads.lightbend.com/scala/2.13.0/scala-2.13.0.zip3 软件移植3.1 环境准备:OS安装类型:CentOS-7.5-aarch64-1804。 注:操作系统安装使用最小简化版安装(如上图),其余步骤安装一般安装操作系统步骤即可。 3.1.1 相关软件下载上传:1、 上传CentOS 7.5系统ISO镜像文件至服务器2、 上传scala-2.13.0.zip源码包至服务器目录下,如/opt, 下载地址如下:https://downloads.lightbend.com/scala/2.13.0/scala-2.13.0.zip 3.2 安装Scala1、 安装Scala上传附件脚本至要安装Scala的服务器上的任意目录,如/opt。添加执行权限:chmod +x /opt/ scala _install.sh执行脚本sh /opt/scala _install.sh2、 提示scala install success表示安装成功。3.3 验证执行  4 参考信息https://www.huaweicloud.com/kunpeng/software.html
  • [其他语言] 【华为云鲲鹏云服务最佳实践】【语言篇】第009期 Scala 2.11.8 安装配置指南
    1、简介      Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言、并集成面向对象编程和函数式编程的各种特性。      类别:编程语言2、基础环境类别子项版本获取地址(方法)华为云虚拟机RC3(916)--OSCentOS7.5 Kernel4.14 软件包Scala2.11.8https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz3、依赖安装无4、组件编译安装无5、系统配置    下载scala2.11.8,下载之前进入当前用户路径wget https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz解压scala-2.11.8.tgztar -xzvf scala-2.11.8.tgz把scala-2.11.8文件夹拷贝到/usr/local/scala文件夹下cp -r scala-2.11.8 /usr/local/scala当/usr/local中没有scala文件夹时,需要创建一个scala包,执行上一步进入根目录,配置环境vim .bash_profile末尾添加如下配置:export SCALA_HOME=/usr/local/scala/scala-2.11.8export PATH=$PATH:$SCALA_HOME/bin输入以下命令使环境变量快速生效source .bash_profile6、测试Test1:查看scala版本scala -version测试结果:Test2:进入scala编译器scala 测试结果:Test3:退出scala编译器,ctrl+d7、参考信息 无8、FAQ无