Hadoop開發常用的API彙總

HDFS JAVA API(version 2.7.3)

HDFS 分佈式文件系統JAVA API。與local的java 文件系統的API類似。

Name Description
org.apache.hadoop.conf.configuration hadoop中java API使用最多的一個類,很多其他類會使用到配置文件,該類的實例代表內存中的配置文件.提供操作配置文件的方法。存儲在配置文件中寫入的鍵值對。一般使用構造函數構造實例即可,Configuration conf = new Configuration() 其他操作參數的API使用不多。
org.apache.hadoop.fs.FileSystem 文件系統中的抽象基類,HDFS對其實現爲DistributedFileSystem代表整個文件系統。抽象類中提供兩個方法open用於創建一個輸入流FSDataInputStream,同樣是一個抽象基類,其HDFS的實現爲DFSInputStream。create用於創建一個輸出流FSDataOutputStream。在HDFS中對於輸出流的實現是DFSOutputStream。凡是需要使用到HDFS的讀寫都要使用這個抽象基類的實現。這個抽象基類還可以作爲本地文件系統實現。作爲本地文件系統實現的類是LocalFileSystem。重要方法copyFromLocalFile從本地拷貝文件到系統中。create創建新的文件,並且返回一個輸出流。delete刪除文件,可以遞歸刪除文件夾中的內容。exists檢測path中的內容是否存在。get方法,比較重要的方法,本身FileSystem是抽象的類,不可以實例化,get方法是FileSystem中存在的一個抽象的方法,返回FileSystem的實例,之後就可以用這個實例完成分佈式文件系統的所有操作。這個方法一般是作爲第一個調用的方法。get(Uri(可選),Configuration(org.apache.hadoop.conf.Configuration),user(可選))Uri這個變量用於指定實際訪問的機器。分佈式場景中使用FileSystem需要指定操作的文件系統。如果不指定會在本機的文件系統中去操作文件,所以Uri在此處是比較重要的變量。getStatus 返回一個FsStatus實例表徵文件系統的空間以及使用量。參數Path代表分區,爲空或者不寫則是表示根分區的使用量以及容量。容易與FileStatus搞混。一般調用方法getCapacity() and getUsed().listStatus返回一個FileStatus的Array。表徵文件夾下的所有內容(文件或者子文件夾)的狀態。操作對象爲文件夾,非文件夾返回本身代表的FileStatus.該函數可以接收的參數類型比較多。Path與Path[] 區別在於path獲取的是path內部的內容轉換爲FileStatus。而Path[]將這個list內容轉換爲FileStatus[]。兩種調用都可以添加Filter進行過濾。isDirectory isFile後面接Path用於判斷給定Path是文件還是文件夾。mkdirs(path)創建目錄。rename(pathsrc,pathdst)改變path可以理解爲在文件系統中移動文件
org.apache.hadoop.fs.FSDataInputStream 文件輸入流的抽象基類
org.apache.hadoop.fs.FSDataOutputStream 文件輸出流的抽象基類
org.apache.hadoop.fs.Path 表徵文件系統中的文件或者文件夾路徑的實例,純粹路徑沒有其他功能,基本上FileSystem的方法中都有傳遞這個參數
org.apache.hadoop.fs.FileStatus 提供文件系統中的詳細信息。反應文件組路徑,大小擁有者等文件相關信息,但是不提供返回讀寫流的方法。所以需要藉助於FileSystem類提供的方法完成文件的讀寫操作。
org.apache.hadoop.fs.FsStatus 文件代表文件系統的空間以及使用量,有getCapacity和getUsed方法調用
java.net.URI URI類在hadoop文件系統中用於指定文件系統的模式,在創建FileSystem實例的時候需要用URI指定這個文件系統實例實際對應集羣中的某一臺機器。URI.create(Schema)

綜上所述。HDF HAVA操作的API主要是圍繞FileSystem抽象基類展開。get用於創建實例。需要用URI指定系統的schema以及Configuration配置實例。文件創建使用create返回一個FSDataOutputStream 文件打開使用Open返回FSDataInputStream。返回的都是抽象類在具體系統的實現。FileStatus用是文件的狀態抽象。

HBASE JAVA API(version 1.2.4)

HBASE JAVA API

Name Description
org.apache.hadoop.hbase.HBaseConfiguration HBase使用的Configuration對象,同樣表示HBase的配置文件。創建方式略微不同使用靜態的create()方法創建。因爲HBaseConfiguration繼承自Configuration所以返回類型可以是Configuration
org.apache.hadoop.hbase.HTableDescriptor HBase中table的抽象描述,定義了整個HBase表的結構。主要用於在創建表的時候決定表的schema.addFamily(HColumnDescriptor)添加列族,removeFamily(HColumnDescriptor)移除列族.方法中傳遞參數爲byte[]型.setName/getName設置與返回表名字,getFamilies()獲取列族名字構成的一個set.返回類型爲Set byte[].創建的時候使用new 調用構造函數創建,不過方法被捨棄了
org.apache.hadoop.hbase.client.HBaseAdmin 用於管理HBase中表的信息,包括表的創建createTable(HTableDescriptor),表的是能disableTable/enableTable(tablename)以及表的刪除deleteTable(String tablename)或者是表的擴展,爲表項添加新的列族等
org.apache.hadoop.hbase.client.HTable 客戶端內存中用於與HBase表進行通信,CRUD操作是在HTable上進行的本身具有緩衝區,不適合於在多線程的應用場景中,多線程應用場景可能導致緩衝區溢出,所以多線程情況下使用HBasePool,即是HBase的鏈接池。常用方法:close()刷新緩衝區,將緩衝區內容刷入HBase數據庫中.HTable中沒有提供update這樣的方法,本來HBase數據庫單元中存儲數據就有多個版本,沒有比較使用update函數,本身任何單元數據的改變都會被記錄,而且針對於NoSql,update的意義本來就不大。delete(Delete item)刪除內容,get(Get get)查詢單元格內容,put(Put put)插入內容。exists(Get get)內容是否存在。getScanner(**)更廣的一個查詢方式,返回的是ResultScanner。get這樣的API需要指定查詢的行號,所以查詢範圍更加的限定。getTableDescriptor()返回HTableDescriptor。創建時用new 構造函數創建,不過還是被捨棄了
org.apache.hadoop.hbase.HColumnDescriptor 列族的描述,類比於HTableDescriptor.構建關於列的描述,常用方法是getName獲取列族名稱,setValue以及getValue
org.apache.hadoop.hbase.client.Put 執行單元格數據的添加操作,主要是指定列族與列限定符號,將數據封裝如Put裏面進行數據庫插入,主要是使用Put中的add方法添加限定的查詢信息
org.apache.hadoop.hbase.client.Get 與Put類似,Get用於獲取Hbase數據庫中的單行的信息.主要方法是addColumn()添加列族以及列限定符號的信息,用於查詢
org.apache.hadoop.hbase.client.Result 返回Get或者Scan操作後的結果,存儲爲鍵值對
org.apache.hadoop.hbase.client.Scan 用於限定要查找的數據,比Get使用更加靈活,可以限定查詢行號的範圍,而Get不具備這種功能
org.apache.hadoop.hbase.client.ResultScanner 本質上爲一個迭代器,調用next返回下一個Result對象,表示的是一系列的查詢結果
org.apache.hadoop.client.Connection 鏈接對象,使用ConnectionFactory.createConnection()創建,用於構建操作數據庫的HBaseAdmin
org.apache.hadoop.client.ConnectionFactory 構建Connection對象,表徵與數據庫的鏈接,後續用於創建操作數據庫的HBaseAdmin
org.apache.hadoop.habse.client.Cell HBase返回的Result中的數據單元,通過rawCells返回數據單元格的一個list
org.apache.hadoop.hbase.client.CellUtil 數據庫單元操作工具,主要用於拷貝單元數據

綜上所述。Hbase的API調用比HDFS的多。基本的類型是HBaseConfiguration用於構建配置文件的實例,與表的Schema相關的爲HTableDescriptor以及HColumnDescriptor還有HBaseAdmin。構建Connection是每一步必須有的操作。

Connection con = ConnectionFactory.createConnection(configuration);
HBaseAdmin admin = (HBaseAdmin)con.getAdmin();
HTable table = (HTable)con.getTable(TableName.valueOf(name));

後續的數據庫的增刪改查操作可以在獲得的table對象上進行。

MAPREDUCE JAVA API(version 2.7.3)

MR 的JAVA API

Name Description
org.apache.hadoop.mapreduce.Mapper Mapper類,編寫hadoop mr程序的Map過程時候需要繼承這一個類實現其中的map方法。
org.apache.hadoop.mapreduce.Reducer Reducer類,編寫Hadoop mr程序的Reduce過程時候需繼承的一個類,需要實現其中的reduce方法
org.apache.hadoop.mapreduce.Mapper.Context 用於將Map產生的結果當中間值輸出,一般是輸出key/value值
org.apache.hadoop.mapreduce.Reducer.Context 同Mapper.Context。將Reducer處理的結果進行輸出
org.apache.hadoop.io.Text 可以理解爲Hadoop中專門處理字符串的類型
org.apache.hadoop.io.IntWritable 可以理解爲hadoop中專門處理整數的類型
org.apache.hadoop.mapreduce.Job 這個類也是Hadoop mr中非常重要的類型。用於定義任務以及提交任務到Hadoop mr集羣處理。setJarClass()設置main函數所在的類,程序入口。setInputFormatClass()設置輸入類型的類,setOutputFormatClass()設置輸出類型的類。setMapOutputKeyClass()設置Map處理輸出的鍵類型,setMapOutputValueClass()設置Map處理輸出的值類型,setOutputKeyClass()設置reduce輸出的key類型,setOutputValueClass()設置reduce輸出的value類型。waitForCompletion()提交任務運行。
org.apache.hadoop.hbase.mapreduce.TableReducer 故名思意,當MR 的reduce處理結果需要放置在HBase中的時候,那麼Reduce應該從這個類型繼承

核心是編寫繼承的Mapper類與Reducer類,以及Job實例完成類型設置,提交任務運行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章