Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menyimpan Output Data Apache Hadoop ke Database Mysql

Contoh yang bagus ditampilkan di blog ini , saya mencobanya dan itu berjalan dengan sangat baik. Saya mengutip bagian terpenting dari kode.

Pada awalnya, Anda harus membuat kelas yang mewakili data yang ingin Anda simpan. Kelas harus mengimplementasikan antarmuka DBWritable:

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);
   }
}

Buat objek dari kelas yang ditentukan sebelumnya di Peredam Anda:

public class Reduce extends Reducer<Text, IntWritable, DBOutputWritable, NullWritable> {

   protected void reduce(Text key, Iterable<IntWritable> values, Context ctx) {
     int sum = 0;

     for(IntWritable value : values) {
       sum += value.get();
     }

     try {
       ctx.write(new DBOutputWritable(key.toString(), sum), NullWritable.get());
     } catch(IOException e) {
       e.printStackTrace();
     } catch(InterruptedException e) {
       e.printStackTrace();
     }
   }
}

Terakhir, Anda harus mengonfigurasi koneksi ke DB Anda (jangan lupa menambahkan konektor db Anda di classpath) dan mendaftarkan tipe data input/output mapper dan peredam Anda.

public class Main
{
   public static void main(String[] args) throws Exception
   {
     Configuration conf = new Configuration();
     DBConfiguration.configureDB(conf,
     "com.mysql.jdbc.Driver",   // driver class
     "jdbc:mysql://localhost:3306/testDb", // db url
     "user",    // username
     "password"); //password

     Job job = new Job(conf);
     job.setJarByClass(Main.class);
     job.setMapperClass(Map.class); // your mapper - not shown in this example
     job.setReducerClass(Reduce.class);
     job.setMapOutputKeyClass(Text.class); // your mapper - not shown in this example
     job.setMapOutputValueClass(IntWritable.class); // your mapper - not shown in this example
     job.setOutputKeyClass(DBOutputWritable.class); // reducer's KEYOUT
     job.setOutputValueClass(NullWritable.class);   // reducer's VALUEOUT
     job.setInputFormatClass(...);
     job.setOutputFormatClass(DBOutputFormat.class);

     DBInputFormat.setInput(...);

     DBOutputFormat.setOutput(
     job,
     "output",    // output table name
     new String[] { "name", "count" }   //table columns
     );

     System.exit(job.waitForCompletion(true) ? 0 : 1);
   }
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kursor Loop Prosedur Tersimpan MySql - Kesalahan sintaks

  2. Di PHP, cara menampilkan konten array dalam tabel

  3. Tolak pernyataan MySQL PDO jika nilai tertentu ditemukan di bidang?

  4. SQL Database dengan variabel jumlah kolom

  5. Bagaimana cara mengizinkan string kosong untuk integer di MySQL?