1、测试

  1. 移动package包到根目录下,cdc到package目录下开始执行代码
  2. 目录结构如下

image.png

1.1、sparkwordcount运行

  1. 提交代码

(sparkWordCount的主类为:Spark_WordCount,jar包在/package/runPackage下。选择本地运行,运行的时候缺包每一台对应节点的指定目录都有要执行的文件)

  1. spark2-submit --class Spark_WordCount --master local runPackage/sparkstreaming-1.0-SNAPSHOT.jar file:///package/testText/test.txt
  1. 结果如下:image.png

    1.2、非kerberos的spark拉去kafka数据向hive写数据

  2. 配置文件为/package/conf/hive_conf.properties,根据需求指定修改配置文件

    1. kafka.brokers=cdh1.macro.com:9092,cdh2.macro.com:9092,cdh3.macro.com:9092
    2. kafka.topics=kafka2_spark2
    3. hive.table.name=kafka2_spark2_hive2
    4. kafka.group.id=testgroup
  3. 创建hive数据库kafka2_spark2_hive2

    1. creat table kafka2_spark2_hive2(id String, name String, age String);
  4. 提交代码

(主类为:SparkStreamingFromKafkaToHive_NotKerberos,选择本地运行

  1. spark2-submit --class SparkStreamingFromKafkaToHive_NotKerberos --master local runPackage/sparkstreaming-1.0-SNAPSHOT.jar
  1. 执行未报错,结果如下

image.png

  1. 模拟消费者向kafka2_spark2队列发送消息,代码如下

(/package/testText/testText/HiveAndHBaseTestText.txt文件中指定了我们需要发送的内容,运行脚本提交发送消息)

  1. sh run_producer.sh MyProducerNotKerberos testText/HiveAndHBaseTestText.txt

image.png

  1. 消息成功发送,web界面查询信息结果如下

image.png

1.3、非kerberos下spark拉取kafka数据向HBase写数据

  1. 配置文件为:/package/conf/hbase_conf.properties

    1. kafka.brokers=cdh1.macro.com:9092,cdh2.macro.com:9092,cdh3.macro.com:9092 //指定连接地址
    2. kafka.topics=kafka2_spark2 //消息队列
    3. principal.account=hive@MACRO.COM //登录用户
    4. keytab.filepath=/root/project/startKerberos/conf/hive.keytab // keytab文件
    5. zookeeper.list=192.168.0.200 //连接的zookeeper地址
    6. zookeeper.port=2181 // zookeeper端口
    7. kafka.group.id=testgroup //消费组
  2. 提交代码

(主类为:SparkStreamingFromKafkaToHBase_NotKerberos,选择本地运行,jar包为/package/runPackage/sparkstreaming-1.0-SNAPSHOT.jar

  1. spark2-submit --class SparkStreamingFromKafkaToHBase_NotKerberos --master local runPackage/sparkstreaming-1.0-SNAPSHOT.jar
  1. 执行未报错,结图如下

image.png

  1. 运行脚本模拟消费者向kafka2_spark2队列发送消息,代码如下

    1. sh run_producer.sh MyProducerNotKerberos testText/HiveAndHBaseTestText.txt

    image.png

  2. 消息成功发送,查询信息结果如下

image.png

1.4、Kerberos下Spark拉取Kafka数据写入数据到hive

  1. 配置文件为/package/conf/hive_conf_Krb.properties

    1. kafka.brokers=cdh1.macro.com:9092,cdh2.macro.com:9092,cdh3.macro.com:9092
    2. kafka.topics=kafka2_spark2
    3. group.id=testgroup
    4. hive.tableName=kafka2_spark2_hive2
    5. principal.account=hive@MACRO.COM
    6. keytab.filepath=/package/conf/hive.keytab
  2. 提交代码

(提交时手动指定用户以及keytab文件和jaas.conf文件,所有配置文件都在/package/conf/下

  1. spark2-submit --class SparkStreamingFromKafkaToHive_Kerberos --master local --deploy-mode client --executor-memory 1g --executor-cores 2 --driver-memory 2g --num-executors 2 --queue default --principal hive@MACRO.COM --keytab /package/conf/hive.keytab --files "/package/conf/jaas.conf" --driver-java-options "-Djava.security.auth.login.config=/package/conf/jaas.conf" --conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=/package/conf/jaas.conf" runPackage/sparkstreaming-1.0-SNAPSHOT.jar
  1. 执行未报错,结果如下

image.png

  1. 运行kerberos下向kafka生产者向kafka2_spark2队列发送消息

(选择主类MyProducer,这个类里面指定了jaas.conf以及keytab文件等位置,直接写shell脚本进行运行)

  1. sh run_producer.sh MyProducer testText/HiveAndHBaseTestText.txt

image.png

  1. 成功发送消息,登录客户端查询kafka2_spark2_hive2表,消息成功写入

image.png

1.5、Kerberos下Spark拉取Kafka数据写入数据到hbase

  1. 配置文件为/package/conf/hbase_conf_Krb.properties

    1. kafka.brokers=cdh1.macro.com:9092,cdh2.macro.com:9092,cdh3.macro.com:9092
    2. kafka.topics=kafka2_spark2
    3. principal.account=hive@MACRO.COM
    4. keytab.filepath=/package/conf/hive.keytab
    5. zookeeper.list=cdh1.macro.com,cdh2.macro.com,cdh3.macro.com
    6. zookeeper.port=2181
    7. kafka.group.id=testgroup
  2. 提交代码:

    (选择手动指定jaas以及keytab文件)

    1. spark2-submit --class SparkStreamingFromKafkaToHBase_Kerberos --master local[*] --deploy-mode client --executor-memory 1g --executor-cores 1 --driver-memory 1g --num-executors 1 --queue default --principal hive@MACRO.COM --keytab /package/conf/hive.keytab --files "/package/conf/jaas.conf" --driver-java-options "-Djava.security.auth.login.config=/package/conf/jaas.conf" --conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=/package/conf/jaas.conf" runPackage/sparkstreaming-1.0-SNAPSHOT.jar
  3. 执行结果:

image.png

  1. 运行kerberos下向kafka生产者向kafka2_spark2队列发送消息

image.png

  1. 查询hbase的表,消息成功写入,结果如下:

image.png

2、问题及解决方法

  1. 运行jar包提示找不到部分类

原因:因为打jar包的时候没有把依赖包打进去
解决方案:把构建项目所需要的jar包拷贝到/opt/cloudera/parcels/SPARK2/lib/spark2/jars目录下
image.png
注意:所有节点都要拷贝

  1. 提示kafka客户带版本过低截图如下:

image.png
解决方案:登录CM进入SPARK2服务的配置项将spark_kafka_version的kafka版本修改为0.10。重启spark
image.png

  1. 提示NoClassDefFoundError: org/apache/htrace/Trace
  • 对于用maven构建hadoop开发项目的时候,在加入了hadoop的依赖项之后,会出现无法更新htrace-core的现象,所以要自己单独拷贝htrace-core的jar包到/opt/cloudera/parcels/SPARK2/lib/spark2/jars目录下

image.png
解决方案:拷贝如下htrace-core的jar包到每一个节点。
image.png

  1. 开发工程中在DIEA运行时,提示找不到视图或表

image.png
解决方案:
在hadoop环境中拷贝hive-site.xml文件到项目中的resource文件夹下(find / -name hive-site.xml 搜索)
image.png
image.png

  1. WinDow下IDEA环境运行提示实例化错误,截图如下:

image.png
原因:window下需要安装hadoop环境
解决:
1、下载集群对应linux的hadoop版本 <—超链接
2、下载对应的window下的hadoop需要的bin目录 <—超链接
3、解压Linux,把bin目录替换为winutils的bin目录
4、在代码中引用这个地址

  1. System.setProperty("hadoop.home.dir", "E:\\Application\\hadoop-2.6.0")

image.png

  1. java.lang.IllegalArgumentException: Missing application resource 找不到资源

image.png
原因:如果jar没有设置CLASSPATH环境变量是可以直接指定文件路径的,如果设置了,需要加—jars指定路径