如何通过CM升级Kafka0.11及Spark2.2

2018-04-01 19:41:55 浏览数 (1)

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

1.文档编写目的


在前面的文章《CDH5.13和CM5.13的新功能》中Fayson介绍过Cloudera发布CDH5.13时,同时也发布了Kafka3.0版本(即社区0.11版),目前社区最新版本为1.0。由于Kafka3.0和Spark2.2需要JDK8的支持,所以在升级Kafka3.0和Spark2.2版本时必须先升级JDK版本,可以参考《如何将CDH集群JAVA升级至JDK8》和《如何将Kerberos环境下CDH集群JAVA升级至JDK8》,本文Fayson主要介绍在CDH集群中如何升级Kakfa3.0和Spark2.2。

  • 内容概述

1.部署Kafka和Spark的Parcel包

2.CM配置Kafka和Spark的Parcel

3.Kafka和Spark升级

4.功能测试

  • 测试环境

1.CM和CDH版本为5.11.2

2.采用sudo权限的ec2-user用户操作

3.RedHat7.2

  • 前置条件

1.CM和CDH5.3和更高版本

2.JDK8或以上版本

3.集群已启用Kerberos

2.部署Kafka和Spark的Parcel包


1.在Cloudera官网下载Kafka和Spark的Parcel包

Kafka下载地址

代码语言:txt复制
http://archive.cloudera.com/kafka/parcels/3.0/KAFKA-3.0.0-1.3.0.0.p0.40-el7.parcel
http://archive.cloudera.com/kafka/parcels/3.0/KAFKA-3.0.0-1.3.0.0.p0.40-el7.parcel.sha1
http://archive.cloudera.com/kafka/parcels/3.0/manifest.json

Spark下载地址

代码语言:txt复制
http://archive.cloudera.com/spark2/parcels/2.2/SPARK2-2.2.0.cloudera1-1.cdh5.12.0.p0.142354-el7.parcel
http://archive.cloudera.com/spark2/parcels/2.2/SPARK2-2.2.0.cloudera1-1.cdh5.12.0.p0.142354-el7.parcel.sha1
http://archive.cloudera.com/spark2/parcels/2.2/manifest.json

2.创建Kafka和Spark的部署目录,并下载parcle包到相应目录

代码语言:txt复制
[ec2-user@ip-172-31-22-86 ~] sudo mkdir -p /var/www/html/kafka3.0
[ec2-user@ip-172-31-22-86 ~] sudo mkdir -p /var/www/html/spark2.2

Kafka3.0目录

Spark2.2目录

3.测试Kafka和Spark的Parcel是否部署成功

Kafka访问:

Spark访问:

3.CM中配置Kafka和Spark的Parcel库


1.登录CM,进入Parcel配置界面

2.点击“配置”

3.增加Kafka和Spark的Parcel库配置

这里Fayson使用的是AWS内网地址。

4.点击“保存更改”,查看配置成功。此时如果能看到Kafka3.0为可以“下载”状态,已有的Kafka2.2为可以“停用”状态,则表示配置Parcel库成功。注意此时Kafka2.2依旧为使用状态。

4.Kafka3.0升级


1.下载、分配并激活Kafka3.0的Parcel包

2.回到CM主页,重新部署Kafka客户端并重启Kafka集群

3.重启过期服务

4.重启

5.重启成功,完成Kafka3.0版本升级

5.Spark2.2升级


1.更新Spark2的CSD文件

CSD文件下载地址

代码语言:txt复制
http://archive.cloudera.com/spark2/csd/SPARK2_ON_YARN-2.2.0.cloudera1.jar

将下载的文件替换掉/opt/cloudera/csd目录下spark2其它版本的jar

2.重启cloudera-scm-server服务

代码语言:txt复制
[ec2-user@ip-172-31-22-86 csd]$ sudo systemctl restart cloudera-scm-server

3.点击“下载”Spark2.2.0的Parcel

4.点击“分配”

5.点击“激活”

回到主页根据提示重启服务,完成Spark2的升级

6.验证Spark2版本是否为我们升级后的版本

有如上截图显示则表示升级成功。

6.测试Spark2和Kafka3.0


  • Kafka测试

由于集群已启用Kerberos,所以在测试Spark的时候需要加载KAFKA_OPTS的环境变量,具体可以参考Fayson前面的文章《如何通过Cloudera Manager为Kafka启用Kerberos及使用》

1.创建一个mytopic的topic

代码语言:txt复制
kafka-topics --create --zookeeper ip-172-31-21-45.ap-southeast-1.compute.internal:2181 --replication-factor 3 --partitions 1 --topic mytopic

2.向mytopic生产消息

代码语言:txt复制
[ec2-user@ip-172-31-21-45 ~]$ export KAFKA_OPTS="-Djava.security.auth.login.config=/home/ec2-user/jaas-keytab.conf"
[ec2-user@ip-172-31-21-45 ~]$ kafka-console-producer --broker-list ip-172-31-26-80.ap-southeast-1.compute.internal:9092,ip-172-31-21-45.ap-southeast-1.compute.internal:9092,ip-172-31-26-102.ap-southeast-1.compute.internal:9092 --topic mytopic --producer.config client.properties

3.消费mytopic消息

代码语言:txt复制
[root@ip-172-31-21-45 ec2-user]# export KAFKA_OPTS="-Djava.security.auth.login.config=/home/ec2-user/jaas-keytab.conf"
[root@ip-172-31-21-45 ec2-user]# kafka-console-consumer --topic mytopic --from-beginning --bootstrap-server ip-172-31-26-80.ap-southeast-1.compute.internal:9092,ip-172-31-21-45.ap-southeast-1.compute.internal:9092,ip-172-31-26-102.ap-southeast-1.compute.internal:9092 --consumer.config client.properties
  • Spark2测试
代码语言:txt复制
[ec2-user@ip-172-31-22-86 jars]$ spark2-submit --class org.apache.spark.examples.SparkPi    --master yarn-client --num-executors 4 --driver-memory 1g    --driver-cores 1 --executor-memory 1g --executor-cores 1    /opt/cloudera/parcels/SPARK2/lib/spark2/examples/jars/spark-examples_2.11-2.2.0.cloudera1.jar 10

运行成功

7.常见问题


1.在完成Spark2.2的升级后,在命令行运行spark2-shell命令报错

代码语言:txt复制
[ec2-user@ip-172-31-22-86 csd]$ spark2-shell
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/spark/launcher/Main : Unsupported major.minor version 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

解决方法:在Spark2的配置页面配置JAVA环境变量为JDK8

保存配置并重新部署客户端,问题解决。

为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

0 人点赞