专栏首页Hadoop实操在Kerberos环境使用Hue通过Oozie执行Sqoop作业报错异常分析

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

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 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 <<<

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/bash
kinit -kt fayson.keytab fayson

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

创建Ssh Action的Oozie工作流

提交Oozie工作流运行

查看MySQL中数据

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干货,欢迎转发和分享。

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

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

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

原始发表时间:2017-12-31

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 0524-6.1-如何使用Cloudera Manager启用HDFS的HA

    在HDFS集群中NameNode存在单点故障(SPOF),对于只有一个NameNode的集群,如果NameNode机器出现意外,将导致整个集群无法使用。为了解决...

    Fayson
  • JournalNode的edits目录没有格式化异常分析

    我们有时候通过CM启动NameNode的HA时,反正就是不知道什么原因,失败了,为了不影响集群的使用,又会通过CM把HA先取消掉。然后过了两天,又想作为一个生产...

    Fayson
  • Yarn的JobHistory目录权限问题导致MapReduce作业异常

    0: jdbc:hive2://localhost:10000>select count(*) from student;

    Fayson
  • Flink 连接 hive 解决 java.net.UnknownHostException

    今天在实验 Flink 连接 hive 的操作,由于 CDH 的 hadoop 是 HA,连接过程中报错如下:

    shengjk1
  • hadoop2.6分布式部署时 livenodes等于1的原因

    1.问题描述 在进行hadoop2.x版本的hdfs分布式部署时,遇到了一个奇怪的问题: 使用start-dfs.sh命令启动dfs之后,所有的datanode...

    老白
  • Sqoop导入数据时异常java.net.ConnectException: Connection refused

    java.net.ConnectException: Call From node4/192.168.179.143 to node4:8032 failed ...

    时间静止不是简史
  • Hadoop ha之Journal Storage Directory nor formatted

        情况是这样的,Hadoop ha下,集群QJM的数据丢了,之后启动namenode后报Journal Storage Directory nor for...

    克虏伯
  • Amabri hive权限设置

    DataScience
  • 0524-6.1-如何使用Cloudera Manager启用HDFS的HA

    在HDFS集群中NameNode存在单点故障(SPOF),对于只有一个NameNode的集群,如果NameNode机器出现意外,将导致整个集群无法使用。为了解决...

    Fayson
  • java客户端无法上传文件到hdfs

    学些hadoop。遇到这个问题,查找网上好多资料,一般都是说namenode和datanode不同步导致的,或者防火墙没开50010端口,或者nameNode和...

    frontoldman

扫码关注云+社区

领取腾讯云代金券