专栏首页Hadoop实操如何使用Hue创建Spark1和Spark2的Oozie工作流

如何使用Hue创建Spark1和Spark2的Oozie工作流

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

1.文档编写目的


使用Hue可以方便的通过界面制定Oozie的工作流,支持Hive、Pig、Spark、Java、Sqoop、MapReduce、Shell等等。Spark?那能不能支持Spark2的呢,接下来本文章就主要讲述如何使用Hue创建Spark1和Spark2的Oozie工作流。

  • 内容概述

1.添加Spark2到Oozie的Share-lib

2.创建Spark2的Oozie工作流

3.创建Spark1的Oozie工作流

4.总结

  • 测试环境

1.CM和CDH版本为5.11.2

2.操作系统:RedHat7.2

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

2.Oozie共享库添加Spark2


1.查看当前Oozie的share-lib共享库HDFS目录

ec2-user@ip-172-31-22-86jars$ oozie admin -ooziehttp://ip-172-31-22-86.ap-southeast-1.compute.internal:11000/oozie-sharelibupdate

ShareLib update status

host =http://ec2-54-169-0-36.ap-southeast-1.compute.amazonaws.com:11000/oozie

status = Successful

sharelibDirOld =hdfs://ip-172-31-21-45.ap-southeast-1.compute.internal:8020/user/oozie/share/lib/lib_20170921070424

sharelibDirNew =hdfs://ip-172-31-21-45.ap-southeast-1.compute.internal:8020/user/oozie/share/lib/lib_20170921070424

ec2-user@ip-172-31-22-86jars$

2.在Oozie的/user/oozie/share/lib/lib_20170921070424创建spark2目录

[ec2-user@ip-172-31-22-86 ~]$ sudo -u hdfs hadoop fs -mkdir /user/oozie/share/lib/lib_20170921070424/spark2

3.向spark2目录添加spark2的jars和oozie-sharelib-spark*.jar

[ec2-user@ip-172-31-22-86 jars]$ pwd
/opt/cloudera/parcels/SPARK2/lib/spark2/jars
[ec2-user@ip-172-31-22-86 jars]$ sudo -u hdfs hadoop fs -put *.jar /user/oozie/share/lib/lib_20170921070424/spark2
[ec2-user@ip-172-31-22-86 spark]$ pwd
/opt/cloudera/parcels/CDH/lib/oozie/oozie-sharelib-yarn/lib/spark
[ec2-user@ip-172-31-22-86 spark]$ sudo -u hdfs hadoop fs -put oozie-sharelib-spark*.jar /user/oozie/share/lib/lib_20170921070424/spark2

4.修改目录属主及权限

[ec2-user@ip-172-31-22-86 ~]$ sudo -u hdfs hadoop fs –chown -R oozie:oozie /user/oozie/share/lib/lib_20170921070424/spark2
[ec2-user@ip-172-31-22-86 ~]$ sudo -u hdfs hadoop fs –chmod -R 775 /user/oozie/share/lib/lib_20170921070424/spark2

5.更新Oozie的share-lib

[ec2-user@ip-172-31-22-86 spark]$ oozie admin -oozie http://ip-172-31-22-86.ap-southeast-1.compute.internal:11000/oozie -sharelibupdate
[ShareLib update status]
        host = http://ec2-54-169-0-36.ap-southeast-1.compute.amazonaws.com:11000/oozie
        status = Successful
        sharelibDirOld = hdfs://ip-172-31-21-45.ap-southeast-1.compute.internal:8020/user/oozie/share/lib/lib_20170921070424
        sharelibDirNew = hdfs://ip-172-31-21-45.ap-southeast-1.compute.internal:8020/user/oozie/share/lib/lib_20170921070424

[ec2-user@ip-172-31-22-86 spark]$ 

6.确认spark2已经添加到共享库

[ec2-user@ip-172-31-22-86 spark]$ oozie admin -oozie http://ip-172-31-22-86.ap-southeast-1.compute.internal:11000/oozie -shareliblist
[Available ShareLib]
spark2
oozie
hive
distcp
hcatalog
sqoop
mapreduce-streaming
spark
hive2
pig
[ec2-user@ip-172-31-22-86 spark]$ 

3.创建Spark2的Oozie工作流


1.登录Hue,创建Oozie工作流

2.进入WorkSpace

点击lib

在命令行将Spark2自带的example例子上传到/user/hue/oozie/workspaces/hue-oozie-1507832616.28/lib目录

[ec2-user@ip-172-31-22-86 jars]$ pwd
/opt/cloudera/parcels/SPARK2/lib/spark2/examples/jars
[ec2-user@ip-172-31-22-86 jars]$ sudo -u hdfs hadoop fs -put spark-examples_2.11-2.1.0.cloudera1.jar /user/hue/oozie/workspaces/hue-oozie-1507832616.28/lib
[ec2-user@ip-172-31-22-86 jars]$ 

3.添加Spark2任务

设置使用Spark2,否则默认使用的Spark1

完成配置,点击保存

4.保存完成后,点击运行测试是否正常

运行成功

4.创建Spark1的Oozie工作流


1.创建Oozie工作流

进入WorkSpace

2.将Spark1的example的jar包上传至该WorkSpace的lib目录

[ec2-user@ip-172-31-22-86 lib]$ pwd
/opt/cloudera/parcels/CDH/lib/spark/examples/lib
[ec2-user@ip-172-31-22-86 lib]$ sudo -u hdfs hadoop fs -put spark-examples-1.6.0-cdh5.11.2-hadoop2.6.0-cdh5.11.2.jar /user/hue/oozie/workspaces/hue-oozie-1507860705.24/lib
[ec2-user@ip-172-31-22-86 lib]$ 

3.添加Spark1的任务到Oozie

4.保存Oozie,然后点击提交

运行成功

5.常见问题


1.在使用Hue创建Spark2的Oozie工作流时运行异常

2017-10-16 23:20:07,086 WARN org.apache.oozie.action.hadoop.SparkActionExecutor: SERVER[ec2-54-179-152-169.ap-southeast-1.compute.amazonaws.com] USER[admin] GROUP[-] TOKEN[] APP[MyFirstSpark2] JOB[0000000-171016230402705-oozie-oozi-W] ACTION[0000000-171016230402705-oozie-oozi-W@spark-1411] Launcher exception: Exception when registering SparkListener
org.apache.spark.SparkException: Exception when registering SparkListener
   at org.apache.spark.SparkContext.setupAndStartListenerBus(SparkContext.scala:2193)
   at org.apache.spark.SparkContext.<init>(SparkContext.scala:562)
   at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2313)
   at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:868)
   at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:860)
   at scala.Option.getOrElse(Option.scala:121)
   at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:860)
   at org.apache.spark.examples.SparkPi$.main(SparkPi.scala:31)
   at org.apache.spark.examples.SparkPi.main(SparkPi.scala)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:606)
   at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:738)
   at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187)
   at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212)
   at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126)
   at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
   at org.apache.oozie.action.hadoop.SparkMain.runSpark(SparkMain.java:178)
   at org.apache.oozie.action.hadoop.SparkMain.run(SparkMain.java:90)
   at org.apache.oozie.action.hadoop.LauncherMain.run(LauncherMain.java:81)
   at org.apache.oozie.action.hadoop.SparkMain.main(SparkMain.java:57)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:606)
   at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:235)
   at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
   at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:459)
   at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
   at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
   at java.security.AccessController.doPrivileged(Native Method)
   at javax.security.auth.Subject.doAs(Subject.java:415)
   at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1920)
   at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.ClassNotFoundException: com.cloudera.spark.lineage.ClouderaNavigatorListener
   at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
   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 java.lang.ClassLoader.loadClass(ClassLoader.java:358)
   at java.lang.Class.forName0(Native Method)
   at java.lang.Class.forName(Class.java:270)
   at org.apache.spark.util.Utils$.classForName(Utils.scala:229)
   at org.apache.spark.SparkContext$$anonfun$setupAndStartListenerBus$1.apply(SparkContext.scala:2159)
   at org.apache.spark.SparkContext$$anonfun$setupAndStartListenerBus$1.apply(SparkContext.scala:2156)
   at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
   at scala.collection.mutable.WrappedArray.foreach(WrappedArray.scala:35)
   at org.apache.spark.SparkContext.setupAndStartListenerBus(SparkContext.scala:2156)
   ... 34 more

解决方法:

保存配置然后重启相应服务。

6.总结


使用Oozie创建Spark的工作流,如果需要运行Spark2的作业则需要向Oozie的Share-lib库中添加Spark2的支持,并在创建Spark2作业的时候需要指定Share-lib为spark2(Oozie默认的支持Spark1),否则会运行失败报Spark2的类找不到异常。

参考文档:

http://www.ericlin.me/2017/01/how-to-load-different-version-of-spark-into-oozie/?nsukey=E8Jq3WToi%2B7J%2FdQl19VwXwp9T%2Bjfeb1FCMwH9THP%2FNHS2YjcQ7soCN%2FBjG93ooOoYW21QAzNjL0HAX6dY32LCwprgJZ%2BVE%2Fu5vIgLPZwRdlEufRneOIa24y1AHXAYXeLyYXSX%2FNZdFl1h7aqol5BNKOl%2BKX5RmAvw3JiW5UryvUb2k3bL%2FaH2PK%2BeAN74MPP

醉酒鞭名马,少年多浮夸! 岭南浣溪沙,呕吐酒肆下!挚友不肯放,数据玩的花! 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。


推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操

本文分享自微信公众号 - Hadoop实操(gh_c4c535955d0f),作者:Fayson

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用Hue创建Ssh的Oozie工作流时重定向输出日志报错分析

    Fayson前面的一篇文章讲过《如何在Hue中创建Ssh的Oozie工作流》。但当重定向输出日志时,会出现异常。

    Fayson
  • 如何修改启用了高可用HDFS的NameService ID

    Fayson
  • Hive多分隔符支持示例

    如何将上述事例数据加载到Hive表(multi_delimiter_test)中,表结构如下:

    Fayson
  • 【Hive】ERROR exec.DDLTask: java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nati...

    1/在$HADOOP_HOME/lib/native下面放了2.5.0-native-snappy.tar.gz,这是HDFS存储压缩所需的本地lib包。 c...

    sparkle123
  • hive_异常_01_(未解决)FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.

    单独的 hadoop、hbase 、hive 都是正常的,但是在 hive 整合hbase 时,在 hive中输入以下建表语句,

    shirayner
  • Hive建表异常

    根据错误提示信息可知 : 无法识别第五行内容,说明第五行或第四行语法出了问题 FAILED: ParseException line 5:0 canno...

    时间静止不是简史
  • 【Hive】FAILED: ParseException line 5:2 Failed to recognize predicate 'date'. Failed rule: 'identifier

    该选项的目的是:是否启用对 SQL2011 保留关键字的支持。 启用后,将支持部分 SQL2011 保留关键字。

    黑泽君
  • spark-1.3.0的编译及三种运行模式的配置

    最近安装spark1.3.0并与Hadoop2.5.0集成,在Spark的历史资源管理中心没有找到对应的版本,而且在网上也没有找到对应版本的编译教程,于是只能根...

    z小赵
  • 2019年腾讯云年中钜惠_云服务器99/年

    即日起截止2019年6月20日,腾讯云年中大促2019年活动开始,如果我们有需要购买腾讯云服务器、数据库、云存储,以及短信包、CDN流量包,以及各种云产品的可以...

    用户2416682
  • 迄今为止办公软件我只用它:Microsoft Office

    微软Office一直以来就是办公业的核心生产力,其兼容性好、用户众多,新版更是给大家带来高效的协同办公体验。

    caikaili

扫码关注云+社区

领取腾讯云代金券