Cómo acceder a datos HDFS a través de la red
Hola, código de definición de clase de entidad:
lt; pre name="code" class="java"gt; paquete com.qin.operadb; importar java.io.DataInput
importar java.io.DataOutput;
importar java.io.IOException
importar java.sql.PreparedStatement; /p>
importar java.sql.ResultSet
importar java.sql.SQLException
importar org.apache.hadoop.io.Text
importar org.apache.hadoop.io.Writable;
importar org.apache.hadoop.mapreduce.lib.db.DBWritable
/***
* Encapsular información de entidad de base de datos
* registros
*
* Buscar en el grupo de intercambio de tecnología de big data: 376932160
*
* **/
la clase pública PersonRecoder implementa Writable, DBWritable {
public int id //corresponde al campo de identificación en la base de datos
public String name; //corresponde al campo de nombre en la base de datos
public int age; //corresponde al campo de edad en la base de datos
@Override p>
public void readFields(resultado de ResultSet) lanza SQLException {
this.id=result.getInt(1);
this.name=result.getString(2);
this.age=result.getInt(3);
}
@Override
escritura pública vacía (Stmt de declaración preparada) lanza SQLException {
stmt.setInt(1, id;
stmt.setString(2, nombre
stmt.setInt(3, edad) ;
}
@Override
public void readFields(DataInput arg0) lanza IOException {
// TODO Código auxiliar de método generado automáticamente
this.id=arg0.readInt();
this.name=Text.readString(arg0);
this.age=arg0.readInt(
}
@Anular
pu);
blic void write(Salida de datos) lanza IOException {
// TODO Código auxiliar de método generado automáticamente
out.writeInt(id);
Text.writeString( out, this.name);
out.writeInt(this.age);
}
@Override
public String toString; () {
// TODO Código auxiliar de método generado automáticamente
return "id: " id " Edad: " age " Nombre: " nombre;
}
lt;/pregt;
El código de definición de la clase MR, tenga en cuenta que es un trabajo de solo mapa:
lt; pre nombre="código" clase="java"gt; paquete com.qin.operadb
importar java.io.IOException
importar org.apache.hadoop; .conf.Configuration ;
importar org.apache.hadoop.fs.FileSystem
importar org.apache.hadoop.fs.Path
importar org. .apache.hadoop .io.LongWritable;
importar org.apache.hadoop.io.Text
importar org.apache.hadoop.mapred.JobConf; p>importar org.apache.hadoop.mapred.lib.IdentityReducer
importar org.apache.hadoop.mapreduce.Job
importar org.apache.hadoop.mapreduce.Mapper;
importar org.apache.hadoop.mapreduce.lib.db.DBConfiguration;
importar org.apache.hadoop.mapreduce.lib.db.DBInputFormat; p>import org .apache.hadoop.mapreduce.lib.output.FileOutputFormat;
clase pública ReadMapDB {
/**
* Número de registros de datos leído por trabajo de mapa
*
* **/
La clase estática privada DBMap extiende Mapperlt; LongWritable, PersonRecoder, LongWritable, Textgt;
@Override
mapa vacío protegido (LongWritable k
ey, valor de PersonRecoder, contexto de contexto)
lanza IOException, InterruptedException {
context.write(new LongWritable(value.id), new Text(value.toString()));
}
}
public static void main(String[] args)throws Exception {
JobConf conf=new JobConf(ReadMapDB .class);
//Configuración conf=new Configuración();
// conf.set("mapred.job.tracker", "192.168.75.130:9001") ;
//Lee el campo de datos en persona
// conf.setJar("tt.jar");
//Presta atención a esta línea. de código Colóquelo al frente para la inicialización; de lo contrario, informará
DBConfiguration.configureDB(conf, "com.mysql.jdbc.Driver", "jdbc:mysql://192.168.211.36:3306/ test", "root", "qin");
/**Información del campo a leer**/
Stringfields[]=new String[]{"id" ," nombre", "edad"};
/**Tarea de trabajo**/
Trabajo trabajo=nuevo trabajo(conf, "readDB"); p> System.out.println("Mode: " conf.get("mapred.job.tracker"));
/**Establezca cierta información para el formato de entrada de la base de datos**/
DBInputFormat.setInput(trabajo, PersonRecoder.class, "persona", nulo, "id", campos
/***Establecer formato de entrada*/
trabajo); .setInputFormatClass (DBInputFormat.class);
trabajo.setOutputKeyClass(LongWritable.class);
trabajo.setOutputValueClass(Text.class); (DBMap .class);
String path="hdfs://192.168.75.130:9000/root/outputdb"
FileSystem fs=FileSystem.get(conf); /p >
Ruta p=nueva ruta(ruta);
if(fs.exists(p)){
fs.delete(p, true); p>
System.out.println("¡La ruta de salida existe y ha sido eliminada! ");
}
>FileOutputFormat.setOutputPath(trabajo, p);
System.exit(job.waitForCompletion(true) ? 0: 1
}
}<); /p>