作者:bcz8936810 | 来源:互联网 | 2023-09-17 15:54
hueoozie调度shell执行hive脚本前面已经有篇文章介绍如何编译包含hive的spark-assembly.jar了,不清楚的可以翻看一下前面的文章。clouderama
hue/oozie 调度shell执行hive脚本
前面已经有篇文章介绍如何编译包含hive的spark-assembly.jar了,不清楚的可以翻看一下前面的文章。clouderamanager装好的spark,直接执行spark-shell进入命令行后,写入如下语句:valhiveCOntext=neworg.apache.spark.sql.hive.HiveContext(sc)你会发现没法执行通过,因为cm装的原生的spark是不支持sparkhql的,我们需要手动进行一些调整:第一步,将编译好的包含hive的JAR包上传到hdfs上配置的默认的spark的sharelib目录:/user/spark/share/lib第二步:在你要运行spark-shell脚本的节点上的/opt/cloudera/parcels/CDH-5.3.0-1.cdh5.3.0.p0.30/lib/spark/lib/目录下面,下载这个jar到这个目录:hadoopfs-gethdfs://n1:8020/user/spark/share/lib/spark-assembly-with-hive-maven.jar(具体路径替换成你自己的)。
然后这个目录下面原来会有个软链接spark-assembly.jar指向的是spark-assembly-1.2.0-cdh5.3.0-hadoop2.5.0-cdh5.3.0.jar,我们把这个软链接删除掉重新创建一个同名的软链接:ln-sspark-assembly-with-hive-maven.jarspark-assembly.jar,指向我们刚下载下来的那个JAR包,这个JAR包会在启动spark-shell脚本时装载到driverprogram的classpath中去的,sparkContext也是在driver中创建出来的,所以需要将我们编译的JAR包替换掉原来的spark-assembly.jar包,这样在启动spark-shell的时候,包含hive的spark-assembly就被装载到classpath中去了。
第三步:在/opt/cloudera/parcels/CDH/lib/spark/conf/目录下面创建一个hive-site.xml。/opt/cloudera/parcels/CDH/lib/spark/conf目录是默认的spark的配置目录,当然你可以修改默认配置目录的位置。hive-site.xml内容如下:hive.metastore.localfalsehive.metastore.uristhrift://n1:9083hive.metastore.client.socket.timeout300hive.metastore.warehouse.dir/user/hive/warehouse这个应该大家都懂的,总要让spark找到hive的元数据在哪吧,于是就有了上面一些配置。第四步:修改/opt/cloudera/parcels/CDH/lib/spark/conf/spark-defaults.conf,添加一个属性:spark.yarn.jar=hdfs://n1:8020/user/spark/share/lib/spark-assembly-with-hive-maven.jar。
这个是让每个executor下载到本地然后装载到自己的classpath下面去的,主要是用在yarn-cluster模式。local模式由于driver和executor是同一个进程所以没关系。以上完事之后,运行spark-shell,再输入:valhiveCOntext=neworg.apache.spark.sql.hive.HiveContext(sc)应该就没问题了。
我们再执行一个语句验证一下是不是连接的我们指定的hive元数据库:hiveContext.sql("showtables").take(10)//取前十个表看看最后要重点说明一下这里的第二步第三步和第四步,如果是yarn-cluster模式的话,应该替换掉集群所有节点的spark-assembly.jar集群所有节点的sparkconf目录都需要添加hive-site.xml,每个节点spark-defaults.conf都需要添加spark.yarn.jar=hdfs://n1:8020/user/spark/share/lib/spark-assembly-with-hive-maven.jar。可以写个shell脚本来替换,不然手动一个一个节点去替换也是蛮累的。
oozie的shell节点怎么用
因为楼主是yarn,而文章的版本应该是基于hadoop1.x的oozie的shell action一般用来定义工作流的,监控本地shell?每太明白。
HUE通过oozie调度spark2 程序on yarn的两种方法
chd 5.12.3 hadoop 2.6.0 oozie 4.1.0 spark 2.3.0 spark1(集群自带的可以直接添加jar)做任务调度spark2 需要进行配置后(添加spark2 所需要的jar到oozie 的sharelib中)才能进行调度 详细步骤可以参考: https://blog.csdn.net/worldchinalee/article/details/80594593特别注意事项1: a、spark程序jar包路径,因为jar是传到HDFS上面的,cluster方式提交的时候,jar name栏目需要写jar包再hdfs上面的全路径, 见上图方框中内容。 b、需改集群oozie配置项 Spark on Yarn 服务 改为 none ,默认是 yarn。
不然运行时候会报错。
e.g hdfs://nameserviceHa/user/hue/oozie/workspaces/hue-oozie-1505120868.97/spark-examples_2.11-2.3.0.cloudera2.jar特别注意事项2:运行spark程序时候,oozie自动默认spark。需要通过配置参数 oozie.action.sharelib.for.spark 设置为spark2,指定运spark时候添加的jar包为spark2.。 小伙伴会疑问为社么直接通过通过shell小组件调用shell脚本? shell组件的中的shell脚本不支持交互是查询。ssh远程命令不支持,如果spark环境不在oozie组件的主机上,此方法行不通。
*********************************下面重点介绍怎么通过ssh远程执行shell命令*********************************** 使用oozie提供的小组件现在有几个问题需要解决: 1、oozie调度时候使用的是oozie账户,当你执行ssh时候发现回报登陆错误。解决办法配置免密 2、怎么配置免密 su oozie 的时候报以下提示,因为chd生成的用户名问题,本人再这里花费了很多时间处理此问题。 This account is currently not available. 解决办法:使用sudo -u oozie 命令执行免密登陆设置 sudo -u oozie ssh-keygen 生成秘钥 cat /var/lib/oozie/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys (写入的是你需要免密的服务器,这里展示的是本机写法) 验证免密登录 到这里,你就可以随心所欲的书写脚本,并存到再服务器。
通过oozie ssh远程执行此脚本,以此达到调度的效果。
如何让Android系统或Android应用执行shell脚本
and
如何运行shell脚本?
编写好的shell脚本(如:test),可以采取两种方式进行运行:一、 $ sh test一般不采用这种调用方式,尤其不采用“sh二、直接运行可执行的shell脚本之前,首先应使用下列chmod命令,把shell脚本文件设置为可执行的文件。
chmod 755 test(除文件属主可写之外,每个用户均具有读和可执行的访问权限)chmod +rx test(同上)chmod u+rx test(只有文件属主具有读和执行的访问权限)按照上述要求设置shell脚本文件的访问权限后,可采用下列方式,直接运行shell脚本了。1、test(如果命令检索路径包含当前目录)2、./test(如果命令减缩路径不包含当前目录)*说明: sh test 方式调用一个shell叫蹦可能会禁止某些shell特定的扩展功能,因而可能引起脚本无法正确执行。