更新时间:2022-05-10 GMT+08:00
分享

使用Spark on CCE

在CCE上运行SparkPi例子

在执行Spark的的机器上安装kubectl,登录CCE控制台,在左侧导航栏中选择“集群管理”,单击集群列表右侧

按照弹出窗口中的提示信息完成集群连接。

kubectl安装成功后,执行如下命令创建spark

kubectl create serviceaccount spark

kubectl create clusterrolebinding spark-role --clusterrole=edit --serviceaccount=default:spark --namespace=default

以提交Spark-Pi的作业到CCE为例:

spark-submit \
  --master k8s://https://aa.bb.cc.dd:5443 \
  --deploy-mode cluster \
    --name spark-pi \
    --class org.apache.spark.examples.SparkPi \
      --conf spark.executor.instances=2 \
    --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
    --conf spark.kubernetes.container.image=swr.cn-east-3.myhuaweicloud.com/dev-container/spark:3.1.3-obs \
    local:///opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar

配置说明:

  1. 文中的aa.bb.cc.dd为 ~/.kube/config中使用的master地址。也可以通过kubectl cluster-info获取。
  2. spark.kubernetes.container.image配置项上传的镜像地址。
  3. 值得一提的是,所有能使用--conf指定的参数均会默认从文件~/spark-obs/conf/spark-defaults.conf中读取,所以通用配置可以如配置OBS访问一样,直接写入作为默认值。

访问对象存储服务OBS

使用spark-submit下发hdfs任务。请修改命令最后的参数为租户内实际的文件obs://bucket-name/filename。

spark-submit \
  --master k8s://https://aa.bb.cc.dd:5443 \
  --deploy-mode cluster \
  --name spark-hdfs-test \
  --class org.apache.spark.examples.HdfsTest \
  --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
  --conf spark.kubernetes.container.image=swr.cn-east-3.myhuaweicloud.com/dev-container/spark:3.1.3-obs \
  local:///opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar obs://bucket-name/filename

Spark-shell交互式scala命令支持

spark-shell \
  --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
  --conf spark.kubernetes.container.image=swr.cn-east-3.myhuaweicloud.com/dev-container/spark:3.1.3-obs \
  --master k8s://https://aa.bb.cc.dd:5443

下述命令定义linecount及wordcount两个spark计算任务的算法。

def linecount(input:org.apache.spark.sql.Dataset[String]):Long=input.filter(line => line.length()>0).count()
def wordcount(input:org.apache.spark.sql.Dataset[String]):Long=input.flatMap(value => value.split("\\s+")).groupByKey(value => value).count().count()

下述命令定义了各种数据来源:

var alluxio = spark.read.textFile("alluxio://alluxio-master:19998/sample-1g")
var obs = spark.read.textFile("obs://gene-container-gtest/sample-1g")
var hdfs = spark.read.textFile("hdfs://192.168.1.184:9000/user/hadoop/books/sample-1g")

下述命令开始正式计算:

spark.time(wordcount(obs))
spark.time(linecount(obs))
分享:

    相关文档

    相关产品

close