【问题标题】:Exception while inserting connecting to database in hadoop mapreduce job在 hadoop mapreduce 作业中插入连接到数据库时出现异常
【发布时间】:2015-01-30 21:52:32
【问题描述】:

我有一个 mapreduce 作业,假设将数据持久化到 MySQL 数据库,但它引发了以下异常,

 INFO mapred.JobClient: Task Id : attempt_201501122044_1310_r_000001_0, Status : FAILED
 java.io.IOException  at org.apache.hadoop.mapreduce.lib.db.DBOutputFormat.getRecordWriter(DBOutputFormat.java:180)
    at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:597)
    at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:444)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1642)
    at org.apache.hadoop.mapred.Child.main(Child.java:262)

这个 mapreduce 作业在 5 个节点的集群上运行,我已经确认通过使用 sql 连接创建测试简单的主类来形成数据库连接。

我被困在这一点上。

【问题讨论】:

  • 您的 MySQL 是否允许来自所有工作节点的连接,您是否能够测试来自所有工作节点的 mysql 连接?
  • 是的...我确认每个节点都可以访问数据库。

标签: java mysql hadoop mapreduce


【解决方案1】:

这是一个权限问题:注意 UserGroupInformation 已标记:

    `at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:164`2)

什么样的安全问题?从 Stacktrace 中并不清楚。您的代码是否在执行任何 HDFS?或者还有什么会触发安全检查?

【讨论】:

  • 代码从 hdfs 目录读取结构化数据并应用 map reduce 作业并将数据持久化到 mysql 数据库。
  • 您需要更仔细地查看发生异常的特定时刻发生的情况:您的评论表明您不清楚这一点。你可以从 hdfs 和 yarn 开始:确保访问 hdfs 和运行 yarn 的用户对本地临时目录具有写权限,并且没有使用 mysql 用户访问 hdfs(会出错)。
猜你喜欢
  • 2014-05-10
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多