我刚刚开始使用hadoop。我做了一些基本的应用,如word coutnt。但现在我需要在Hadoop,HDFS和Mysql数据库之间传输数据。
我尝试了以下代码但没有正确使用。
DbInputWritable.java
public class DBInputWritable implements Writable, DBWritable
{
private int id;
private String name;
public void readFields(DataInput in) throws IOException { }
public void readFields(ResultSet rs) throws SQLException
//Resultset object represents the data returned from a SQL statement
{
id = rs.getInt(1);
name = rs.getString(2);
}
public void write(DataOutput out) throws IOException { }
public void write(PreparedStatement ps) throws SQLException
{
ps.setInt(1, id);
ps.setString(2, name);
}
public int getId()
{
return id;
}
public String getName()
{
return name;
}
}
DBOutputWritable.java
public class DBOutputWritable implements Writable, DBWritable
{
private String name;
private int count;
public DBOutputWritable(String name, int count)
{
this.name = name;
this.count = count;
}
public void readFields(DataInput in) throws IOException { }
public void readFields(ResultSet rs) throws SQLException
{
name = rs.getString(1);
count = rs.getInt(2);
}
public void write(DataOutput out) throws IOException { }
public void write(PreparedStatement ps) throws SQLException
{
ps.setString(1, name);
ps.setInt(2, count);
}
}
请任何身体帮助。
答案 0 :(得分:1)
我不知道您的代码究竟出了什么问题,但您尝试过Sqoop吗?
Sqoop非常容易将数据从sql数据库导入到hdfs,反之亦然。在hdfs中获得数据后,您不必实现任何自定义输入。
编辑:您不需要与Hadoop集成,只需使用sqoop从mysql数据库加载数据,一旦在hdfs中有数据,就可以编写映射器和缩减器,在作业配置中设置hdfs上文件的路径。您可以关注多个mapreduce教程,只需将要读取的文件更改为先前使用Sqoop导入的文件。
答案 1 :(得分:1)
也许您可以向我们展示异常的详细信息。 你的Hadoop lib中有mysql jdbc驱动吗? 顺便说一句,sqoop是一个非常好的工具,用于在Hadoop和数据库之间传输数据。如果你的dbdata不是很大,你可以使用它。
答案 2 :(得分:0)
答案 3 :(得分:0)
以下是与我的sql数据库连接hadoop的工作示例。它真的有帮助看看:
http://javatute.com/javatute/faces/post/hadoop/2014/connect-mysql-with-hadoop.xhtml