华为云用户手册

  • 问题 Structured Streaming的cluster模式,在数据处理过程中终止ApplicationManager,执行应用时显示如下异常。 2017-05-09 20:46:02,393 | INFO | main | client token: Token { kind: YARN_CLIENT_TOKEN, service: } diagnostics: User class threw exception: org.apache.spark.sql.AnalysisException: This query does not support recovering from checkpoint location. Delete hdfs://hacluster/structuredtest/checkpoint/offsets to start over.; ApplicationMaster host: 10.96.101.170 ApplicationMaster RPC port: 0 queue: default start time: 1494333891969 final status: FAILED tracking URL: https://9-96-101-191:8090/proxy/application_1493689105146_0052/ user: spark2x | org.apache.spark.internal.Logging$class.logInfo(Logging.scala:54)Exception in thread "main" org.apache.spark.SparkException: Application application_1493689105146_0052 finished with failed status
  • 回答 第三方jar包(例如自定义udf)区分x86和TaiShan版本时,混合使用方案: 进入到服务端Spark2x SparkResource的安装目录(集群安装时,SparkResource可能会安装在多个节点上,登录任意一个SparkResource节点,进入到SparkResource的安装目录)。 准备好自己的jar包,例如xx.jar的x86版本和TaiShan版本。将x86版本和TaiShan版本的xx.jar分别复制到当前目录的x86文件夹和TaiShan文件夹里面。 在当前目录下执行以下命令将jar包打包: zip -qDj spark-archive-2x-x86.zip x86/* zip -qDj spark-archive-2x-arm.zip arm/* 执行以下命令查看hdfs上的spark2x依赖的jar包: hdfs dfs -ls /user/spark2x/jars/8.1.0.1 8.1.0.1是版本号,不同版本不同。 执行以下命令移动hdfs上旧的jar包文件到其他目录,例如移动到“tmp”目录。 hdfs dfs -mv /user/spark2x/jars/8.1.0.1/spark-archive-2x-arm.zip /tmp hdfs dfs -mv /user/spark2x/jars/8.1.0.1/spark-archive-2x-x86.zip /tmp 上传3中打包的spark-archive-2x-arm.zip和spark-archive-2x-x86.zip到hdfs的/user/spark2x/jars/8.1.0.1目录下,上传命令如下: hdfs dfs -put spark-archive-2x-arm.zip /user/spark2x/jars/8.1.0.1/ hdfs dfs -put spark-archive-2x-x86.zip /user/spark2x/jars/8.1.0.1/ 上传完毕后删除本地的spark-archive-2x-arm.zip,spark-archive-2x-x86.zip文件。 对其他的sparkResource安装节点执行1~2。 进入webUI重启spark2x的jdbcServer实例。 重启后,需要更新客户端配置。按照客户端所在的机器类型(x86、TaiShan)复制xx.jar的相应版本到客户端的Spark2x安装目录“${install_home}/Spark2x/spark/jars”文件夹中。${install_home}是用户的客户端安装路径,用户需要填写实际的安装目录;若本地的安装目录为“/opt/hadoopclient”,那么就复制相应版本xx.jar到“/opt/hadoopclient/Spark2x/spark/jars”文件夹里。
  • 回答 原因分析:显示该异常是因为“recoverFromCheckpointLocation”的值判定为false,但却配置了checkpoint目录。 参数“recoverFromCheckpointLocation”的值为代码中“outputMode == OutputMode.Complete()”语句的判断结果(outputMode的默认输出方式为“append”)。 处理方法:编写应用时,用户可以根据具体情况修改数据的输出方式。 将输出方式修改为“complete”,“recoverFromCheckpointLocation”的值会判定为true。此时配置了checkpoint目录时就不会显示异常。
  • 代码样例 由于pyspark不提供Hbase相关api,本样例使用Python调用Java的方式实现。 下面代码片段仅为演示,具体代码参见SparkHivetoHbasePythonExample: # -*- coding:utf-8 -*-from py4j.java_gateway import java_importfrom pyspark.sql import SparkSession# 创建SparkSessionspark = SparkSession\ .builder\ .appName("SparkHivetoHbase") \ .getOrCreate()# 向sc._jvm中导入要运行的类java_import(spark._jvm, 'com.huawei.bigdata.spark.examples.SparkHivetoHbase')# 创建类实例并调用方法spark._jvm.SparkHivetoHbase().hivetohbase(spark._jsc)# 停止SparkSessionspark.stop()
  • 问题现象 Spark能对接很多的第三方工具,因此在使用过程中经常会依赖一堆的三方包。而有一些包 MRS 已经自带,这样就有可能造成代码使用的jar包版本和集群自带的jar包版本不一致,在使用过程中就有可能出现jar包冲突的情况。 常见的jar包冲突报错有: 1、报错类找不到:java.lang.NoClassDefFoundError 2、报错方法找不到:java.lang.NoSuchMethodError
  • 原因分析 以自定义UDF为例: 报错信息显示是找不到类。 首先需要确认的是这个类属于的jar包是否在jvm的classpath里面, spark自带的jar都在“spark客户端目录/jars/”。 确认是否存在多个jar包拥有这个类。 如果是其他依赖包,可能是没有使用--jars添加到任务里面。 如果是已经添加到任务里面,但是依旧没有取到,可能是因为配置文件的driver或者executor的classpath配置不正确,可以查看日志确认是否加载到环境。 另外可能报错是类初始化失败导致后面使用这个类的时候出现上述报错,需要确认是否在之前就有初始化失败或者其他报错的情况发生。 报错信息显示找不到方法。 确认这个方法对应的类所在的jar包是否加载到jvm的classpath里面,spark自带的类都在“spark客户端目录/jars/”。 确认是否有多个jar包包含这个类(尤其注意相同工具的不同版本)。 如果报错是Hadoop相关的包,有可能是因为使用的Hadoop版本不一致导致部分方法已经更改。 如果报错的是三方包里面的类,可能是因为Spark已经自带了相关的jar包,但是和代码中使用的版本不一致。
  • 运行任务 登录Spark客户端节点,执行如下命令: source 客户端安装目录/bigdata_env source 客户端安装目录/Hudi/component_env 编译构建样例代码后可以使用spark-submit提交命令,执行命令后会依次执行写入、更新、查询、删除等操作: 运行Java样例程序: spark-submit --class com.huawei.bigdata.hudi.examples.HoodieWriteClientExample /opt/example/hudi-java-examples-1.0.jar hdfs://hacluster/tmp/example/hoodie_java hoodie_java 其中:“/opt/example/hudi-java-examples-1.0.jar”为jar包路径,“hdfs://hacluster/tmp/example/hoodie_java”为Hudi表的存储路径,“ hoodie_java”为Hudi表的表名。 运行Scala样例程序: spark-submit --class com.huawei.bigdata.hudi.examples.HoodieDataSourceExample /opt/example/hudi-scala-examples-1.0.jar hdfs://hacluster/tmp/example/hoodie_scala hoodie_scala 其中:“/opt/example/hudi-scala-examples-1.0.jar”为jar包路径,“hdfs://hacluster/tmp/example/hoodie_scala”为Hudi表的存储路径,“ hoodie_Scala”为Hudi表的表名。 运行Python样例程序: spark-submit /opt/example/HudiPythonExample.py hdfs://hacluster/tmp/huditest/example/python hudi_trips_cow 其中:“hdfs://hacluster/tmp/huditest/example/python”为Hudi表的存储路径,“ hudi_trips_cow”为Hudi表的表名。
  • 操作步骤 客户端机器必须安装有Python3,其版本不低于3.6。 在客户端机器的命令行终端输入python3可查看Python版本号。如下显示Python版本为3.8.2。 Python 3.8.2 (default, Jun 23 2020, 10:26:03)[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linuxType "help", "copyright", "credits" or "license" for more information. 客户端机器必须安装有setuptools,版本为47.3.1。 具体软件,请到对应的官方网站获取。 https://pypi.org/project/setuptools/#files 将下载的setuptools压缩文件复制到客户端机器上,解压后进入解压目录,在客户端机器的命令行终端执行python3 setup.py install。 如下内容表示安装setuptools的47.3.1版本成功。 Finished processing dependencies for setuptools==47.3.1 安装Python客户端到客户端机器。 参考获取MRS应用开发样例工程,获取样例代码解压目录中“src\hive-examples”目录下的样例工程文件夹“python3-examples”。 进入“python3-examples”文件夹。 根据python3的版本,选择进入“dependency_python3.6”或“dependency_python3.7”或“dependency_python3.8”文件夹。 执行whereis easy_install命令,找到easy_install程序路径。如果有多个路径,使用easy_install --version确认选择setuptools对应版本的easy_install,如/usr/local/bin/easy_install 使用对应的easy_install命令,依次安装dependency_python3.x文件夹下的egg文件。如: /usr/local/bin/easy_install future-0.18.2-py3.8.egg 输出以下关键内容表示安装egg文件成功。 Finished processing dependencies for future==0.18.2
  • 部署运行及结果查看 导出本地jar包,请参见打包Strom样例工程应用。 将1中导出的本地Jar包,4中获取的配置文件和5中获取的jar包合并统一打出完整的业务jar包,请参见打包Strom应用业务。 执行命令提交拓扑。 storm jar /opt/jartarget/source.jar com.huawei.storm.example.hbase.SimpleHBaseTopology hbase-test 因为示例中的HBaseBolt并没有建表功能,在提交之前确保HBase中存在相应的表,若不存在需要手动建表,HBase shell建表语句如下create 'WordCount', 'cf'。 拓扑提交成功后请自行登录HBase集群查看。
  • 代码样例 下面代码片段在com.huawei.storm.example.common包的“RandomSentenceSpout”类的“nextTuple”方法中,作用在于将收到的字符串拆分成单词。 /** * {@inheritDoc} */ @Override public void nextTuple() { Utils.sleep(100); String[] sentences = new String[] {"the cow jumped over the moon", "an apple a day keeps the doctor away", "four score and seven years ago", "snow white and the seven dwarfs", "i am at two with nature"}; String sentence = sentences[random.nextInt(sentences.length)]; collector.emit(new Values(sentence)); }
  • 简介 Storm是一个分布式的、可靠的、容错的数据流处理系统。它会把工作任务委托给不同类型的组件,每个组件负责处理一项简单特定的任务。Storm的目标是提供对大数据流的实时处理,可以可靠地处理无限的数据流。 Storm有很多适用的场景:实时分析、在线机器学习、持续计算和分布式ETL等,易扩展、支持容错,可确保数据得到处理,易于构建和操控。 Storm有如下几个特点: 适用场景广泛 易扩展,可伸缩性高 保证无数据丢失 容错性好 多语言 易于构建和操控
  • Kafka开发应用时,需要准备的开发和运行环境如表1所示: 表1 开发环境 准备项 说明 操作系统 开发环境:Windows系统,支持Windows 7以上版本。 运行环境:Windows系统或Linux系统。 如需在本地调测程序,运行环境需要和集群业务平面网络互通。 安装和配置IntelliJ IDEA 开发环境的基本配置。版本要求:JDK使用1.8版本,IntelliJ IDEA使用2019.1或其他兼容版本。 说明: 若使用IBM JDK,请确保IntelliJ IDEA中的JDK配置为IBM JDK。 若使用Oracle JDK,请确保IntelliJ IDEA中的JDK配置为Oracle JDK。 若使用Open JDK,请确保IntelliJ IDEA中的JDK配置为Open JDK。 安装JDK 开发和运行环境的基本配置。版本要求如下: 服务端和客户端仅支持自带的OpenJDK,版本为1.8.0_272,不允许替换。 对于客户应用需引用SDK类的Jar包运行在客户应用进程中的。 X86客户端: Oracle JDK:支持1.8版本 IBM JDK:支持1.8.5.11版本 TaiShan客户端: OpenJDK:支持1.8.0_272版本 说明: 基于安全考虑,服务端只支持TLS V1.2及以上的加密协议。 IBM JDK默认只支持TLS V1.0,若使用IBM JDK,请配置启动参数“com.ibm.jsse2.overrideDefaultTLS”为“true”,设置后可以同时支持TLS V1.0/V1.1/V1.2,详情参见https://www.ibm.com/support/knowledgecenter/zh/SSYKE2_8.0.0/com.ibm.java.security.component.80.doc/security-component/jsse2Docs/matchsslcontext_tls.html#matchsslcontext_tls。 安装Maven 开发环境的基本配置。用于项目管理,贯穿软件开发生命周期。 7-zip 用于解压“*.zip”和“*.rar”文件,支持7-Zip 16.04版本。
  • 解决步骤 检查工程conf目录下“producer.properties”中配置的“bootstrap.servers”配置值中访问的IP和端口是否正确: 如果IP与Kafka集群部署的业务IP不一致,那么需要修改为当前集群正确的IP地址。 如果配置中的端口为21007(Kafka安全模式端口),那么修改该端口为9092(Kafka普通模式端口)。 检查网络是否正常,确保当前机器能够正常访问Kafka集群。
  • Master Master是中心管理节点,负责管理所有的tablet、tablet server以及副本之间的关联关系。同一时间集群中只有一个acting master(leader master),如果leader master挂了,一个新的master会通过Raft算法选举出来。所有的master数据都存放在一个tablet中,这个tablet会被复制到所有的candidate master上;tablet server会定期向master发送心跳。
  • Kudu简介 Kudu是专为Apache Hadoop平台开发的列式存储管理器,具有Hadoop生态系统应用程序的共同技术特性:在通用的商用硬件上运行,可水平扩展,提供高可用性。 Kudu的设计具有以下优点: 能够快速处理OLAP工作负载。 支持与MapReduce,Spark和其他Hadoop生态系统组件集成。 与Apache Impala的紧密集成,使其成为将HDFS与Apache Parquet结合使用的更好选择。 提供强大而灵活的一致性模型,允许您根据每个请求选择一致性要求,包括用于严格可序列化的一致性的选项。 提供同时运行顺序读写和随机读写的良好性能。 易于管理。 高可用性。Master和TServer采用raft算法,该算法可确保只要副本总数的一半以上可用,tablet就可以进行读写操作。例如,如果3个副本中有2个副本或5个副本中有3个副本可用,则tablet可用。即使主tablet出现故障,也可以通过只读的副tablet提供读取服务。 支持结构化数据模型。 通过结合所有以上属性,Kudu的目标是支持在当前Hadoop存储技术上难以实现或无法实现的应用。 Kudu的应用场景有: 需要最终用户立即使用新到达数据的报告型应用。 同时支持大量历史数据查询和细粒度查询的时序应用。 使用预测模型并基于所有历史数据定期刷新预测模型来做出实时决策的应用。
  • 参数解释 FS Action节点中包含的各参数及其含义,请参见表1。 表1 参数含义 参数 含义 name FS活动的名称 delete 删除指定的文件和目录的标签 move 将文件从源目录移动到目标目录的标签 chmod 修改文件或目录权限的标签 path 当前文件路径 source 源文件路径 target 目标文件路径 permissions 权限字符串 “${变量名}”表示:该值来自“job.properties”所定义。 例如:${nameNode}表示的就是“hdfs://hacluster”。(可参见配置Oozie作业运行参数)
  • 参数解释 MapReduce Action节点中包含的各参数及其含义,请参见表1。 表1 参数含义 参数 含义 name map-reduce action的名称 resourceManager MapReduce ResourceManager地址 name-node HDFS NameNode地址 queueName 任务处理时使用的MapReduce队列名 mapred.mapper.class Mapper类名 mapred.reducer.class Reducer类名 mapred.input.dir MapReduce处理数据的输入目录 mapred.output.dir MapReduce处理后结果数据输出目录 mapred.map.tasks MapReduce map任务个数 “${变量名}”表示:该值来自“job.properties”所定义。 例如:${nameNode}表示的就是“hdfs://hacluster”。(可参见配置Oozie作业运行参数)
  • 通过Java API提交Oozie作业开发思路 通过典型场景,用户可以快速学习和掌握Oozie的开发过程,并且对关键的接口函数有所了解。 本示例演示了如何通过Java API提交MapReduce作业和查询作业状态,代码示例只涉及了MapReduce作业,其他作业的API调用代码是一样的,仅job配置“job.properties”与工作流配置“workflow.xml”需根据实际情况设置。 完成导入并配置Oozie样例工程操作后即可执行通过Java API提交MapReduce作业和查询作业状态。 父主题: 通过Java API提交Oozie作业
  • Oozie Java接口介绍 Java API主要由org.apache.oozie.client.OozieClient提供。 表1 接口介绍 方法 说明 public String run(Properties conf) 运行job public void start(String jobId) 启动指定的job public String submit(Properties conf) 提交job public void kill(String jobId) 删除指定的job public void suspend(String jobId) 暂停指定的job public void resume(String jobId) 恢复指定的job public WorkflowJob getJobInfo(String jobId) 获取job信息 父主题: 常用Oozie API接口介绍
  • 参数解释 “coordinator.xml”中包含的各参数及其含义,请参见表1。 表1 参数含义 参数 含义 frequency 流程定时执行的时间间隔 start 定时流程任务启动时间 end 定时流程任务终止时间 workflowAppUri Workflow流程任务在HDFS上的存放路径 resourceManager MapReduce ResourceManager地址 queueName 任务处理时使用的MapReduce队列名 nameNode HDFS NameNode集群地址 “${变量名}”表示:该值来自“job.properties”所定义。 例如:${nameNode}表示的就是“hdfs://hacluster”。(可参见配置Oozie作业运行参数)
  • Python样例代码 下面代码片段仅为演示,具体代码参见SparkOnHbasePythonExample中HBaseMapPartitionExample文件: # -*- coding:utf-8 -*-"""【说明】由于pyspark不提供Hbase相关api,本样例使用Python调用Java的方式实现"""from py4j.java_gateway import java_importfrom pyspark.sql import SparkSession# 创建SparkSessionspark = SparkSession\ .builder\ .appName("JavaHBaseMapPartitionExample")\ .getOrCreate()# 向sc._jvm中导入要运行的类java_import(spark._jvm, 'com.huawei.bigdata.spark.examples.hbasecontext.JavaHBaseMapPartitionExample')# 创建类实例并调用方法,传递sc._jsc参数spark._jvm.JavaHBaseMapPartitionExample().execute(spark._jsc, sys.argv)# 停止SparkSessionspark.stop()
  • 提交命令 假设用例代码打包后的jar包名为spark-hbaseContext-test-1.0.jar,并将jar包放在客户端“$SPARK_HOME”目录下,以下命令均在“$SPARK_HOME”目录执行,Java接口对应的类名前有Java字样,请参考具体样例代码进行书写。 yarn-client模式: java/scala版本(类名等请与实际代码保持一致,此处仅为示例) bin/spark-submit --master yarn --deploy-mode client --class com.huawei.bigdata.spark.examples.hbasecontext.JavaHBaseBulkLoadExample SparkOnHbaseJavaExample-1.0.jar /tmp/hfile bulkload-table-test python版本(文件名等请与实际保持一致,此处仅为示例) bin/spark-submit --master yarn --deploy-mode client --jars SparkOnHbaseJavaExample-1.0.jar HBaseBulkLoadExample.py /tmp/hfile bulkload-table-test yarn-cluster模式: java/scala版本(类名等请与实际代码保持一致,此处仅为示例) bin/spark-submit --master yarn --deploy-mode cluster --class com.huawei.bigdata.spark.examples.hbasecontext.JavaHBaseBulkLoadExample SparkOnHbaseJavaExample-1.0.jar /tmp/hfile bulkload-table-test python版本(文件名等请与实际保持一致,此处仅为示例) bin/spark-submit --master yarn --deploy-mode cluster --jars SparkOnHbaseJavaExample-1.0.jar HBaseBulkLoadExample.py /tmp/hfile bulkload-table-test
  • 数据规划 将数据文件上传至HDFS中。 确保以多主实例模式启动了JD BCS erver服务,并至少有一个实例可连接客户端。在Linux系统HDFS客户端新建一个文本文件“data”,内容如下: Miranda,32Karlie,23Candice,27 在HDFS路径下建立一个目录,例如创建“/home”,并上传“data”文件到此目录,命令如下: 登录HDFS客户端节点,执行如下命令: cd {客户端安装目录} source bigdata_env 执行如下命令创建目录“/home”: hdfs dfs -mkdir /home 执行如下命令上传数据文件: hdfs dfs -put data /home 确保其对启动JDB CS erver的用户有读写权限。 确保客户端classpath下有“hive-site.xml”文件,且根据实际集群情况配置所需要的参数。JDBCServer相关参数详情,请参见Spark JDBCServer接口介绍。
  • Python样例代码 下面代码片段仅为演示,具体代码参见SparkOnHbasePythonExample中HBaseBulkLoadPythonExample文件: # -*- coding:utf-8 -*-"""【说明】由于pyspark不提供Hbase相关api,本样例使用Python调用Java的方式实现"""from py4j.java_gateway import java_importfrom pyspark.sql import SparkSession# 创建SparkSessionspark = SparkSession\ .builder\ .appName("JavaHBaseBulkLoadExample")\ .getOrCreate()# 向sc._jvm中导入要运行的类java_import(spark._jvm, 'com.huawei.bigdata.spark.examples.HBaseBulkLoadPythonExample')# 创建类实例并调用方法,传递sc._jsc参数spark._jvm.HBaseBulkLoadPythonExample().hbaseBulkLoad(spark._jsc, sys.argv[1], sys.argv[2])# 停止SparkSessionspark.stop()
  • 场景说明 用户可以在Spark应用程序中使用HBaseContext的方式去使用HBase,将要插入的数据的rowKey构造成rdd,然后通过HBaseContext的bulkLoad接口将rdd写入HFile中。将生成的HFile导入HBase表的操作采用如下格式的命令,不属于本接口范围,不在此进行详细说明: hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles {hfilePath} {tableName}
  • 打包项目 通过IDEA自带的Maven工具,打包项目,生成jar包。具体操作请参考在Linux环境中编包并运行Spark程序。 将打包生成的jar包上传到Spark客户端所在服务器的任意目录(例如“$SPARK_HOME” )下。 若运行“Spark on HBase”样例程序,需要在Spark客户端的“spark-defaults.conf”配置文件中将配置项“spark.yarn.security.credentials.hbase.enabled”设置为“true”(该参数值默认为“false”,改为“true”后对已有业务没有影响。如果要卸载HBase服务,卸载前请将此参数值改回“false”),将配置项“spark.inputFormat.cache.enabled”设置为“false”。
  • 运行任务 进入Spark客户端目录,使用java -cp命令运行代码(类名与文件名等请与实际代码保持一致,此处仅为示例): 运行Java样例代码: java -cp $SPARK_HOME/jars/*:$SPARK_HOME/jars/hive/*:$SPARK_HOME/conf:/opt/female/SparkThriftServerJavaExample-1.0.jar com.huawei.bigdata.spark.examples.ThriftServerQueriesTest $SPARK_HOME/conf/hive-site.xml $SPARK_HOME/conf/spark-defaults.conf 运行Scala样例代码: java -cp $SPARK_HOME/jars/*:$SPARK_HOME/jars/hive/*:$SPARK_HOME/conf:/opt/female/SparkThriftServerExample-1.0.jar com.huawei.bigdata.spark.examples.ThriftServerQueriesTest $SPARK_HOME/conf/hive-site.xml $SPARK_HOME/conf/spark-defaults.conf 集群开启ZooKeeper的SSL特性后(查看ZooKeeper服务的ssl.enabled参数),请在执行命令中添加-Dzookeeper.client.secure=true -Dzookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty两项参数: java -Dzookeeper.client.secure=true -Dzookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty -cp $SPARK_HOME/jars/*:$SPARK_HOME/jars/hive/*:$SPARK_HOME/conf:/opt/female/SparkThriftServerJavaExample-1.0.jar com.huawei.bigdata.spark.examples.ThriftServerQueriesTest $SPARK_HOME/conf/hive-site.xml $SPARK_HOME/conf/spark-defaults.conf
  • 操作步骤 查看Spark应用运行结果数据。 结果数据存储路径和格式已经由Spark应用程序指定,可通过指定文件获取。 查看Spark应用程序运行情况。 Spark主要有两个Web页面。 Spark UI页面,用于展示正在执行的应用的运行情况。 页面主要包括了Jobs、Stages、Storage、Environment和Executors五个部分。Streaming应用会多一个Streaming标签页。 页面入口:在YARN的Web UI界面,查找到对应的Spark应用程序。单击应用信息的最后一列“ApplicationMaster”,即可进入SparkUI页面。 History Server页面,用于展示已经完成的和未完成的Spark应用的运行情况。 页面包括了应用ID、应用名称、开始时间、结束时间、执行时间、所属用户等信息。单击应用ID,页面将跳转到该应用的SparkUI页面。 查看Spark日志获取应用运行情况。 您可以查看Spark日志了解应用运行情况,并根据日志信息调整应用程序。相关日志信息可参考Spark2x日志介绍。
  • 代码样例 由于pyspark不提供Hbase相关api,本样例使用Python调用Java的方式实现。 下面代码片段仅为演示,具体代码参见SparkHbasetoHbasePythonExample: # -*- coding:utf-8 -*-from py4j.java_gateway import java_importfrom pyspark.sql import SparkSession# 创建SparkSession,设置kryo序列化spark = SparkSession\ .builder\ .appName("SparkHbasetoHbase") \ .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer") \ .config("spark.kryo.registrator", "com.huawei.bigdata.spark.examples.MyRegistrator") \ .getOrCreate()# 向sc._jvm中导入要运行的类java_import(spark._jvm, 'com.huawei.bigdata.spark.examples.SparkHbasetoHbase')# 创建类实例并调用方法spark._jvm.SparkHbasetoHbase().hbasetohbase(spark._jsc)# 停止SparkSessionspark.stop()
  • 打包项目 通过IDEA自带的Maven工具,打包项目,生成jar包。具体操作请参考在Linux环境中编包并运行Spark程序。 将打包生成的jar包上传到Spark客户端所在服务器的任意目录(例如“$SPARK_HOME” )下。 若运行“Spark on HBase”样例程序,需要在Spark客户端的“spark-defaults.conf”配置文件中将配置项“spark.yarn.security.credentials.hbase.enabled”设置为“true”(该参数值默认为“false”,改为“true”后对已有业务没有影响。如果要卸载HBase服务,卸载前请将此参数值改回“false”),将配置项“spark.inputFormat.cache.enabled”设置为“false”。
共99354条