Ⅰ 如何使用Hadoop讀寫資料庫
1、選擇開始菜單中→程序→【Management sql Server 2008】→【SQL Server Management Studio】命令,打開【SQL Server Management Studio】窗口,並使用Windows或 SQL Server身份驗證建立連接。
2、在【對象資源管理器】窗口中展開伺服器,然後選擇【資料庫】節點
3、右鍵單擊【資料庫】節點,從彈出來的快捷菜單中選擇【新建資料庫】命令。
4、執行上述操作後,會彈出【新建資料庫】對話框。在對話框、左側有3個選項,分別是【常規】、【選項】和【文件組】。完成這三個選項中的設置會後,就完成了資料庫的創建工作,
5、在【資料庫名稱】文本框中輸入要新建資料庫的名稱。例如,這里以「新建的資料庫」。
6、在【所有者】文本框中輸入新建資料庫的所有者,如sa。根據資料庫的使用情況,選擇啟用或者禁用【使用全文索引】復選框。
7、在【資料庫文件】列表中包括兩行,一行是資料庫文件,而另一行是日記文件。通過單擊下面的【添加】、【刪除】按鈕添加或刪除資料庫文件。
8、切換到【選項頁】、在這里可以設置資料庫的排序規則、恢復模式、兼容級別和其他屬性。
9、切換到【文件組】頁,在這里可以添加或刪除文件組。
完成以上操作後,單擊【確定】按鈕關閉【新建資料庫】對話框。至此「新建的數據」資料庫創建成功。新建的資料庫可以再【對象資源管理器】窗口看到。
Ⅱ 如何使用Hadoop讀寫資料庫
我們的一些應用程序中,常常避免不了要與資料庫進行交互,而在我們的hadoop中,有時候也需要和資料庫進行交互,比如說,數據分析的結果存入資料庫,
或者是,讀取資料庫的信息寫入HDFS上,不過直接使用MapRece操作資料庫,這種情況在現實開發還是比較少,一般我們會採用Sqoop來進行數
據的遷入,遷出,使用Hive分析數據集,大多數情況下,直接使用Hadoop訪問關系型資料庫,可能產生比較大的數據訪問壓力,尤其是在資料庫還是單機
的情況下,情況可能更加糟糕,在集群的模式下壓力會相對少一些。
那麼,今天散仙就來看下,如何直接使用Hadoop1.2.0的MR來讀寫操作資料庫,hadoop的API提供了DBOutputFormat和
DBInputFormat這兩個類,來進行與資料庫交互,除此之外,我們還需要定義一個類似JAVA
Bean的實體類,來與資料庫的每行記錄進行對應,通常這個類要實現Writable和DBWritable介面,來重寫裡面的4個方法以對應獲取每行記
Ⅲ 如何使用Hadoop讀寫資料庫
代碼:
package com.qin.operadb;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.maprece.lib.db.DBWritable;
/***
* 封裝資料庫實體信息
* 的記錄
*
* 搜索大數據技術交流群:376932160
*
* **/
public class PersonRecoder implements Writable,DBWritable {
public int id;//對應資料庫中id欄位
public String name;//對應資料庫中的name欄位
public int age;//對應資料庫中的age欄位
@Override
public void readFields(ResultSet result) throws SQLException {
this.id=result.getInt(1);
this.name=result.getString(2);
this.age=result.getInt(3);
}
@Override
public void write(PreparedStatement stmt) throws SQLException {
stmt.setInt(1, id);
stmt.setString(2, name);
stmt.setInt(3, age);
}
@Override
public void readFields(DataInput arg0) throws IOException {
// TODO Auto-generated method stub
this.id=arg0.readInt();
this.name=Text.readString(arg0);
this.age=arg0.readInt();
}
@Override
public void write(DataOutput out) throws IOException {
// TODO Auto-generated method stub
out.writeInt(id);
Text.writeString(out, this.name);
out.writeInt(this.age);
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "id: "+id+" 年齡: "+age+" 名字:"+name;
}
}
</pre>
MR類的定義代碼,注意是一個Map Only作業:
<pre name="code" class="java">package com.qin.operadb;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.lib.IdentityRecer;
import org.apache.hadoop.maprece.Job;
import org.apache.hadoop.maprece.Mapper;
import org.apache.hadoop.maprece.lib.db.DBConfiguration;
import org.apache.hadoop.maprece.lib.db.DBInputFormat;
import org.apache.hadoop.maprece.lib.output.FileOutputFormat;
public class ReadMapDB {
/**
* Map作業讀取數據記錄數
*
* **/
private static class DBMap extends Mapper<LongWritable, PersonRecoder , LongWritable, Text>{
@Override
protected void map(LongWritable key, PersonRecoder value,Context context)
throws 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);
//Configuration conf=new Configuration();
// conf.set("mapred.job.tracker","192.168.75.130:9001");
//讀取person中的數據欄位
// conf.setJar("tt.jar");
//注意這行代碼放在最前面,進行初始化,否則會報
DBConfiguration.configureDB(conf, "com.mysql.jdbc.Driver", "jdbc:mysql://192.168.211.36:3306/test", "root", "qin");
/**要讀取的欄位信息**/
String fileds[]=new String[]{"id","name","age"};
/**Job任務**/
Job job=new Job(conf, "readDB");
System.out.println("模式: "+conf.get("mapred.job.tracker"));
/**設置資料庫輸入格式的一些信息**/
DBInputFormat.setInput(job, PersonRecoder.class, "person", null, "id", fileds);
/***設置輸入格式*/
job.setInputFormatClass(DBInputFormat.class);
job.setOutputKeyClass(LongWritable.class);
job.setOutputValueClass(Text.class);
job.setMapperClass(DBMap.class);
String path="hdfs://192.168.75.130:9000/root/outputdb";
FileSystem fs=FileSystem.get(conf);
Path p=new Path(path);
if(fs.exists(p)){
fs.delete(p, true);
System.out.println("輸出路徑存在,已刪除!");
}
FileOutputFormat.setOutputPath(job,p );
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}