温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 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.总结
为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操