整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          ffmpeg命令行工具

          于ffmpeg命令行的使用 之前一直都是通過(guò)百度(慚愧),一邊找 一邊用 感覺寫起來(lái)比較麻煩 就在這記錄下 方便以后溫習(xí)

          我們都知道從官網(wǎng)下來(lái)的可以直接運(yùn)行的程序有三個(gè) 一個(gè)是ffmpeg.exe ffplay.exe ffprobe.exe

          關(guān)于ffmpeg的官網(wǎng)里邊 一般是提供三種(static shared dev)

          第一個(gè)static是提供了之前說(shuō)的那三個(gè)程序 并且人家把各個(gè)dll集成了進(jìn)去 導(dǎo)致程序的大小比較大

          第二個(gè)shared 也提供了那三個(gè)程序 只不過(guò)大小就小得多 因?yàn)樗€提供了各種dll

          第三個(gè)就完全適用于開發(fā)人員 提供了lib以及頭文件

          這邊我們就直接來(lái)說(shuō)說(shuō)提供的那三個(gè)程序怎么用(直接點(diǎn)是沒用的哈 直接在命令行里邊用就好)

          ffmpeg是用來(lái)轉(zhuǎn)碼的工具 ffplay是用來(lái)播放的 ffprobe是用來(lái)查看文件格式的

          **************************************************************************************************************************************

          首先我們來(lái)看下ffmpeg

          http://ffmpeg.org/ffmpeg.html 官方說(shuō)明

          我自己輸入 ffmpeg -h

          首先會(huì)顯示ffmpeg的版本 以及編譯這個(gè)用的GCC的版本 以及編譯之前configure的選項(xiàng) 之后就是依賴各種庫(kù)的版本

          基本的信息顯示完了以后 就會(huì)告訴你怎么使用

          usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

          當(dāng)然我們也可以活用help信息

          Getting help:

          -h -- print basic options 會(huì)打印基本的選項(xiàng)

          -h long -- print more options 會(huì)打印更多的選項(xiàng)

          -h full -- print all options (including all format and codec specific options, very long) 打印所有的選項(xiàng)(包括所有格式和編解碼器特定選項(xiàng),很長(zhǎng))

          -h type=name -- print all options for the named decoder/encoder/demuxer/muxer/filter 可以打印指定的選項(xiàng)

          See man ffmpeg for detailed description of the options. 當(dāng)然了你要想看得仔細(xì) 有關(guān)選項(xiàng)的詳細(xì)描述,請(qǐng)參閱man ffmpeg。

          下面我們就來(lái)看看各個(gè)選項(xiàng)(之后再來(lái)一個(gè)個(gè)試)

          Print help / information / capabilities:

          -L show license

          -h topic show help

          -? topic show help

          -help topic show help

          --help topic show help

          -version show version

          -buildconf show build configuration

          -formats show available formats 顯示所支持的格式

          -muxers show available muxers 顯示所有可用的封裝格式

          -demuxers show available demuxers 顯示所有可用的解封裝格式

          -devices show available devices 顯示支持的設(shè)備(這里顯示的只是很大的范圍 并不會(huì)顯示具體的設(shè)備 比如我輸入ffmpeg -devices 只會(huì)像是下面輸出的那樣)

          Devices:

          D. = Demuxing supported 可以理解為輸入設(shè)備(我們可以這么理解 解封裝是獲取流 這個(gè)設(shè)備其實(shí)干的也是獲取流的事)

          .E = Muxing supported 可以理解為輸出設(shè)備(同理 輸出設(shè)備是使用流的 和封裝類似)

          --

          E caca caca (color ASCII art) output device

          D dshow DirectShow capture

          D lavfi Libavfilter virtual input device

          E sdl,sdl2 SDL2 output device

          D vfwcap VfW video capture

          -codecs show available codecs 顯示支持的編解碼器(看清楚 是編解碼器)

          需要注意的就是前面的那些什么 D,E,V,A,S,I,L,S的一類的意思

          D..... = Decoding supported 解碼

          .E.... = Encoding supported 編碼

          ..V... = Video codec 視頻

          ..A... = Audio codec 音頻

          ..S... = Subtitle codec 字幕

          ...I.. = Intra frame-only codec 幀內(nèi)編解碼器

          ....L. = Lossy compression 有損

          .....S = Lossless compression 無(wú)損

          -decoders show available decoders 顯示支持的解碼器

          -encoders show available encoders 顯示支持的編碼器

          -bsfs show available bit stream filters 顯示可用的比特流過(guò)濾器

          -protocols show available protocols 顯示支持的協(xié)議

          -filters show available filters 顯示可用的過(guò)濾器(需要注意下下面的幾個(gè)的意思 現(xiàn)在我還是沒有搞懂什么意思 要去找找代碼看看了)

          Filters:

          T.. = Timeline support

          .S. = Slice threading

          ..C = Command support

          A = Audio input/output

          V = Video input/output

          N = Dynamic number and/or type of input/output

          | = Source or sink filter

          -pix_fmts show available pixel formats 顯示可用像素格式

          Pixel formats:

          I.... = Supported Input format for conversion 支持轉(zhuǎn)換的輸入格式

          .O... = Supported Output format for conversion 支持的轉(zhuǎn)換輸出格式

          ..H.. = Hardware accelerated format 硬件加速格式

          ...P. = Paletted format 調(diào)色格式

          ....B = Bitstream format 位流格式

          下面這個(gè)是輸出的格式

          FLAGS NAME (標(biāo)志名稱)NB_COMPONENTS (組成數(shù)量 yuv420 就是有三個(gè)組成的) BITS_PER_PIXEL(每個(gè)像素占得位數(shù))

          -layouts show standard channel layouts 顯示標(biāo)準(zhǔn)通道布局

          -sample_fmts show available audio sample formats 顯示可用的音頻示例格式

          -colors show available color names 顯示可用顏色名稱

          -sources device list sources of the input device 列出輸入設(shè)備的源(這個(gè) 還不清楚怎么用 到時(shí)看看官方文檔)

          -sinks device list sinks of the output device 列出輸出設(shè)備的接收器

          -hwaccels show available HW acceleration methods 顯示可用的硬件加速方法

          Global options (affect whole program instead of just one file: 全局選項(xiàng)-----影響整個(gè)程序,而不僅僅是一個(gè)文件:

          -loglevel loglevel set logging level 設(shè)定log等級(jí) "quiet" "panic" "fatal" "error" "warning" "info" "verbose" "debug" "trace"

          補(bǔ)充說(shuō)明: Flags can also be used alone by adding a ’+’/’-’ prefix to set/reset a single flag without affecting other flags or changing loglevel. When setting both flags and loglevel, a ’+’ separator is expected between the last flags value and before loglevel.

          意思就是----還可以單獨(dú)使用標(biāo)志,添加‘+’/‘-’前綴來(lái)設(shè)置/重置單個(gè)標(biāo)志,而不影響其他標(biāo)志或更改日志級(jí)別。當(dāng)同時(shí)設(shè)置標(biāo)志和日志級(jí)別時(shí),需要在最后一個(gè)標(biāo)志值之間和日志級(jí)別之前使用。

          eg:ffmpeg -loglevel repeat+level+verbose -i input output

          -v loglevel set logging level 和上面一樣的

          -report generate a report 生成報(bào)表

          -max_alloc bytes set maximum size of a single allocated block 設(shè)置單個(gè)分配塊的最大大小

          -y overwrite output files 覆蓋輸出文件

          -n never overwrite output files 永遠(yuǎn)不要覆蓋輸出文件

          -ignore_unknown Ignore unknown stream types 忽略未知流類型

          -filter_threads number of non-complex filter threads 非復(fù)雜過(guò)濾線程數(shù) (后邊要加數(shù)字)

          -filter_complex_threads number of threads for -filter_complex 過(guò)濾器復(fù)合體的線程數(shù) (后邊要加數(shù)字)

          -stats print progress report during encoding 在編碼期間打印進(jìn)度報(bào)告

          -max_error_rate ratio of errors (0.0: no errors, 1.0: 100% error maximum error rate 錯(cuò)誤率(0:無(wú)錯(cuò)誤,1:100%錯(cuò)誤最大錯(cuò)誤率)

          -bits_per_raw_sample number set the number of bits per raw sample 設(shè)置每個(gè)原始樣本的位數(shù)

          -vol volume change audio volume (256=normal) 改變音頻音量(256=正常)

          Per-file main options: 每個(gè)文件的主要選項(xiàng)

          -f fmt force format 強(qiáng)迫使用格式‘fmt’

          -c codec codec name

          -codec codec codec name

          -pre preset preset name 預(yù)先設(shè)定名稱

          -map_metadata outfile[,metadata]:infile[,metadata] set metadata information of outfile from infile 依據(jù)輸入文件設(shè)置輸出文件的元數(shù)據(jù)信息

          -t duration record or transcode "duration" seconds of audio/video 編碼或轉(zhuǎn)碼音頻/視頻的“ duration”秒

          -to time_stop record or transcode stop time 記錄或轉(zhuǎn)碼停止時(shí)間

          -fs limit_size set the limit file size in bytes 設(shè)置限制文件大小(以字節(jié)為單位)

          -ss time_off set the start time offset 設(shè)置起始時(shí)間偏移量

          -sseof time_off set the start time offset relative to EOF 設(shè)置相對(duì)于eof的起始時(shí)間偏移量。

          -seek_timestamp enable/disable seeking by timestamp with -ss 使用-ss啟用/禁用時(shí)間戳查找

          -timestamp time set the recording timestamp ('now' to set the current time) 設(shè)置錄制時(shí)間戳(“立即”設(shè)置當(dāng)前時(shí)間)

          -metadata string=string add metadata 添加元數(shù)據(jù)

          -program title=string:st=number... add program with specified streams 添加具有指定流的程序

          -target type specify target file type ("vcd", "svcd", "dvd", "dv" or "dv50" with optional prefixes "pal-", "ntsc-" or "film-") 指定目標(biāo)文件類型( "vcd", "svcd", "dvd", "dv" or "dv50",可選前綴為 "pal-", "ntsc-" or "film-")

          -apad audio pad 音頻墊

          -frames number set the number of frames to output 將幀數(shù)設(shè)置為輸出

          -filter filter_graph set stream filtergraph 設(shè)置流濾波器

          -filter_script filename read stream filtergraph description from a file 從文件中讀取流過(guò)濾圖描述

          -reinit_filter reinit filtergraph on input parameter changes 輸入?yún)?shù)變化的 reinit濾波圖

          -discard discard 丟棄

          -disposition disposition 配置

          Video options: 視頻選項(xiàng)

          -vframes number set the number of video frames to output 設(shè)置輸出視頻的幀數(shù)

          -r rate set frame rate (Hz value, fraction or abbreviation) 設(shè)置幀速率(Hz值、分?jǐn)?shù)或縮寫)

          -s size set frame size (WxH or abbreviation) 設(shè)置幀大小(WXH或縮寫——Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576)

          -aspect aspect set aspect ratio (4:3, 16:9 or 1.3333, 1.7777) 設(shè)定高寬比(4:3,16:9或1.3333,1.7777)

          -bits_per_raw_sample number set the number of bits per raw sample 設(shè)置每個(gè)原始樣本的位數(shù)。

          -vn disable video 禁用視頻

          -vcodec codec force video codec ('copy' to copy stream) 強(qiáng)制視頻編解碼器(“復(fù)制流)

          -timecode hh:mm:ss[:;.]ff set initial TimeCode value. 設(shè)置初始時(shí)間碼值

          -pass n select the pass number (1 to 3) 選擇通行證號(hào)碼(1到3)

          -vf filter_graph set video filters 設(shè)置視頻濾波器

          -ab bitrate audio bitrate (please use -b:a) 音頻比特率(請(qǐng)使用-b:a)

          -b bitrate video bitrate (please use -b:v) 視頻比特率(請(qǐng)使用-b:v)

          -dn disable data 禁用數(shù)據(jù)

          Audio options: 音頻選項(xiàng)

          -aframes number set the number of audio frames to output 設(shè)置輸出音頻流的幀數(shù)

          -aq quality set audio quality (codec-specific) 設(shè)置音頻質(zhì)量(特定編解碼器)

          -ar rate set audio sampling rate (in Hz) 設(shè)置音頻采樣率(以赫茲為單位)

          -ac channels set number of audio channels 設(shè)置音頻通道數(shù)

          -an disable audio 禁用音頻

          -acodec codec force audio codec ('copy' to copy stream) 強(qiáng)制音頻編解碼器(“復(fù)制流)

          -vol volume change audio volume (256=normal) 改變音頻音量(256=正常)

          -af filter_graph set audio filters 設(shè)置音頻過(guò)濾器

          Subtitle options: 字幕選項(xiàng)

          -s size set frame size (WxH or abbreviation) 設(shè)置幀大小(WxH或省略)

          -sn disable subtitle 禁用字幕

          -scodec codec force subtitle codec ('copy' to copy stream) 強(qiáng)制字幕編解碼器(“復(fù)制流)

          -stag fourcc/tag force subtitle tag/fourcc 強(qiáng)制字幕標(biāo)簽/fourcc碼

          -fix_sub_duration fix subtitles duration 修正字幕持續(xù)時(shí)間

          -canvas_size size set canvas size (WxH or abbreviation) 設(shè)置畫布大?。╓XH或縮寫)

          -spre preset set the subtitle options to the indicated preset 將字幕選項(xiàng)設(shè)置為指定的預(yù)置

          好了 我們就開始用實(shí)例進(jìn)行鞏固

          ffmpeg -i cyq.avi out.avi

          這個(gè)是最簡(jiǎn)單的轉(zhuǎn)碼命令 轉(zhuǎn)碼的內(nèi)部參數(shù)都是取的默認(rèn)值

          我們來(lái)看下相關(guān)的參數(shù)

          后來(lái)才意識(shí)到之前為什么會(huì)寫錯(cuò) 現(xiàn)在 我們?cè)賮?lái)重溫一遍ffmpeg的書寫格式

          ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...

          ffmpeg + 全局的選項(xiàng)(可省略)+{輸入文件選項(xiàng) -i 文件} +{輸出文件選項(xiàng) 文件}

          **************************************************************************************************************************************

          ffplay 是用SDL來(lái)寫的一個(gè)播放器

          (官方的解釋:ffplay是一個(gè)非常簡(jiǎn)單和可移植的媒體播放器,使用ffmpeg庫(kù)和SDL庫(kù)。它主要用作各種ffmpeg API的測(cè)試床。)

          他的功能可謂是很強(qiáng)大 但是就是沒有圖形化的操作界面 只能通過(guò)鍵盤來(lái)操作

          這邊就分 快捷鍵以及選項(xiàng)來(lái)進(jìn)行說(shuō)明

          http://ffmpeg.org/ffplay.html 官網(wǎng)的使用說(shuō)明

          我們先來(lái)看下ffplay -h

          因?yàn)轱@示的東西太多 我這邊就來(lái)挑選著記錄

          前邊顯示的和ffmpeg的差不多

          我們先看下他的用法:ffplay [options] input_file

          接下來(lái)看下主選項(xiàng):

          Main options:

          -L show license

          -h topic show help

          -? topic show help

          -help topic show help

          --help topic show help

          -version show version

          -buildconf show build configuration

          -formats show available formats

          -muxers show available muxers

          -demuxers show available demuxers

          -devices show available devices

          -codecs show available codecs

          -decoders show available decoders

          -encoders show available encoders

          -bsfs show available bit stream filters

          -protocols show available protocols

          -filters show available filters

          -pix_fmts show available pixel formats

          -layouts show standard channel layouts

          -sample_fmts show available audio sample formats

          -colors show available color names

          -loglevel loglevel set logging level

          -v loglevel set logging level

          -report generate a report

          -max_alloc bytes set maximum size of a single allocated block

          -sources device list sources of the input device 顯示輸入設(shè)備的自動(dòng)檢測(cè)源。

          -sinks device list sinks of the output device 顯示輸出設(shè)備的自動(dòng)檢測(cè)接收器。

          -x width force displayed width

          -y height force displayed height

          -s size set frame size (WxH or abbreviation)

          -fs force full screen 強(qiáng)制全屏(和ffmpeg中的fs是不一樣的用法)

          -an disable audio

          -vn disable video

          -sn disable subtitling

          -ss pos seek to a given position in seconds 以秒為單位尋找給定位置

          -t duration play "duration" seconds of audio/video 播放音頻/視頻的“ duration”秒

          -bytes val seek by bytes 0=off 1=on -1=auto 按字節(jié)查找 0=OFF 1=ON -1=AUTO

          -nodisp disable graphical display 禁用圖形顯示

          -noborder borderless window 無(wú)邊界窗口

          -volume volume set startup volume 0=min 100=max 設(shè)置啟動(dòng) volume0=min 100=max

          -f fmt force format

          -window_title window title set window title 窗口標(biāo)題集窗口標(biāo)題

          -af filter_graph set audio filters 設(shè)置音頻過(guò)濾器

          -showmode mode select show mode (0 = video, 1 = waves, 2 = RDFT) 選擇顯示模式(0=視頻,1=波形,2=RDFT)

          -i input_file read specified file 讀取指定文件

          別說(shuō)明:該專欄文章均來(lái)源自微信公眾號(hào)【大數(shù)據(jù)實(shí)戰(zhàn)演練】,歡迎關(guān)注!

          版本說(shuō)明:

          通過(guò) HDP 3.0.1 安裝的 HBase 2.0.0

          一、概述

          HBase 本身提供了很多種數(shù)據(jù)導(dǎo)入的方式,目前常用的有三種常用方式:

          • 使用 HBase 原生 Client API
          • 使用 HBase 提供的 TableOutputFormat,原理是通過(guò)一個(gè) Mapreduce 作業(yè)將數(shù)據(jù)導(dǎo)入 HBase
          • 使用 Bulk Load 方式:原理是使用 MapReduce 作業(yè)以 HBase 的內(nèi)部數(shù)據(jù)格式輸出表數(shù)據(jù),然后直接將生成的 HFile 加載到正在運(yùn)行的 HBase 中。

          二、方式對(duì)比

          前兩種方式:需要頻繁的與數(shù)據(jù)所存儲(chǔ)的 RegionServer 通信,一次性導(dǎo)入大量數(shù)據(jù)時(shí),可能占用大量 Regionserver 資源,影響存儲(chǔ)在該 Regionserver 上其他表的查詢。

          第三種方式:了解過(guò) HBase 底層原理的應(yīng)該都知道,HBase 在 HDFS 中是以 HFile 文件結(jié)構(gòu)存儲(chǔ)的,一個(gè)比較高效便捷的方法就是先生成 HFile,再將生成的 HFile 加載到正在運(yùn)行的 HBase 中。即使用 HBase 提供的 HFileOutputFormat2 類或者 importtsv 工具來(lái)完成上述操作。

          經(jīng)過(guò)對(duì)比得知:如果數(shù)據(jù)量很大的情況下,使用第三種方式(Bulk Load)更好。占用更少的 CPU 和網(wǎng)絡(luò)資源就實(shí)現(xiàn)了大數(shù)據(jù)量的導(dǎo)入。本篇文章也將主要介紹 Bulk Load 方式。

          三、Bulk Load 說(shuō)明

          Bulk Load 方式之所以高效,是因?yàn)槔@過(guò)了正常寫數(shù)據(jù)的路徑(WAL、MemStore、flush)。總的來(lái)說(shuō),Bulk Load 方式使用 MapReduce 作業(yè)以 HBase 的內(nèi)部數(shù)據(jù)格式輸出表數(shù)據(jù),然后直接將生成的 HFiles 加載到正在運(yùn)行的 HBase 中。與僅使用 HBase API 相比,使用 Bulk Load 方式不占用 Region 資源,不會(huì)產(chǎn)生巨量的寫入 I/O,將使用更少的 CPU 和網(wǎng)絡(luò)資源。

          HBase Bulk Load 過(guò)程包括兩個(gè)主要步驟:

          • 將 準(zhǔn)備的數(shù)據(jù) 生成 HFile :使用 importtsv 工具將數(shù)據(jù)轉(zhuǎn)化為 HFile ,或者通過(guò) HBase 提供的 HFileOutputFormat2 類編寫 MapReduce 程序。
          • 將 HFile 導(dǎo)入到 HBase 中:使用 LoadIncrementalHFiles 或者 completebulkload 將 HFile 導(dǎo)入到 HBase中。

          流程如下圖所示:

          3.1 將準(zhǔn)備的數(shù)據(jù)生成HFile

          將數(shù)據(jù)生成 HFile,有兩種方式,分別是:

          • 通過(guò) HBase 提供的 HFileOutputFormat2 類編寫 MapReduce 程序來(lái)生成 HFile 。(本篇文章不擴(kuò)展)
          • 使用 importtsv 工具將 TSV 格式數(shù)據(jù)轉(zhuǎn)換為 HFile ,自動(dòng)生成 MapReduce 任務(wù)。

          本篇文章主要還是講解下 importtsv 工具的使用,編寫 MapReduce 程序在本篇不擴(kuò)展,后續(xù)文章會(huì)有補(bǔ)充。

          importtsv 是一個(gè)實(shí)用工具,它將 TSV 格式的數(shù)據(jù)加載到 HBase 中。它有兩種用法,分別為:

          • importtsv 工具默認(rèn)使用 HBase put API 導(dǎo)入數(shù)據(jù),將數(shù)據(jù)從 HDFS 中的 TSV 格式直接加載到 HBase 的 MemStore 中。非 Bulk Load 方式,比較占用集群資源,不建議在處理大數(shù)據(jù)量時(shí)使用。
          hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=a,b,c <tablename> <hdfs-inputdir>
          
          • Bulk Load 方式,當(dāng)使用選項(xiàng) -Dimporttsv.bulk.output 時(shí),將會(huì)先生成 HFile 文件的內(nèi)部格式的文件,這時(shí)并不會(huì)寫數(shù)據(jù)到 HBase 中。建議使用 √
          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 選項(xiàng)時(shí),如果目標(biāo)表尚不存在,則將使用默認(rèn)列族描述符創(chuàng)建目標(biāo)表。如果準(zhǔn)備了大量數(shù)據(jù)要進(jìn)行Bulk Load,請(qǐng)確保對(duì)目標(biāo) HBase 表進(jìn)行適當(dāng)?shù)念A(yù)分區(qū),也就是預(yù)先創(chuàng)建多個(gè) Region ,避免熱點(diǎn)與數(shù)據(jù)傾斜問題。

          importtsv 可以使用 -D 指定的其他選項(xiàng),以下列舉了11條:

          • -Dimporttsv.skip.bad.lines=true / false :在導(dǎo)入過(guò)程中,如果有不符合分割標(biāo)準(zhǔn)的行,被稱之為 badlines ,設(shè)置是否跳過(guò),如果不跳過(guò),則 MapReduce 任務(wù)停止。
          • -Dimporttsv.separator=’|’ :例如使用 管道符 來(lái)代替 tab 鍵(\t),importtsv 默認(rèn)是以 tab 鍵分隔。
          • -Dimporttsv.timestamp=currentTimeAsLong :使用特殊的時(shí)間戳導(dǎo)入。
          • -Dimporttsv.mapper.class=my.Mapper :用戶定義的Mapper代替org.apache.hadoop.hbase.mapreduce.TsvImporterMapper。
          • -Dmapreduce.job.name=jobName :用戶指定 MapReduce 任務(wù)名稱
          • -Dmapreduce.job.queuename=queue:指定作業(yè)提交到的隊(duì)列名
          • -Dmapreduce.job.priority=VERY_HIGH / HIGH / NORMAL / LOW / VERY_LOW :指定作業(yè)的優(yōu)先級(jí)
          • -Dcreate.table=yes / no :如果 HBase 中沒有創(chuàng)建表,是否使用 importtsv 工具創(chuàng)建該表,如果設(shè)置為 no,則在 HBase 中表必須存在。
          • -Dno.strict=true / false :忽略 HBase 表中的列族檢查,默認(rèn)為 false 。
          • -Dmapreduce.map/reduce.memory.mb=5120 :map / reduce 端分配的內(nèi)存大小,一般來(lái)說(shuō)是 1024 的倍數(shù),這里配置了 5G。
          • -Dmapreduce.map/reduce.java.opts=-Xmx4096m :指定 map / reduce 端的 JVM 參數(shù),這個(gè)的大小一般是上一個(gè)參數(shù)的 0.75 倍,要剩一些內(nèi)存給非 JVM 進(jìn)程。

          盡管 importtsv 工具在許多情況下很有用,但高級(jí)用戶可能希望以編程方式生成數(shù)據(jù),或使用其他格式導(dǎo)入數(shù)據(jù)。如果有這樣的需求,請(qǐng)深入了解 ImportTsv.java 和 HFileOutputFormat 的 JavaDoc ,修改源碼進(jìn)行實(shí)現(xiàn)。

          3.2 完成數(shù)據(jù)加載,將HFile加載到HBase中

          completebulkload 工具用于將數(shù)據(jù)導(dǎo)入正在運(yùn)行的 HBase 中。此命令行工具遍歷準(zhǔn)備好的數(shù)據(jù)文件(HFile),確定每個(gè) HFile 所屬的 Region,然后聯(lián)系相應(yīng)的 RegionServer 將 HFile 移入其存儲(chǔ)目錄并將數(shù)據(jù)供客戶端使用。

          如果在 Bulk Load 準(zhǔn)備過(guò)程中或在準(zhǔn)備和完成步驟之間 Region 邊界已更改,則 completebulkload 工具會(huì)自動(dòng)將 HFile 拆分為與新邊界對(duì)應(yīng)的部分。此過(guò)程效率不高,因此用戶應(yīng)盡量減少 準(zhǔn)備 HFile將 HFile 加載到 HBase 中 這兩步驟之間的時(shí)間延遲,尤其是在其他客戶端通過(guò)其他方式同時(shí)加載數(shù)據(jù)時(shí)也要注意。

          將 HFile 加載到 HBase 中有兩種方式:

          • LoadIncrementalHFiles
          hbase org.apache.hadoop.hbase.tool.LoadIncrementalHFiles <hdfs://storefileoutput> <tablename>
          
          • completebulkload
          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>
          

          四、示例

          說(shuō)一下我的運(yùn)行環(huán)境:CentOS-7,1個(gè) HBase Master,3個(gè) RegionServer,三臺(tái)機(jī)器均是 8G 內(nèi)存。

          4.1 創(chuàng)建表的同時(shí)創(chuàng)建10個(gè)分區(qū)

          create 'default:people', {NAME=>'basic_info'}, {NAME=>'other_info'}, SPLITS=>['10|','20|','30|','40|','50|','60|','70|','80|','90|']
          

          創(chuàng)建的 people 表如下所示:

          4.2 準(zhǔn)備數(shù)據(jù)源并上傳到HDFS

          用 Python 生成了10萬(wàn)條測(cè)試數(shù)據(jù)并存到了 hbase_data.txt 中,一共7.32M,現(xiàn)在將該文件上傳到 HDFS 中:

          sudo -u hdfs hdfs dfs -put /tmp/hbase_data.txt /tmp
          

          測(cè)試數(shù)據(jù)是我用python寫的,有詳細(xì)的說(shuō)明和源碼,詳情點(diǎn)擊:Python生成HBase測(cè)試數(shù)據(jù)說(shuō)明 。

          4.3 通過(guò)importtsv工具生成HFile文件

          使用 importtsv 工具生成 HFile 文件,執(zhí)行如下命令:

          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
          

          請(qǐng)確保執(zhí)行該命令的用戶有相應(yīng)的權(quán)限。后臺(tái)會(huì)觸發(fā)一個(gè) MapReduce 任務(wù),由于表中創(chuàng)建了 10 個(gè) Region,所以觸發(fā)的任務(wù)內(nèi)有 1 個(gè) map,10 個(gè) reduce,該任務(wù)一共執(zhí)行了2分45秒。

          4.4 將HFile數(shù)據(jù)加載到HBase中

          兩種方式:

          • LoadIncrementalHFiles
          sudo -u hdfs hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /tmp/people/output people
          

          執(zhí)行上述語(yǔ)句總時(shí)長(zhǎng)大約26秒。

          • completebulkload
          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
          

          小結(jié):上述兩種方式均可以實(shí)現(xiàn)將 HFile 數(shù)據(jù)導(dǎo)入到 HBase 中,其原理就是將 HFile 移動(dòng)到 HBase 表的對(duì)應(yīng)目錄下存儲(chǔ)。

          在 hbase shell 里執(zhí)行 scan ‘people’ ,將所有數(shù)據(jù)讀取一遍,我們?cè)偻ㄟ^(guò) HBase Web UI ,查看 people 表的各 region 的詳細(xì)情況。如下圖所示:

          由表分析可知,10萬(wàn)條 數(shù)據(jù) 較均勻地 分配到了 10 個(gè) Region 中。自此,數(shù)據(jù)批量導(dǎo)入到 HBase 中完畢!

          五、總結(jié)

          參考的 HBase 官網(wǎng):

          • http://hbase.apache.org/book.html#arch.bulk.load
          • http://hbase.apache.org/book.html#importtsv
          • http://hbase.apache.org/book.html#completebulkload

          在使用 importtsv 工具時(shí),一定要注意參數(shù) -Dimporttsv.bulk.output 的配置。通常來(lái)說(shuō)使用 Bulk Load Data 的方式對(duì) RegionServer 來(lái)說(shuō)更加友好一些,這種方式加載數(shù)據(jù)幾乎不占用 RegionServer 的計(jì)算資源,因?yàn)橹皇窃?HDFS上 移動(dòng)了 HFile 文件,然后通知 HMaster 將該 RegionServer 的一個(gè)或多個(gè) Region 上線。

          另外在進(jìn)行 Bulk Load 時(shí),也需要確保執(zhí)行用戶在HDFS上有相應(yīng)的權(quán)限。

          我將 HBase 數(shù)據(jù)導(dǎo)入常用的三種方式進(jìn)行了總結(jié),其中著重說(shuō)明了一下 Bulk Load 方式,如下圖所示:


          --END--

          碼字不易,如果您覺得文章寫得不錯(cuò),請(qǐng)關(guān)注作者~ 您的關(guān)注是我寫作的最大動(dòng)力

          友情提示:原文排版精美,可點(diǎn)擊分享鏈接查看。

          碼字不易,如果感覺本文對(duì)您有幫助,請(qǐng)點(diǎn)贊或訂閱支持一下,您的支持是我堅(jiān)持寫作最大的動(dòng)力,謝謝!

          這個(gè)現(xiàn)代時(shí)代,一切都被數(shù)字化了,電子書已成為主流,電子書有多種格式,如 PDF、EPUB、MOBI、AZW3 和 IBA 等。

          大多數(shù)電子書閱讀器支持幾乎所有格式,但是,某些電子書閱讀器可能不支持特定格式,例如,ASW3 文件只能由 Amazon Kindle 查看。在這種情況下,我們需要將電子書從一種格式轉(zhuǎn)換為另一種支持的格式,在本快速教程中,我們將了解如何在 Linux 中輕松地將電子書從 PDF 轉(zhuǎn)換為 EPUB 格式(反之亦然)。

          有許多在線和離線應(yīng)用程序可以將電子書從一種格式轉(zhuǎn)換為另一種格式,出于本教程的目的,我們將使用Calibre電子書套件,它允許我們從 CLI 和 GUI 轉(zhuǎn)換電子書。

          在 Linux 中安裝 Calibre

          Calibre 是一個(gè)免費(fèi)的開源電子書軟件套件,用于閱讀、編輯、組織、創(chuàng)建和轉(zhuǎn)換電子書,以及將電子書與其他電子書閱讀器同步。

          Calibre 可在 Linux、macOS 和 Windows 等所有主要計(jì)算機(jī)操作系統(tǒng)上運(yùn)行,并且提供控制臺(tái)和圖形版本。

          要在 Arch Linux 及其變體(如 EndeavourOS 和 Manjaro Linux)中安裝 Calibre,請(qǐng)運(yùn)行:

          $ sudo pacman -S calibre
          

          在 Debian、Ubuntu、Pop OS 中安裝 Calibre:

          $ sudo apt install calibre
          

          Fedora:

          $ sudo dnf install calibre
          

          openSUSE:

          $ sudo zypper install calibre
          

          現(xiàn)在,讓我們看看將 PDF 文件轉(zhuǎn)換為 EPUB 格式的命令行方式。

          使用 Calibre 從命令行將 PDF 文件轉(zhuǎn)換為 EPUB 格式

          Calibre 套件有一個(gè)名為“ebook-convert”的命令行工具,用于在不同格式之間進(jìn)行電子書轉(zhuǎn)換。

          要將電子書從 PDF 轉(zhuǎn)換為 EPUB 格式,只需運(yùn)行:

          $ ebook-convert file.pdf file.epub --enable-heuristics
          

          此命令會(huì)將給定的 PDF 文檔轉(zhuǎn)換為.epub格式并將輸出文件保存在當(dāng)前目錄中。

          樣本輸出:

          Conversion options changed from defaults:
            enable_heuristics: True
          1% Converting input to HTML...
          InputFormatPlugin: PDF Input running
          on /home/ostechnix/file.pdf
          [...]
          Splitting markup on page breaks and flow limits, if any...
           Looking for large trees in index.html...
           No large trees found
           Split into 84 parts
          Generating default cover
          EPUB output written to /home/ostechnix/file.epub
          Output saved to   /home/ostechnix/file.epub
          

          您現(xiàn)在可以使用任何 EPUB 查看器應(yīng)用程序查看 EPUB 文件。眾所周知,Calibre 支持幾乎所有的電子書格式。

          在這里,該--enable-heuristics選項(xiàng)用于啟用啟發(fā)式處理,它使用常見模式修改文檔文本和結(jié)構(gòu)。通過(guò)此選項(xiàng)后,Calibre 將掃描您的電子書以查找常見模式并自動(dòng)修復(fù)它們。默認(rèn)情況下禁用此選項(xiàng)。

          通常,啟用啟發(fā)式處理可以提高質(zhì)量。以防萬(wàn)一,如果輸出文件沒有按預(yù)期輸出,只需刪除此選項(xiàng),然后再試一次,如下所示。

          $ ebook-convert file.pdf file.epub
          

          您還可以使用這些--disable-*選項(xiàng)禁用單個(gè)啟發(fā)式處理操作。

          例子:

          $ ebook-convert file.pdf file.epub --enable-heuristics --disable-italicize-common-cases
          

          ebook-convert 接受很多參數(shù)來(lái)微調(diào) Ebook 轉(zhuǎn)換任務(wù)。要了解所有支持的選項(xiàng),請(qǐng)查看ebook-convert命令的官方文檔。

          你們中的一些人更喜歡圖形方法而不是 CLI 方式。如果是這樣,Calibre 也有圖形版本。

          使用 Calibre 圖形界面進(jìn)行電子書轉(zhuǎn)換

          從菜單或應(yīng)用程序啟動(dòng)器啟動(dòng) Calibre 應(yīng)用程序。單擊菜單欄中的“添加書籍”按鈕,然后從本地驅(qū)動(dòng)器中選擇 PDF 文件。

          添加 PDF 文件后,單擊“轉(zhuǎn)換書籍”選項(xiàng)。

          在下一個(gè)窗口中,選擇輸出格式。我要將 PDF 文件轉(zhuǎn)換為 EPUB 格式,所以我從下拉列表中選擇了“EPUB”。

          Calibre 允許您對(duì)輸出文件進(jìn)行大量自定義。Calibre 界面的左側(cè)窗格中顯示了幾個(gè)部分。每個(gè)部分都允許您更改各種設(shè)置并微調(diào)轉(zhuǎn)換過(guò)程。

          使用 Calibre,您可以進(jìn)行以下自定義:

          • 編輯和更改電子書的元數(shù)據(jù)(例如標(biāo)題、作者姓名、出版商名稱、標(biāo)簽等),
          • 更改外觀和感覺(例如字體類型、大小、文本對(duì)齊方式、布局、樣式),
          • 啟用啟發(fā)式處理,
          • 頁(yè)面設(shè)置(例如調(diào)整頁(yè)邊距),
          • 添加目錄,
          • 搜索和替換文本,
          • 添加/更改封面圖片等。

          從左窗格中選擇相應(yīng)的部分,并根據(jù)您的要求更改該部分中的給定參數(shù),完成所有自定義后,單擊“確定”繼續(xù)。

          轉(zhuǎn)換完成后,轉(zhuǎn)換后的文件保存在“Calibre Library”文件夾中,該文件夾通常位于$HOME您的 Linux 系統(tǒng)目錄中。每個(gè)文件都存儲(chǔ)在帶有作者姓名的單獨(dú)文件夾中。

          您可以將轉(zhuǎn)換后的文件上傳到電子書閱讀器,或者通過(guò)電子書查看器應(yīng)用程序打開它并開始使用它。

          結(jié)論

          在本指南中,我們學(xué)習(xí)了如何使用 Calibre 軟件套件將電子書從 PDF 格式轉(zhuǎn)換為 EPUB。由于 Calibre 可作為 CLI 和 GUI 版本使用,您可以從終端或 GUI 窗口進(jìn)行電子書轉(zhuǎn)換。


          主站蜘蛛池模板: 91麻豆精品国产自产在线观看一区| 亚洲一区在线免费观看| 无码国产精品一区二区免费虚拟VR| 少妇无码一区二区二三区| 乱精品一区字幕二区| 美日韩一区二区三区| 久久久久人妻精品一区三寸蜜桃| 狠狠色婷婷久久一区二区| 久久精品一区二区三区AV| 高清无码一区二区在线观看吞精| 久久se精品一区精品二区| 欧洲精品码一区二区三区| 中文字幕永久一区二区三区在线观看| 国产一区二区三区乱码网站| 狠狠做深爱婷婷综合一区| 精品人伦一区二区三区潘金莲| 国产在线一区观看| 99久久精品午夜一区二区| 精品国产AⅤ一区二区三区4区| 亚洲日韩一区精品射精| 亚洲国产美国国产综合一区二区| 日韩A无码AV一区二区三区| 精品福利一区二区三区免费视频| 久久精品中文字幕一区| 国产一区二区在线视频播放| 日韩一区二区在线播放| 亚洲av日韩综合一区在线观看| 一区二区三区在线看| 日本一区二区高清不卡| 精品视频一区二区| 日韩一区二区三区不卡视频| 2021国产精品一区二区在线| 国产丝袜视频一区二区三区| 精品国产一区二区三区在线观看| 国产成人一区二区三区免费视频| 亚洲高清一区二区三区 | 性色av无码免费一区二区三区| 亚洲午夜精品一区二区公牛电影院| 精品国产福利第一区二区三区| 亚洲国产成人久久一区WWW| 色视频综合无码一区二区三区|