0
点赞
收藏
分享

微信扫一扫

在Kerberos环境使用Hue通过Oozie执行Sqoop作业报错异常分析

zhyuzh3d 2022-10-19 阅读 57

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


Fayson的github:https://github.com/fayson/cdhproject


提示:代码块部分可以左右滑动查看噢


1.问题描述



关于Sqoop抽取Hive Parquet表数据到MySQL可以参考Fayson前面的文章《​​Sqoop抽取Hive Parquet表数据到MySQL异常分析​​》。


在命令行执行Sqoop抽取Hive Parquet表数据到MySQL正常运行,但在Hue中通过Oozie执行Sqoop抽数失败。


Sqoop抽数脚本:


sqoop export \
--connect jdbc:mysql://ip-172-31-22-86.ap-southeast-1.compute.internal:3306/test_db \
--username testuser \
--password password \
--table mytest_parquet \
--hcatalog-database default \
--hcatalog-table mytest_parquet --num-mappers 1


异常信息如下,提示:代码块部分可以左右滑动查看噢


2017-12-28 11:17:40,871 [main] WARN  org.apache.hadoop.security.UserGroupInformation  - PriviledgedActionException as:fayson (auth:SIMPLE) cause:org.apache.hadoop.ipc.RemoteException(java.io.IOException): Delegation Token can be issued only with kerberos or web authentication
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getDelegationToken(FSNamesystem.java:7498)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getDelegationToken(NameNodeRpcServer.java:548)
at org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.getDelegationToken(AuthorizationProviderProxyClientProtocol.java:663)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getDelegationToken(ClientNamenodeProtocolServerSideTranslatorPB.java:981)
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:617)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1073)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2220)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2216)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1920)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2214)
<<< Invocation of Sqoop command completed <<<


在Kerberos环境使用Hue通过Oozie执行Sqoop作业报错异常分析_sqoop


2.解决方法



在Kerberos环境下使用Oozie创建Sqoop抽取Hive表数据到MySQL的Action时出现“Delegation Token”异常,是一个已知的Bug,目前还没有修改,具体描述​​https://issues.apache.org/jira/browse/SQOOP-3177​​,可以使用如下替代方案实现:


1.如果使用的Hive中的parquet文件复制生成一份txt文件,使用如下命令进行Sqoop抽数


sqoop export \
--connect jdbc:mysql://ip-172-31-22-86.ap-southeast-1.compute.internal:3306/test_db \
--username testuser \
--password password \
--table mytest_parquet \
--export-dir /data/mytest \
--num-mappers 1 \
--input-fields-terminated-by @


2.编写Shell脚本,通过创建Ssh Action的Oozie工作流实现


[fayson@ip-172-31-22-86 ~]$ vim ssh-action.sh 
#!/bin/bashkinit -kt fayson.keytab faysonsqoop export \
--connect jdbc:mysql://ip-172-31-22-86.ap-southeast-1.compute.internal:3306/test_db \
--username testuser \
--password password \
--table mytest_parquet \
--hcatalog-database default \
--hcatalog-table mytest_parquet \
--num-mappers 1


在Kerberos环境使用Hue通过Oozie执行Sqoop作业报错异常分析_apache_02


创建Ssh Action的Oozie工作流


在Kerberos环境使用Hue通过Oozie执行Sqoop作业报错异常分析_apache_03


提交Oozie工作流运行


在Kerberos环境使用Hue通过Oozie执行Sqoop作业报错异常分析_hadoop_04


查看MySQL中数据


在Kerberos环境使用Hue通过Oozie执行Sqoop作业报错异常分析_hadoop_05


3.总结



  • 在Kerberos环境下使用Oozie创建Sqoop抽取Hive表数据或抽数到Hive表会出现“delegation tokens”异常,目前是一个已知的Bug,具体参考:​​https://issues.apache.org/jira/browse/SQOOP-3177​​
  • 可以将Hive中的parquet文件复制生成一份txt文件,抽数时指定export-dir和input-fields-terminated-by参数,注意Sqoop目前不支持多分隔符。
  • 推荐将Sqoop抽数脚本封装在Shell脚本中,通过Hue创建Ssh Action的Oozie工作流来执行Sqoop作业。



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

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



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

在Kerberos环境使用Hue通过Oozie执行Sqoop作业报错异常分析_apache_06

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


举报

相关推荐

0 条评论