• [教程指导] 论 《基于Spark实现车主驾驶行为分析》 实验避坑,100%完成
                                                              已完成1. 实验链接:沙箱实验室_在线实验_上云实践_云计算实验_AI实验_华为云官方实验平台-华为云 (huaweicloud.com)1. 问题处理1实验要求关闭高可用,且节点为1个,实际购买为高可用,加最低2个,MRS创建部署成功后不会自动删除,不影响实验2.问题处理2注意OBS的压缩包上传,批量文件是上传到input文件中,而压缩包是直接上传到桶的目录下,否则作业运行的时候会失败3.问题处理2实验界面是S3的抬头路径,实际上选择OBS即可,并且不要忽略了AK SK后面的这个  1输出路径请手动输入一个不存在的目录,例如obs://obs-demo-analysis-hwt4/output/最佳实践链接:  使用Spark2x实现车联网车主驾驶行为分析_MapReduce服务 MRS_最佳实践_数据分析_华为云 (huaweicloud.com)
  • [其他问题] FI5.6.1 提交spark任务,任务中连接HDFS,Authentication failure.Check your
    【功能模块】提交spark任务,任务中连接HDFS【操作步骤&问题现象】1、python3 提交spark任务(已完成kerberos认证),任务中通过hdfs.client 建立hdfs连接2、提交任务时已完成kerberos认证,任务中连接hdfs报错信息Authentication failure.Check your credentials.3、spark任务中连接其它组件是不是就不需要做kerberos认证?那认证失败输入哪种认证?4、实际hdfs操作通过hdfs web api方式提交请求,将文件上传到hdfs的hive目录中user/hive/warehouse【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [二次开发] 【Spark】【提交任务】提交Spark任务时,报错找不到主类,日志详情如下
    【功能模块】【操作步骤&问题现象】1、打成jar包后,上传至/opt/sparktest/路径下2、执行source /opt/Bigdata/spark/bigdata_env和kinit developuser ,认证通过3、执行命令:/spark-submit --master yarn --deploy-mode cluster \--keytab /opt/sparktest/user.keytab \--principal medical_user05  \--conf spark.yarn.security.credentials.hbase.enabled=true \--jars $(files=($SPARK_HOME/jars/streamingClient010/*.jar); IFS=,; echo "${files<li>}") \--class com.huawei.bigdata.spark.examples.streaming.SparkOnStreamingToIotDB \/opt/sparktest/DirectStreamToIotDB-1.0.jar nocp myTest001 192.168.4.223:21007,192.168.4.173:21007,192.168.4.134:21007 hbasetable 4、提交任务时报错,报错信息如下图【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] spark 读hive 写gaussdb 问题求助
    【功能模块】用spark 读hive 写gaussdb代码如下:取hive一条数据测试【操作步骤&问题现象】提交到yarn上 client模式  但是出现如下问题:、请问如何解决?是配置问题 ,还是其它问题?【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] spark 读hive 数据处理写入gaussdb 出现问题
    【功能模块】【操作步骤&问题现象】我用spark读Hive数据 然后写入gaussdb时  出现下述问题为了方便测试,取了hive的一条数据,然后写gaussdb  ;submit 提交到yarn集群跑的,client模式。请问是写错了,还是哪里配置的不对?谢谢【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [其他] GaussDB(DWS) 使用Apache Spark访问DWS数据库
    1. 使用Spark Jdbc访问数据库官方文档链接:https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html2. 使用Spark Jdbc访问DWS进入spark-shell前传入JDBC驱动包:spark-shell --driver-class-path gsjdbc200.jar --jars gsjdbc200.jar访问一张表的数据:scala> val jdbcDF = spark.read.format("jdbc").option("url", "jdbc:gaussdb://x.x.x.x:8000/test").option("dbtable", "tester.t1").option("user", "tester").option("password", "passwordxxx").load(); jdbcDF: org.apache.spark.sql.DataFrame = [a: int, b: int ... 1 more field]显示表的数据:scala> jdbcDF.show() +---+---+ | id| c1| +---+---+ | 1| 1| | 3| 3| | 5| 5| | 7| 7| | 9| 9| | 11| 11| | 13| 13| | 15| 15| | 17| 17| | 19| 19| | 21| 21| | 23| 23| | 25| 25| | 27| 27| | 29| 29| | 31| 31| | 33| 33| | 35| 35| | 37| 37| | 39| 39| +---+---+ only showing top 20 rows更多的操作请查看Spark的官方文档
  • [问题求助] FI产品 使用idea本地调式spark sql 如何配置
    【功能模块】【操作步骤&问题现象】1、我在本机idea上 执行sparksql 查询hive库的数据 报错2、已经hive的相关配置文件放在resources下、 jar包也是从集群上的spark下的lib下导出来的,请问还需要配置说明东西  谢谢【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] Spark &amp; Hive 云原生改造在智领云的应用
    引 言随着 Kubernetes 越来越成熟,使用者越来越多,大数据应用上云的需求也越来越迫切。原有的大数据资源管理器 Yarn 很难做到所有应用资源统一控制,完全隔离,带来的主机应用和大数据计算应用互相抢占资源,由此导致的计算任务时间可能经常性抖动,多租户应用互相影响。而在 Kubernetes 上,此类问题天然解决。所有的应用都以 Pod 形式在 Kubernetes 平台上统一管理,在规范的 namespace 管理下,不存在不受控的应用来进行资源抢占。同时,我们可以轻松地实现多租户,资源配额,运行审计计费等功能。在此背景下,客户原有的大数据计算任务如何无缝迁移到 Kubernetes 上,大数据应用如何进行云原生改造,都成了我们最迫切要解决的问题。本篇文章主要针对这两类问题来进行探讨。Spark 和 Hive 在智领云业务场景中的使用Spark 和 Hive 是大数据平台中很常用的两个计算引擎。Hive 本身是一个基于 HDFS 的类 SQL 数据库,其 HQL 语句的底层执行引擎可以使用基于 Yarn 的 MapReduce,也可以使用 Spark。Spark 在 2021 年 3 月推出的 3.1 版本中实现了对 Kubernetes 支持的 GA(general availability,意味着生产级的支持)。在这个版本中,Spark 允许用户从命令行(spark-submit)上提交 Spark 任务到 Kubernetes 集群中。但是目前的 Hive 版本中,如果底层使用 Spark,还只能提交任务到 Yarn,而不能支持将 Hive 查询提交到 Kubernetes。除了从命令行提交 Spark 任务,智领云使用 Hive 和 Spark 相关的业务还有三个场景:第一个、用户创建 Hive 作业进行数据 ETL 任务开发或数仓分层计算工作流创建。第二个、用户应用程序(例如,批处理调度系统)提交 pySpark 文件或者 Spark jar 包到平台,进行数据计算。第三个、用户使用 Jupyterlab Spark kernel 来访问 Hive/Mysql/Hdfs/Glusterfs 等数据源文件进行数据探索、机器学习及人工智能算法开发。这三种场景下的共同点都是需要将计算任务转换成 Spark job 在集群中调度运行(Hive 的缺省引擎已经从 MR 变成了 Spark)。在每个场景下,我们都在 Spark on Kubernetes 的基础上提供了相应的解决方案:在 Kubernetes 平台上使用 Hive,我们使用了 Hive on Spark on Kubernetes。对于 Spark 作业,我们集成了 Spark On Kubernetes Operator。JupyterLab 中使用 Spark, 我们集成了SparkMagicKernel 和 Livy。每种集成方式,都有其独有的优势和缺陷及其适用场景,下面我们来一一讲解。Hive On Spark On Kubernetes在类 SQL 数据库中,Hive 是很多 Hadoop 生态系统缺省的选择。虽然 Spark 也提供了 SparkSQL 来支持 SQL 查询,但是 Hive 使用的 HQL 和 SparkSQL 在语法支持上还是存在比较大的差异,对于大型的数据仓库项目,用户可能积累了几千个 Hive 任务,如果此时想要快速地迁移到 Kubernetes 上,那么使用 SparkSQL 存在很大的迁移成本和风险。但是如果我们只更改 Hive 的底层执行引擎,改成 Spark on Kubernetes,那么,我们就能让客户的 Hive HQL 应用,无需修改地快速迁移到 Kubernetes 上。但是由于 Spark on Kubernetes 是最近才达到 GA 状态,和不同的 Hive 版本,Kubernetes 版本,以及很多相关大数据组件之间的适配还没有成熟,我们需要对现有的版本之间进行一些适配才能平滑运行 Hive On Spark On Kubernetes。首先,我们必须要确定 Hive、Spark、Hadoop(HDFS)以及相关的 Kerberos、Ranger 的版本。对于 Spark 版本的选择,我们开发选型的时候最新版为 3.1.1,目前 Spark 最新版已经到了 3.2.1,Spark 选取最新版本即可,最新版本能够增强对 Kubernetes 的支持。而 Hive 版本选取的主要原则,即查看 Spark-client 模块的代码是否支持 Kubernetes,如果不支持是否容易改造以便支持。而 4.0.0 版本开始,spark-client 模块重构了代码结构,增加了 SparkClient 的抽象类,有该结构支持,增加对 Kubernetes 的支持就容易了很多。这里还有一种选择,就是 Hive 选用 3.1.2 的稳定版本,然后把最新的 master 分支的 spark-client 模块代码 cherry pick 到 3.1.2 版本即可。在 Hive 代码中主要改造内容是增加 KubernetesSubmitSparkClient,主要内容是构造 SparkSubmit 向 Kubernetes 提交 Spark 任务的各种参数,包括和 Hive 中 RPC server 通信的配置,提交 Spark 作业后,Spark driver pod 启动后会连接 HiveServer2 中的 RPC server,连接成功后,HiveServer2 会发送相应的 Spark job 到 Spark driver 来进行计算。而 Spark 代码的改动,主要是修改 Spark 中的 hiveShim 模块,增加对 Hive 4.0.0 的支持。Hive On Spark 在智领云的数据平台,主要作为 Hive 作业/工作流以及 Hue 查询工具的底层执行引擎:调度系统通过 Beeline 来连接 HiveServer2,Hue 通过 JDBC 连接 HiveServer2,客户端发送用户的 SQL 语句到 HiveServer2。HiveServer2 解析完成 SQL 后,会生成一系列的 HQL taskplan,对于这些 HQL 的执行,HiveServer2 会启动一个 RPC server,SparkSubmit 会带上 RPC server 参数,启动一个 Spark Driver Pod 来和 HiveServer2 进行 RPC 通信,这个 Spark Driver Pod 的主要功能就是接收 HiveServer2 发送过来的 SQL Job 进行计算,计算完成后,将结果返回给 HiveServer2 中运行的 RPC server。在 Kubernetes 平台,SparkSubmit 客户端和 Kubernetes APIServer 通信,Kubernetes 在接收到 Spark 任务请求后,会调用 Scheduler 组件启动 Spark Driver Pod, Spark Driver 在启动完成后,会发送启动 Executor 请求给 Kubernetes APIServer, Kubernetes 再启动 Spark Executor Pod, Spark Driver 和 Executor 建立连接,完成整个 Spark 集群的创建。整体架构如下图所示:权限控制方面,我们使用 Ranger 来完成授权和鉴权操作,使用 Kerberos 来完成认证操作。对于 Ranger 鉴权插件, Hive 和 Spark 都有相应的解决方案。Hive 直接通过 Hive Ranger 插件和 Ranger 服务来通信,完成鉴权操作,Spark 则通过 Spark Authorizer 插件再调用 Hive Ranger 插件来完成鉴权。在 Hive On Spark 模式下,我们使用 Spark 对 Kerberos 的支持来完成用户身份认证操作,通过 Hive Ranger 插件来完成鉴权操作。Spark on Kubernetes OperatorSpark on Kubernetes Operator 项目是 Google 非官方推出的 Spark On Kubernetes 解决方案。它的内部实现是基于 Spark 官方的 Spark On Kubernetes 解决方案之上,更多的利用了 Kubernetes 特性,来增强在 Kubernetes 上使用 Spark 计算引擎的易用性和灵活性以及性能的提升。它本质上是一个 Kubernetes Operator,所以在该解决方案下,用户提交 Spark 作业只需要通过 Yaml 文件即可,并且可以定制 Kubernetes Schedule。比如,可以配置使用华为提供的针对大数据领域优化过的 Volcano 调度引擎。在智领云平台上,Spark on Kubernetes Operator 承载了用户提交 Jar 包或者 pySpark 文件类型的所有 Spark/Spark-streaming 作业的底层调度引擎。在 Spark OnKubernetes Operator 成熟之后,Hive on Spark 底层未来也可以增加 Spark On Kubernetes Operator 运行模式的支持,仅仅只需要在 spark-client 模块中增加KubernetesOperatorSparkClient 抽象类的支持即可。Spark Operator 方案也存在一个弊端,就是 Spark 作业配置 Yaml 的高度复杂化,该 Yaml 需要配置 Spark 作业的所有信息,包括Driver/Executor 的资源控制,包括 Spark 的镜像版本和调度算法。普通用户不需要关注这些配置。在此问题下,我们模仿 Apache Livy 的 API 增加了一个 Spark On Kubernetes Operator Server。该服务负责管理 Spark On Kubernetes Operator Job,提供创建/更新/删除 Job 接口,提供查询 Job 状态及日志请求。用户只需要配置少量Spark Job 参数,后台服务会根据参数完成 Spark Job Yaml 文件渲染,提交到 Kubernetes 集群。在权限控制这一块,我们可以使用 Spark 相关配置结合 Spark Operator 对 Kerberos 的支持来实现。对 Ranger Hive 插件的支持,我们可以使用 Spark Authorizer 插件来转接适配,不过该插件版本较老,我们需要修改其 POM 文件和相关代码来使其可以支持 Spark 3.1.1 版本。在 Spark Operator 模式下, Spark 作业的相关配置都在 Yaml 中配置,我们可以利用 Spark Operator 对 Sidecar 的支持来完成 Spark Operator 对 Ranger Hive 插件的支持。主要方法就是 Spark 3.1.1 版本的原生镜像不变,将 Ranger 相关的 Jars 通过 Sidecar 共享目录共享给 Spark 主 Container,并配置相关 ClassPath 参数,使 Spark 能够找到 Ranger 和 Spark Authorizer 相关 Jar 包。JupyterLab On KubernetesJupyterLab 作为数据科学家首选的 IDE,在数据及人工智能领域应用非常广泛。在智领云平台,我们的主要改造是打通JupyterLab 和我们的调度平台的互相访问,增加 Spark 读写 Hive / HDFS 的支持。这个场景和前两个场景的主要区别在于 JupyterLab Kernel 和 Spark Driver Pod 之间可能有持续的交互,而不是 run to finish。其次,在 UI 界面下的任务需要无需修改的在后台(测试或生产环境下)运行。在此需求之下,我们主要做了几点改动:选取了 SparkMagic Kernel 支持了用户编写测试 Spark 代码。改造 JupyterLab Server 代码,允许用户直接点击开启当前 Spark 任务的 4040 调试页面 UI。改造 JupyterLab Client 代码,允许用户可以直接在 JupyterLab Notebook 内直接引用系统或者用户自定义变量,并能够在调度和调试时生效。增加了 JupyterLab 调度 Worker,使调度平台可以直接调度运行用户的 ipynb 类型的 Notebook 文件。增加 JupyterLab Python 环境管理,允许 JupyterLab 在重启后保持其之前设置的 Python 环境。SparkMagic Kernel 执行 Spark 任务是利用 Apache Livy 服务来实现任务的提交以及交互Session 的维护。Apache Livy 目前版本对 Kubernetes 并不支持,我们需要添加 Kubernetes client 和状态查询的支持。Apache Livy 实现的对 Kubernetes 的支持实际上是和 Hive on Spark 模式类似,都是创建 RPC Server,然后调用 SparkSubmit 提交 Spark 任务和 RPC Server 通信,来完成 SQL 任务的交互。下图展示了整个流程的架构。在此种模式下,Hive 的权限控制配置和 Spark Operator 类似,都是使用 Spark Authorizer 和 Hive Ranger 插件来实现。未来在智领云平台,我们使用了存储和计算分离的方案,在计算层使用 Spark on Kubernetes 作为主要的计算引擎,底层可以采用 HDFS 兼容现有系统,也可以采用其它支持 HDFS 接口的云原生存储。这样的架构,加上对 Hive 等传统 Hadoop 生态的云原生改造,可以在最大程度的支持现有系统的同时逐步迁移到纯云原生的体系架构下,无缝集成新的大数据和人工智能系统。而基础架构即代码(Infra as Code)方式的使用, CI / CD 全链路的支持,为类似 DataOps,DataMesh 的新型数据应用开发运维范式提供了清晰可行的技术架构支持。而由此带来的业务开发效率的提升,业务管理运维效能的提升,都是质的变化。未来可期。转载于CSDN微信公众号
  • [知识分享] 手绘流程图讲解spark是如何实现集群的高可用
    本文分享自华为云社区《[图解spark是如何实现集群的高可用](https://bbs.huaweicloud.com/blogs/338879?utm_source=csdn&utm_medium=bbs-ex&utm_campaign=ei&utm_content=content)》,作者:breakDawn。 我们看下spark是怎么针对master、worker、executor的异常情况做处理的。 # 容错机制-exeuctor退出 首先可以假设worker中的executor执行任务时,发送了莫名其妙的异常或者错误,然后对应线程消失了。 我们看这个时候会做什么事情 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/1/1648780842412687965.png) 上图总结下来就是: executor由backend进程包着,如果抛异常,他会感知到,并调用executorRunner.exitStatus(), 通知worker 看下通知worker之后发生了什么: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/1/1648780853927600303.png) - worker会通知master,master会将exectorInfo清除,然后调度worker让他重新创建 - 这里可以看到worker创建executor的指令仍然是让master来调度和管理的,不是自己想创建就创建。 接下来就是重建executor,然后重新开始执行这个地方的任务了(因此数据也会重新拉,之前发送端缓存的数据就能够派上用场了) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/1/1648780893463368264.png) 完整流程图如下: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/1/1648780901851171469.png) # worker异常退出 假设此时是worker挂掉了, 那么正在执行任务的exeuctor和master会怎么做呢?如下: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/1/1648780915150236853.png) 可以看到worker有一个shutdownHook,会帮忙关闭正在执行的executor。 但是此时worker挂了,因此没法往master发送消息了,怎么办? 上一节有讲到master和worker之间存在心跳,因此就会有如下处理: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/1/1648780929039945568.png) 可以看到当master发现worker的心跳丢失时,会进行: - 删除执行列表里的worker信息 - 重新下发创建worker的操作给对应spark节点 - 通知driver这个worker里面的exector都已经lost了 看下此时worker重建和driver分别做了什么: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/1/1648780946521600230.png) 这里还可以看到1个很重要的概念: - master关心worker状态 - driver会关心executor进展 - exeuctor重建后需要注册到driver上 完整流程图如下: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/1/1648780960518823261.png) # master异常 由于master不参与任务的计算,只是对worker做管理,因此对于master的异常,分两种情况: 1:任务正常运行时master异常退出 则流程如下: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/1/1648780975453723575.png) 从这里可以看到当任务正常运行时,只会在结束时,由driver去触发master的清理资源操作,但是master进程已经挂掉了,所以也没关系。 2:当任务执行过程中,master挂掉后,worker和executor也异常了 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/1/1648780983804904927.png) 可以看到这时候时没办法重启exeuctor的。此时driver那边就会看起来任务一直没进展了。 为了避免这种情况,master可以做成无状态化,然后做主备容灾。当然master节点做的时候比较少,一般不容易崩溃,除非认为kill或者部署节点故障。
  • [技术干货] 华为云鲲鹏论坛3月热门问题汇总
    华为云鲲鹏论坛3月热门问题汇总 1. 【云市场】【东方通中间件】完成了华为鲲鹏云适配完成并有相应测试报告,请问测试报告可以从哪里看问题链接 问题链接:https://bbs.huaweicloud.com/forum/thread-183750-1-1.html 2. 基于鲲鹏应用使能套件进行NUMA亲和性实践 问题链接:https://bbs.huaweicloud.com/forum/thread-183614-1-1.html 3. 如何实现华为弹性云定时开关机 问题链接:https://bbs.huaweicloud.com/forum/thread-183072-1-1.html 4. 在ECS上安装部署openGauss数据库时,创建openGauss omm用户互信出错 问题链接:https://bbs.huaweicloud.com/forum/thread-182919-1-1.html 5. ECS安装Gauss数据库,无法创建操作系统omm用户 问题链接:https://bbs.huaweicloud.com/forum/thread-182837-1-1.html 6. 如何CentOS 8.0 64bit with ARM服务器上搭建指定版本的mysql数据库 问题链接:https://bbs.huaweicloud.com/forum/thread-182558-1-1.html 7. 【鲲鹏ecs产品】【spark编译】编译集成hadoop3.2.2,hive3.1.2的spark3.0.3的时候 执行报错 问题链接:https://bbs.huaweicloud.com/forum/thread-182384-1-1.html 8. 华为鲲鹏服务器(ARM架构) CentOS8.0 安装Docker失败 问题链接:https://www.google.com.hk/webhp?hl=zh-CN&sourceid=cnhp&gws_rd=ssl 9. openEuler21.03部署ceph14.2.10失败 问题链接:https://bbs.huaweicloud.com/forum/thread-181572-1-1.html 10. RSA-demo源码获取 问题链接:https://bbs.huaweicloud.com/forum/thread-181064-1-1.html 11. 【鲲鹏ECS】【编译适配hudi-0.10.0】编译打包报错问题 问题链接:https://bbs.huaweicloud.com/forum/thread-180933-1-1.html 12. 【PostgreSQL】【绑核功能】PostgreSQL 13.3如何绑核 问题链接:https://bbs.huaweicloud.com/forum/thread-180806-1-1.html 13. speccpu2006的speed模式怎样运行的? 问题链接:https://bbs.huaweicloud.com/forum/thread-180824-1-1.html 14. openEuler的软件所仓库oepkg里面的目录层级是什么样的,最近想用,完全不知道该如何配置,感觉是个大杂烩? 问题链接:https://bbs.huaweicloud.com/forum/thread-182753-1-1.html 15. 【鲲鹏ecs产品】【spark编译】编译集成hadoop3.2.2,hive3.1.2的spark3.0.3的时候 执行报错 问题链接:https://bbs.huaweicloud.com/forum/thread-182384-1-1.html 16. 基于鲲鹏应用使能套件实现Spark算法优化 实验执行报错 问题链接:https://bbs.huaweicloud.com/forum/thread-183625-1-1.html 17. 鲲鹏 银河麒麟系统安装docker 问题链接:https://bbs.huaweicloud.com/forum/thread-183240-1-1.html 18. 【云服务器产品】arm64查看不了具体cpu型号 问题链接:https://bbs.huaweicloud.com/forum/thread-182672-1-1.html 19. 【鲲鹏920麒麟linux】【valgrind】使用不了,有glibc-debuginfo可以安装吗? 问题链接:https://bbs.huaweicloud.com/forum/thread-181503-1-1.html 20. openEuler21.03部署ceph14.2.10失败 问题链接:https://bbs.huaweicloud.com/forum/thread-181572-1-1.html
  • [问题求助] 基于鲲鹏应用使能套件实现Spark算法优化 实验执行报错
    基于鲲鹏应用使能套件实现Spark算法优化实验-华为云 (huaweicloud.com)   该实验到这一步时提示错误,请问是怎么回事,是按照文档一步一步执行的
  • [问题求助] 【鲲鹏ecs产品】【spark编译】编译集成hadoop3.2.2,hive3.1.2的spark3.0.3的时候 执行报错
    【功能模块】spark编译报错环境centos7.6spark编译:在编译集成hadoop3.2.2,hive3.1.2的spark3.0.3的时候 执行报错,是改了spark pom文件中hive版本,之前是hive2.3.X的版本的【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [大数据] spark ml 随机森林解析
    一、背景使用 Spark 机器学习库来做机器学习工作,可以说是非常的简单,通常只需要在对原始数据进行处理后,然后直接调用相应的 API 就可以实现。但是要想选择合适的算法,高效准确地对数据进行分析,可能还需要深入了解下算法原理,以及相应 Spark MLlib API 实现的参数的意义。目前,Spark MLlib 中实现了 tree 相关的算法,决策树 DT(DecisionTree),随机森林 RF(Random Forest),GBDT(Gradient Boosting Decision Tree),其基础都是RF,DT 是 RF 一棵树时的情况,而 GBDT 则是循环构建DT,GBDT与DT的代码是非常简单明了的,本文会对 Random Forest 的原理和源码进行分析。二、决策树与随机森林首先我们来对决策树和随机森林进行简单的了解:决策树 GBDT-Decision Tree(DT)关键问题节点分裂:使用的特征及阈值特征选取:最小均方差、信息增益(ID3)、信息增益率(C4.5)阈值:从特征值中选取、等步长选取最大最小值之间的值叶子节点的值:叶子所属数据的均值(回归)、对应类别(分类)截止条件:达到叶子节点数上限、继续划分无法使误差减小          在决策树的训练中,如上图所示,就是从根节点开始,不断的分裂,直到触发截止条件,在节点的分裂过程中要解决的问题其实就两个:分裂点:一般就是遍历所有特征的所有特征值,选取impurity最大的分成左右孩子节点,impurity的选取有信息熵(分类),最小均方差(回归)等方法预测值:一般取当前最多的class(分类)或者取均值(回归)随机森林随机森林就是构建多棵决策树投票,在构建多棵树过程中,引入随机性,一般体现在两个方面,一是每棵树使用的样本进行随机抽样,分为有放回和无放回抽样。二是对每棵树使用的特征集进行抽样,使用部分特征训练。在训练过程中,如果单机内存能放下所有样本,可以用多线程同时训练多棵树,树之间的训练互不影响。三、Spark随机森林概要(训练步骤)随机森林中的每个树模型之间没有关联,可以独立训练,这为随机森林的分布式训练提供可能。具体的训练步骤如下:1.将每个树模型的根节点取出,加入栈中2.将k个节点从栈中取出,组成一个训练集合group,k值由内存限制决定,确定特征采样3.从各分区上计算并汇合分布信息,并计算待切分节点的最优切分点4.根据切分点生成新的叶子节点,并更新nodeIdCache5.若新生成的叶子节点没有达到最小不纯度限制和最小样本数量的限制,则入栈6.若栈非空 goto 2.7.剪枝合并多余节点,结束spark实现分布式随机森林优化点Spark 平台上,传统单机形式的迭代方式必须要进行相应改进才能适用于分布式环境,这是因为在分布式环境下,数据也是分布式的,算法设计不得当会生成大量的 IO 操作,影响算法效率三个优化策略。1.切分点抽样统计在单机环境下的决策树对连续变量进行切分点选择时,一般是通过对特征点进行排序,然后取相邻两个数之间的点作为切分点,如果在分布式环境下如此操作的话,会带来大量的网络传输操作,特别是当数据量达到 PB 级时,算法效率将极为低下 Spark 中的随机森林在构建决策树时,会对各分区采用一定的子特征策略进行抽样, 然后生成各个分区的统计数据,并最终得到切分点。2.切分特征装箱(Binning)决策树的构建过程就是对特征的取值不断进行划分的过程对于离散的特征,如果有M个值,最多个划分如果值是有序的,那么就最多 M-1个划分(按老,中,少的序,那么只有 m-1 个,即 2 种划分,老|中,少;老,中|少)划分的点就是 split(切分点),划分出的区间就是 bin。对于连续特征 ,理论上 split 是无数的,在分布环境下不可能取出所有的值,因此它采用的是1中的切点抽样统计方法。3.逐层训练(level-wise training)单机版本的决策数生成过程是通过递归调用(本质上是深度优先)的方式构造树,在构造树的同时,需要移动数据,将同一个子节点的数据移动到一起分布式环境下采用的策略是逐层构建树节点(本质上是广度优先),这样遍历所有数据的次数 等于所有树中的最大层数。每次遍历时,只需要计算每个节点所有切分点统计参数,遍历完后,根据节点的特征划分,决定是否切分,以及如何切分。总体时序图具体分析代码,可以得出以下时序图具体流程详解随机森林最重要的就是寻找最佳split的过程,首先要计算所有可能的split,流程图如下:找到所有可能的split了,就需要再其中挑选出最佳split,流程图如下:在分割结束后,最后一步需要在driver端建树,流程图如下:
  • [大数据] Spark Shuffle简介
  • [问题求助] 【鲲鹏服务器产品】【编译Apache大数据组件】hive、spark组件编译
    【功能模块】希望能在鲲鹏云上搭建一套  自建的Hadoop 大数据集群【操作步骤&问题现象】spark编译指南【截图信息】【日志信息】(可选,上传日志内容或者附件)