版本說明:
通過 HDP 3.0.1 安裝的 HBase 2.0.0
HBase 本身提供了很多種數據導入的方式,目前常用的有三種常用方式:
前兩種方式:需要頻繁的與數據所存儲的 RegionServer 通信,一次性導入大量數據時,可能占用大量 Regionserver 資源,影響存儲在該 Regionserver 上其他表的查詢。
第三種方式:了解過 HBase 底層原理的應該都知道,HBase 在 HDFS 中是以 HFile 文件結構存儲的,一個比較高效便捷的方法就是先生成 HFile,再將生成的 HFile 加載到正在運行的 HBase 中。即使用 HBase 提供的 HFileOutputFormat2 類或者 importtsv 工具來完成上述操作。
經過對比得知:如果數據量很大的情況下,使用第三種方式(Bulk Load)更好。占用更少的 CPU 和網絡資源就實現了大數據量的導入。本篇文章也將主要介紹 Bulk Load 方式。
Bulk Load 方式之所以高效,是因為繞過了正常寫數據的路徑(WAL、MemStore、flush)。總的來說,Bulk Load 方式使用 MapReduce 作業以 HBase 的內部數據格式輸出表數據,然后直接將生成的 HFiles 加載到正在運行的 HBase 中。與僅使用 HBase API 相比,使用 Bulk Load 方式不占用 Region 資源,不會產生巨量的寫入 I/O,將使用更少的 CPU 和網絡資源。
HBase Bulk Load 過程包括兩個主要步驟:
流程如下圖所示:
3.1 將準備的數據生成HFile
將數據生成 HFile,有兩種方式,分別是:
本篇文章主要還是講解下 importtsv 工具的使用,編寫 MapReduce 程序在本篇不擴展,后續文章會有補充。
importtsv 是一個實用工具,它將 TSV 格式的數據加載到 HBase 中。它有兩種用法,分別為:
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=a,b,c <tablename> <hdfs-inputdir>
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=a,b,c -Dimporttsv.bulk.output=hdfs://storefile-outputdir <tablename> <hdfs-data-inputdir>
注意:使用 importtsv -Dimporttsv.bulk.output 選項時,如果目標表尚不存在,則將使用默認列族描述符創建目標表。如果準備了大量數據要進行Bulk Load,請確保對目標 HBase 表進行適當的預分區,也就是預先創建多個 Region ,避免熱點與數據傾斜問題。
importtsv 可以使用 -D 指定的其他選項,以下列舉了11條:
盡管 importtsv 工具在許多情況下很有用,但高級用戶可能希望以編程方式生成數據,或使用其他格式導入數據。如果有這樣的需求,請深入了解 ImportTsv.java 和 HFileOutputFormat 的 JavaDoc ,修改源碼進行實現。
3.2 完成數據加載,將HFile加載到HBase中
completebulkload 工具用于將數據導入正在運行的 HBase 中。此命令行工具遍歷準備好的數據文件(HFile),確定每個 HFile 所屬的 Region,然后聯系相應的 RegionServer 將 HFile 移入其存儲目錄并將數據供客戶端使用。
如果在 Bulk Load 準備過程中或在準備和完成步驟之間 Region 邊界已更改,則 completebulkload 工具會自動將 HFile 拆分為與新邊界對應的部分。此過程效率不高,因此用戶應盡量減少 準備 HFile 與 將 HFile 加載到 HBase 中 這兩步驟之間的時間延遲,尤其是在其他客戶端通過其他方式同時加載數據時也要注意。
將 HFile 加載到 HBase 中有兩種方式:
hbase org.apache.hadoop.hbase.tool.LoadIncrementalHFiles <hdfs://storefileoutput> <tablename>
export HBASE_HOME=/usr/hdp/{hdp-version}/hbase HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath` ${HADOOP_HOME}/bin/hadoop jar ${HBASE_HOME}/lib/hbase-mapreduce-{version}.jar completebulkload <hdfs://storefileoutput> <tablename>
說一下我的運行環境:CentOS-7,1個 HBase Master,3個 RegionServer,三臺機器均是 8G 內存。
4.1 創建表的同時創建10個分區
create 'default:people', {NAME=>'basic_info'}, {NAME=>'other_info'}, SPLITS=>['10|','20|','30|','40|','50|','60|','70|','80|','90|']
創建的 people 表如下所示:
4.2 準備數據源并上傳到HDFS
用 Python 生成了10萬條測試數據并存到了 hbase_data.txt 中,一共7.32M,現在將該文件上傳到 HDFS 中:
sudo -u hdfs hdfs dfs -put /tmp/hbase_data.txt /tmp
測試數據是我用python寫的,有詳細的說明和源碼,詳情點擊:Python生成HBase測試數據說明 。
4.3 通過importtsv工具生成HFile文件
使用 importtsv 工具生成 HFile 文件,執行如下命令:
sudo -u hdfs hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns='HBASE_ROW_KEY,basic_info:name,basic_info:age,basic_info:sex,basic_info:edu,other_info:telPhone,other_info:email,other_info:country' -Dimporttsv.bulk.output=/tmp/people/output people /tmp/hbase_data.txt
請確保執行該命令的用戶有相應的權限。后臺會觸發一個 MapReduce 任務,由于表中創建了 10 個 Region,所以觸發的任務內有 1 個 map,10 個 reduce,該任務一共執行了2分45秒。
4.4 將HFile數據加載到HBase中
兩種方式:
sudo -u hdfs hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /tmp/people/output people
執行上述語句總時長大約26秒。
export HBASE_HOME=/usr/hdp/3.0.1.0-187/hbase sudo -u hdfs HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath` ${HADOOP_HOME}/bin/hadoop jar ${HBASE_HOME}/lib/hbase-mapreduce-2.0.0.3.0.1.0-187.jar completebulkload /tmp/people/output people
小結:上述兩種方式均可以實現將 HFile 數據導入到 HBase 中,其原理就是將 HFile 移動到 HBase 表的對應目錄下存儲。
在 hbase shell 里執行 scan ‘people’ ,將所有數據讀取一遍,我們再通過 HBase Web UI ,查看 people 表的各 region 的詳細情況。如下圖所示:
由表分析可知,10萬條 數據 較均勻地 分配到了 10 個 Region 中。自此,數據批量導入到 HBase 中完畢!
參考的 HBase 官網:
在使用 importtsv 工具時,一定要注意參數 -Dimporttsv.bulk.output 的配置。通常來說使用 Bulk Load Data 的方式對 RegionServer 來說更加友好一些,這種方式加載數據幾乎不占用 RegionServer 的計算資源,因為只是在 HDFS上 移動了 HFile 文件,然后通知 HMaster 將該 RegionServer 的一個或多個 Region 上線。
另外在進行 Bulk Load 時,也需要確保執行用戶在HDFS上有相應的權限。
我將 HBase 數據導入常用的三種方式進行了總結,其中著重說明了一下 Bulk Load 方式,如下圖所示:
--END--
碼字不易,如果您覺得文章寫得不錯,請關注作者~ 您的關注是我寫作的最大動力
友情提示:原文排版精美,可點擊分享鏈接查看。
碼字不易,如果感覺本文對您有幫助,請點贊或訂閱支持一下,您的支持是我堅持寫作最大的動力,謝謝!
indle 憑著電子墨水屏的先天優勢,在一眾電子設備中擁有更舒適的閱讀體驗,但僅僅依靠設備內置的 Amazon Kindle 電子書書店,在書籍資源方面似乎顯得單薄。
秉承無版權糾紛的原則下,我搜集了一些電子書資源站點,整理它們各自的電子書資源特點,以及電子書格式轉換和書本推送至 Kindle 設備的操作技巧,希望能夠豐富大家獲取電子書資源的途徑,真正做到為電子書書架「添磚加瓦」。
書格 是一個自由開放的數字古籍圖書館,專注于不同類型古書籍的保護與文化藝術作品數字化傳播,網站創建于 2013 年,最早起源是豆瓣用戶 未曾 在 2012 年建立的 PDF 小站。網站收錄資源的首要準則是限定為公共版權領域的書籍,分享的書籍資源來源于世界各個圖書館或機構的公開內容。由于書格分享的書籍大多圖文較多,所以暫時只發布 PDF 格式的文件。
書格提倡開放式共享資源,無須用戶注冊即可瀏覽下載網站的任何資源,用戶可以在 站內搜索 查看已發布資源列表,或者直接進入書格的 網盤目錄 瀏覽下載。根據書格公布的數據顯示,截止今年 3 月底,網站已經發布超過 1600 套書籍資源,所有資源大小約 616 GB。在書格的資源分類中,我們可以按照學術分類(史地、社會科學、藝術等)和興趣分類(永樂大典系列、練字參考、要看圖多的等)找到不同類型的書籍。
圖靈社區 主要專注于科技書籍的出版,包括計算機、數學統計、科普等領域,提供免費和付費的電子書。用戶可以使用網銀或者支付寶的購買方式,大部分電子書同時提供了三種閱讀方式:在線閱讀、MOBI 推送、PDF 下載,部分書籍只提供其中部分格式。
圖靈社區的圖書分類除了按照常規分類(計算機、科普、設計、高等數學等)外,還可以按不同的 Tag 標簽查找感興趣的書籍。如果你有更準確的書籍信息(ISBN 碼、作譯者、出版日期),通過圖靈社區的 高級搜索 功能精確地找到對應資源。
在用戶的 個人設置 頁面中,圖靈社區提供了推送郵箱的功能,填寫好 Kindle 個人郵箱,如果遇到推送失敗的話,可以嘗試將 no-reply@ituring.com.cn 加入 Kindle 已認可的發件人電子郵箱列表中。
Project Gutenberg 是國外最知名的電子書分享網站,最初在 1971 年 7 月由 Michael Hart 發起,主要提供大量版權過期后進入公有領域的書籍,目前藏書量超過了 5 萬多本。你可以從網站提供的 TOP 100 下載排行榜 獲取最受用戶歡迎的電子書。
古登堡計劃也收錄了中文經典書籍,以下載四大名著之一三國演義為例子,在下載頁面中,用戶可以將電子書轉存至 Dropbox、Google Drive、OneDrive 云盤,網站提供了 HTML、ePub、Kindle(mobi、azw 格式) 和富文本多種電子書格式。
Wikibooks 維基教科書 項目隸屬于 維基媒體基金會 旗下,網站主要收集教科書或者用戶自己編輯的書籍,提倡分析人人可編輯的自由教學讀本,目前已經收錄超過 3000 本共 80000 多頁的電子書。
維基教科書
在維基教科書的 中文索引頁面 中,我們可以找到相當豐富的教學類電子書資源,涵蓋了自然科學、數學、社會科學、語言、人文科學、工程學、藝術、計算機科學與技術以及部分中小學、大學課本。維基教科書為每一個網頁頁面提供了 PDF 文件下載的選項,稍顯遺憾的是相較于英文目前中文資源數量還比較有限。
維基媒體基金會的類似項目還有 維基文庫,目前已經收錄了超過 29 萬篇文檔,主要領域包括了已出版的文獻、譯文、歷史檔案、文獻作者生平等,同樣提供了 PDF 格式的電子文件。
Planet eBook 被視為古典文學電子書愛好者的樂園,所收錄的小說和書籍均可免費下載和共享,提供的電子書格式包括 ePub、PDF、MOBI,每本收錄的書籍都提供了精致的介紹頁面,電子書的文字排版和圖文質量都有不錯的水準。如果你是外文小說的閱讀愛好者,Planet eBook 肯定是一個不容錯過的電子書平臺。
Github 上總能找到一些相當優秀的資源,其中有朋友 分享 了一份免費的編程中文書籍索引排行榜,榜單中按照編程知識領域,推薦不同的教程和電子書資源,包含了開發者網站、Gitbook 電子書資源和部分視頻教學資源。
Gitbook 是一個由用戶自主制作和分享電子書的平臺,從多人協作、Markdown 寫作、評論互動等多個環節上為電子書出版和共享提供了一站式解決方案。Gitbook 制作好的電子書支持輸出 ePub, MOBI 和 PDF 格式,Explore 頁面 集中列出了已整理出版的電子書,用戶可以按語言分類和電子書主題查找電子書資源。
下載書籍后,下一步要做的就是把書傳送到 Kindle 里。Kindle 原生系統支持的格式包括:AZW、TXT、PDF、MOBI、PRC、HTML、DOC、DOCX 以及 JPG,但網上電子書資源大部分會是 ePub 和 PDF 格式,這時就需要文件格式轉換和 PDF 重排工具(PDF 在 Kindle 設備上的閱讀效果并不理想),我收集了以下幾款實用工具:
Calibre 是一款強大的本地電子書管理工具,支持 Windows、macOS 和 Linux 三大平臺,本身支持市面絕大部分的文件導入和轉換,選中需要轉換的書籍后,點擊選擇「轉換書籍」,在打開的轉換頁面中選擇右上角輸出格式,選擇電子書設備支持的輸出格式。另外用戶還能夠調整轉換電子書的更多細節選項,包括輸出界面、字體、內容目錄等。
管理工具:Calibre 使用指南
K2pdfopt 是一款可以優化 PDF 文件、提升在移動設備上閱讀體驗 PDF 文檔的開源軟件,支持 Windows、macOS 和 Linux 三大平臺,還提供了命令行版本,以 Windows 平臺的 GUI 版本為例,
AConvert 是一款電子書轉換在線工具,支持輸出 AZW3、EPUB、DOCX、HTML、MOBI、PDF、RTF 和 TXT 格式,選擇本地文件上傳或在線地址。在轉換結果的下載頁面中,用戶可以將轉換后的文檔保存至 Dropbox、Google Drive,或者通過掃描二維碼下載文檔。同類型的在線工具還有 ConvertIO、ToePub。
Dropbox + IFTTT 實現云盤電子書推送至 Kindle 設備。部分電子書平臺提供將電子書文件轉存至類似 Dropbox 云存儲空間里,這時候再利用 IFTTT 提供的任務規則可以實現將云盤電子書資源自動推送至 Kindle 設備上,簡單說一下操作步驟:
以上就是我個人搜集的優秀電子書資源站點和書籍格式轉換和傳輸的一些技巧,如果你了解更多的電子書網站,歡迎在評論中與大家分享。
.online-convert
online-convert是一個十分優秀的在線格式轉換應用,支持格式覆蓋文檔、圖片、音頻、視頻、電子書、Flash以及一些 不常見的格式。使用非常簡單,你只需根據在你想轉換成的格式的分類(如文檔的在document converter)的下拉條上選擇你需要的格式后按Go就可以到達上傳文件頁面,上傳后就會提示下載。測試了一些PDF轉換TXT,發現支持中文,并且 轉換十分準確。
2.ConvertFiles
ConvertFiles是的一個免費的在線格式轉換工具。ConvertFiles的界面十分丑陋,但是功能十分強大,支持眾多格式,包括文檔、圖片、視頻。支持格式外鏈,視頻方面支持國內的酷6和56視頻。使用起來十分簡單,可以選擇上傳文件(Choose a local file)或者外鏈文件(download it from),然后設置轉換后的文件格式(Output format)即可。設置完成之后你可以選擇在線等待轉換,轉換后會提示下載地址。當然你也可以留下你的郵箱地址(Send a download link to my email (optional))。
地址:http://www.convertfiles.com/
3.docspal
docspal是一個強大的在線格式轉換網頁,支持文檔、音頻、視頻等。
功能 : 支持文本文檔的txt,html,pdf,doc等、音頻的mp3,ogg,wav,wma等、支持視頻的3gp,mpv,flv等、圖片的png,jpg,gif等以及其它格式.
4.Cometdocs
Cometdocs可是一個號稱萬能的在線文件轉換器!當然了,聲稱"萬能"有些過。不過它的強大毋庸置疑。一共提供50余種文件格式的轉換,幾乎涵蓋所有最常使用的文件類型。只要你打開這個應用的網址,立刻就可以進行文件的轉換。盡管是英文版面,但是畫面十分簡潔,一目了然,它會一步一步帶你完成 文件的轉換,不用擔心語言上的問題。友好的界面加上強大的功能,Cometdocs真的值得我們豎起大拇指。雖然不用注冊就可以使用它,但是注冊的用戶還 可以對轉換的文件進行管理,并且注冊是免費而簡單的。
5.Zamzar
Zamzar是一個功能十分強大的在線文件轉換工具。它可以轉換各種形式的文件:如文檔、圖片、音樂、電子書、壓縮文件和CAD文件等。只需要按照4個簡單的步驟就可以輕松完成轉換。結果以郵件方式返回給用戶,無論是成功還是失敗。
6.docdroids
docdroids是一個不錯的在線文檔轉換工具,支持PDF, DOCX, DOC, ODT, PAGES, RTF, OTT, XLS, XLSX, TXT, PPT, PPTX, ODP等文檔,并且支持在線閱覽文檔。文檔上傳后60天內不閱覽的話將被刪除,這也就意味著最少能支持60天,可以共享鏈接給你的朋友閱覽。
地址:http://www.docdroid.net/
7.Pdfaid
Pdfaid是一個多功能的PDF在線轉換工具,支持PDF的分割、合并、從Office多種格式轉換。這個從圖中就可以看出來。
可以設置PDF的一些配置,如頁面大小、標題作者等。
8.freepdfconvert
又一個多格式PDF互轉的的在線應用,總共支持67種格式轉換成PDF文件。
支持PDF轉換成Word&Excel文檔。
9.media-io
media-io是一個在線音頻格式轉換工具。
功能 : 支持mp3、wav、ogg、wma格式互轉、支持轉換成不同的質量以滿足不同的需求
10.benderconverter
benderconverter是一個優秀的在線視頻轉換器,支持大量的主流視頻格式包括MP3, AVI, FLV Flash, iPod / iPhone,3gp,mpeg,wav。除了上傳視頻轉換外,還支持youtube的鏈接。
附:
online-convert、ConvertFiles、docspal、Cometdocs、Zamzar為全能轉換器(支持多類型多格式的互轉)
docdroids、Pdfaid、freepdfconvert為文檔格式轉換器(其中后兩者專為PDF服務)
media-io為音頻格式轉換器
benderconverter為視頻格式轉換器
*請認真填寫需求信息,我們會在24小時內與您取得聯系。