Hadoop裡如何Mysql程式設計

2021-09-22 09:37:12 字數 2596 閱讀 6718

mysql資料庫讀寫

hadoop技術推出一度曾遭到關聯式資料庫研究者的挑釁和批評,認為mapreduce不具有關聯式資料庫中的結構化資料儲存和處理能力。為此,hadoop社群和研究人員做了多的努力,在hadoop0.19版支援mapreduce訪問關聯式資料庫,如:mysql 、mongodb 、postgresql 、oracle 等幾個資料庫系統。hadoop 訪問關聯式資料庫主要通過dbinputformat類實現的,包的位置在 org.apache.hadoop.mapred.lib.db。以 mysql為例來學習 mapreduce讀寫資料。

mysql是乙個關係型資料庫管理系統由瑞典mysql ab 公司開發,目前屬於 oracle 旗下公司。mysql 最流行的關係型資料庫管理系統,在 web 應用方面mysql是最好的 rdbms (relational database management system,關聯式資料庫管理系統) 應用軟體之一。

dbinputformat 在 hadoop 應用程式中通過資料庫**商提供的 jdbc介面來與資料庫進行互動,並且可以使用標準的 sql 來讀取資料庫中的記錄。學習dbinputformat首先必須知道二個條件。

第一、在使用 dbinputformat 之前,必須將要使用的jdbc驅動拷貝到分布式系統各個節點的$hadoop_home/lib/目錄下。

第二、mapreduce訪問關聯式資料庫時,大量頻繁的從mapreduce程式中查詢和讀取資料,這大大的增加了資料庫的訪問負載,因此,dbinputformat介面僅僅適合讀取小資料量的資料,而不適合處理資料倉儲。

提示處理資料倉儲的方法有:利用資料庫的 dump 工具將大量待分析的資料輸出為文字,並上傳到 hdfs 中進行處理。

下面我們來看看 dbinputformat類的內部結構,dbinputformat 類中包含以下三個內建類。

1、protected class dbrecordreader implements recordreader< longwritable, t>:用來從一張資料庫表中讀取一條條元組記錄。

2、public static class nulldbwritable implements dbwritable,writable:主要用來實現 dbwritable 介面。dbwritable介面要實現二個函式,第一是write,第二是readfileds,這二個函式都不難理解,乙個是寫,乙個是讀出所有字段。原型如下:

public void write(preparedstatement statement) throwssqlexception;

public void readfields(resultset result);

3、protected static class dbinputsplit implements inputsplit:主要用來描述輸入元組集合的範圍,包括 start 和 end 兩個屬性,start 用來表示第一條記錄的索引號,end 表示最後一條記錄的索引號。

下面對怎樣使用 dbinputformat 讀取資料庫記錄進行詳細的介紹,具體步驟如下:

步驟一 、配置 jdbc 驅動、資料來源和資料庫訪問的使用者名稱和密碼。**如下。

dbconfiguration.configuredb(job job, stringdriverclass, string dburl, string username, string passwd)

mysql 資料庫的 jdbc 的驅動為「com.mysql.jdbc.driver」,

資料來源為「jdbc:mysql://localhost/testdb」,

其中testdb為訪問的資料庫。usename一般為「root」,passwd是你資料庫的密碼。

步驟二、使用 setinput 方法操作 mysql 中的表,setinput 方法的引數如下。

dbinputformat.setinput(job job, class< extends dbwritable> inputclass, string tablename, string conditions,string orderby, string... fieldnames)

這個方法的引數很容易看懂,inputclass實現dbwritable介面。string tablename表名, conditions表示查詢的條件,orderby表示排序的條件,fieldnames是字段,這相當與把sql語句拆分的結果。當然也可以用sql語句進行過載,**如下。

setinput(job job, class< extends dbwritable> inputclass, string inputquery, stringinputcountquery)。

在virtualbox的centos裡編譯核心

在virtualbox的centos裡編譯核心 記錄一下我搭建linux核心除錯環境的步驟 www.2cto.com 機器 os確定 1.平時工作用的linux環境 ubuntu 12.04.當然你用windows也可以。2.編譯好後的核心最好不要裝在工作機器上,所以我用virtualbox裝了乙個...

Guitar Pro裡的編譜方式怎麼用?

今天來教大家如何使用guitar pro中的編譜方式來讓我們的樂譜更加美觀整齊耐看,我們一起get起來吧!相信我們每乙個人在使用guitar pro進行編曲創作時,都會碰到這種情況,在樂譜上,會看到一些長短不一的豎線,有些人就覺得會影響 體驗感,又或者是樂譜美觀程度。當我們學會使用編譜方式這個功能來...

Hadoop之HDFS的Java客戶端編寫

在使用mapreduce框架進行開發時,總會使用configuration類的乙個例項物件去初始化乙個任務,然後進行任務提交,而在整個任務執行過程中,客戶點例項化的configuration的物件,將作為整個任務過程中引數版本,任務執行過程中所需要的所有引數都是從客戶端例項化的configurati...