从oozie传递用户名和密码到sqoop meta连接 [英] pass username and password to sqoop meta connect from oozie

查看:85
本文介绍了从oozie传递用户名和密码到sqoop meta连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

<sqoop xmlns="uri:oozie:sqoop-action:0.3">
  <job-tracker>${jobTracker}</job-tracker>
    <name-node>${nameNode}</name-node>
      <arg>job</arg>
      <arg>--meta-connect</arg>
      <arg>jdbc:mysql://FQDN:3306/sqoop</arg>
      <arg>--exec</arg>
      <arg>fabric_inventory</arg>
</sqoop>

现在,在此处传递--meta-connect的用户名和密码,

Now, to pass username and password for the --meta-connect here,

如果我在oozie.xml中按以下方式通过它:

if I pass it as following in oozie.xml:

<arg>jdbc:mysql://FQDN:3306/sqoop?user=sqoop&amp;password=sqoop</arg>

<arg>jdbc:mysql://FQDN:3306/sqoop?user=sqoop&password=sqoop</arg>

它给出以下异常:

遇到IOException正在运行导入作业:java.io.IOException:没有要为ClassWriter生成的列 2.它不需要

Encountered IOException running import job: java.io.IOException: No columns to generate for ClassWriter 2. it does not take

--username and --password prop and val in arg tag.

如何以正确的方式传递值?

How do I pass the values in the correct manner?

这是完整异常的样子:

2016-05-11 10:21:44,920 ERROR [main] tool.ImportTool (ImportTool.java:run(613)) - Encountered IOException running import job: java.io.IOException: No columns to generate for ClassWriter
    at org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1651)
    at org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:107)
    at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:478)
    at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:605)
    at org.apache.sqoop.tool.JobTool.execJob(JobTool.java:228)
    at org.apache.sqoop.tool.JobTool.run(JobTool.java:283)
    at org.apache.sqoop.Sqoop.run(Sqoop.java:148)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
    at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:184)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:226)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:235)
    at org.apache.sqoop.Sqoop.main(Sqoop.java:244)
    at org.apache.oozie.action.hadoop.SqoopMain.runSqoopJob(SqoopMain.java:197)
    at org.apache.oozie.action.hadoop.SqoopMain.run(SqoopMain.java:177)
    at org.apache.oozie.action.hadoop.LauncherMain.run(LauncherMain.java:47)
    at org.apache.oozie.action.hadoop.SqoopMain.main(SqoopMain.java:46)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:241)
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
    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:1657)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)

推荐答案

如果您曾经解决过Sqoop 1 和Sqoop 2 之间的混淆,那么您将不得不也跳过Oozie障碍.

If you ever sort out the confusion between Sqoop1 and Sqoop2, then you will have to jump over the Oozie hurdle too.

我的建议:停止使用命令行参数,而使用标准的Hadoop配置文件.

My advice: stop toying with command-line arguments and use standard Hadoop config files.

1..在网关节点上(用于单元测试),编辑/etc/sqoop/conf/sqoop-site.xml以设置客户端属性

1. On your Gateway node (for unit tests), edit /etc/sqoop/conf/sqoop-site.xml to set Client properties

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <!-- some stuff here that does not matter for Metastore -->
  ...

  <!-- now the Metastore config -->
  <property>
    <name>sqoop.metastore.client.enable.autoconnect</name>
    <value>true</value>
  </property>
  <property>
    <name>sqoop.metastore.client.autoconnect.url</name>
    <value>jdbc:hsqldb:hsql://FQDN:16000/sqoop</value>
  </property>
  <property>
    <name>sqoop.metastore.client.autoconnect.username</name>
    <value>sa</value>
  </property>
  <property>
    <name>sqoop.metastore.client.autoconnect.password</name>
    <value></value>
  </property>
  <property>
    <name>sqoop.metastore.client.record.password</name>
    <value>false</value>
  </property>
</configuration>

1b..将该文件上传到某处的HDFS(用于Oozie作业)

1b. Upload that file to HDFS somewhere (for use with Oozie jobs)

2..在将实际运行全局Metastore DB的节点上,还编辑文件,并添加两个额外的Server属性(在本示例中,数据库文件存储在/var/lib/...)

2. On the node that will actually run the global Metastore DB, also edit the file, and also add two extra Server properties (in this example the DB files are stored in /var/lib/...)

  <property>
     <name>sqoop.metastore.server.port</name> 
     <value>16000</value> 
  </property>
  <property>
     <name>sqoop.metastore.server.location</name> 
     <value>/var/lib/sqoop/data/shared.db</value> 
  </property>

2b..请确保您不时检查该数据库(以重置脚本"文件并刷新重做日志"文件),然后备份脚本"文件作为当前数据库状态的快照,放在安全的地方,以防丢失节点及其磁盘-是的,这些事情会发生

2b. Make sure you CHECKPOINT that database from time to time (to reset the "script" file and flush the "redo log" file) then backup the "script" file as a snapshot of the current DB state, somewhere safe, in case you lose the node and its disk -- yes, these things happen

3..在您的Oozie Sqoop操作中,使用针对HDFS中配置文件的<job-xml>条目设置客户端属性.

3. In your Oozie Sqoop actions, set the Client properties with a <job-xml> entry targeting the config file in HDFS.

如果您对处理这些道具和Metastore客户端的实际Sqoop源代码感兴趣,请查看

If you are interested in the actual Sqoop source code that handles these props and the Metastore client, look there

这篇关于从oozie传递用户名和密码到sqoop meta连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆