日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop迁移MaxCompute神器之DataX-On-Hadoop使用指南

發(fā)布時(shí)間:2024/8/23 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop迁移MaxCompute神器之DataX-On-Hadoop使用指南 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

DataX-On-Hadoop即使用hadoop的任務(wù)調(diào)度器,將DataX task(Reader->Channel->Writer)調(diào)度到hadoop執(zhí)行集群上執(zhí)行。這樣用戶的hadoop數(shù)據(jù)可以通過(guò)MR任務(wù)批量上傳到MaxCompute、RDS等,不需要用戶提前安裝和部署DataX軟件包,也不需要另外為DataX準(zhǔn)備執(zhí)行集群。但是可以享受到DataX已有的插件邏輯、流控限速、魯棒重試等等。

?

1. DataX-On-Hadoop 運(yùn)行方式

1.1 什么是DataX-On-Hadoop

DataX?https://github.com/alibaba/DataX?是阿里巴巴集團(tuán)內(nèi)被廣泛使用的離線數(shù)據(jù)同步工具/平臺(tái),實(shí)現(xiàn)包括 MySQL、Oracle、HDFS、Hive、OceanBase、HBase、OTS、MaxCompute 等各種異構(gòu)數(shù)據(jù)源之間高效的數(shù)據(jù)同步功能。 DataX同步引擎內(nèi)部實(shí)現(xiàn)了任務(wù)的切分、調(diào)度執(zhí)行能力,DataX的執(zhí)行不依賴Hadoop環(huán)境。

DataX-On-Hadoop是DataX針對(duì)Hadoop調(diào)度環(huán)境實(shí)現(xiàn)的版本,使用hadoop的任務(wù)調(diào)度器,將DataX task(Reader->Channel->Writer)調(diào)度到hadoop執(zhí)行集群上執(zhí)行。這樣用戶的hadoop數(shù)據(jù)可以通過(guò)MR任務(wù)批量上傳到MaxCompute等,不需要用戶提前安裝和部署DataX軟件包,也不需要另外為DataX準(zhǔn)備執(zhí)行集群。但是可以享受到DataX已有的插件邏輯、流控限速、魯棒重試等等。

目前DataX-On-Hadoop支持將Hdfs中的數(shù)據(jù)上傳到公共云MaxCompute當(dāng)中。

1.2 如何運(yùn)行DataX-On-Hadoop

運(yùn)行DataX-On-Hadoop步驟如下:

  • 提阿里云工單申請(qǐng)DataX-On-Hadoop軟件包,此軟件包本質(zhì)上也是一個(gè)Hadoop MR Jar;
  • 通過(guò)hadoop客戶端提交一個(gè)MR任務(wù),您只需要關(guān)系作業(yè)的配置文件內(nèi)容(這里是./bvt_case/speed.json,配置文件和普通的DataX配置文件完全一致),提交命令是:
<span style="color:#f8f8f2"><code class="language-java"><span style="color:#f8f8f2">.</span>/bin<span style="color:#f8f8f2">/</span>hadoop jar datax<span style="color:#f8f8f2">-</span>jar<span style="color:#f8f8f2">-</span>with<span style="color:#f8f8f2">-</span>dependencies<span style="color:#f8f8f2">.</span>jar com<span style="color:#f8f8f2">.</span>alibaba<span style="color:#f8f8f2">.</span>datax<span style="color:#f8f8f2">.</span>hdfs<span style="color:#f8f8f2">.</span>odps<span style="color:#f8f8f2">.</span>mr<span style="color:#f8f8f2">.</span>HdfsToOdpsMRJob <span style="color:#f8f8f2">.</span>/bvt_case<span style="color:#f8f8f2">/</span>speed<span style="color:#f8f8f2">.</span>json</code></span>
  • 任務(wù)執(zhí)行完成后,可以看到類似如下日志:

本例子的Hdfs Reader 和Odps Writer配置信息如下:

<span style="color:#f8f8f2"><code class="language-java"><span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"core"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"transport"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"channel"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"speed"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"byte"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"-1"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"record"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"-1"</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"job"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"setting"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"speed"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"byte"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#ae81ff"><span style="color:#ae81ff">1048576</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"errorLimit"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"record"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#ae81ff"><span style="color:#ae81ff">0</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"content"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">[</span><span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"reader"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"name"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"hdfsreader"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"parameter"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"path"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"/tmp/test_datax/big_data*"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"defaultFS"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"hdfs://localhost:9000"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"column"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">[</span><span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"index"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#ae81ff"><span style="color:#ae81ff">0</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"type"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"string"</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"index"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#ae81ff"><span style="color:#ae81ff">1</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"type"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"string"</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">]</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"fileType"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"text"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"encoding"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"UTF-8"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"fieldDelimiter"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">","</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"writer"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"name"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"odpswriter"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"parameter"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"project"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">""</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"table"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">""</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"partition"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"pt=1,dt=2"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"column"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">[</span><span style="color:#a6e22e"><span style="color:#e6db74">"id"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"name"</span></span><span style="color:#f8f8f2">]</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"accessId"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">""</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"accessKey"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">""</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"truncate"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#ae81ff"><span style="color:#f92672">true</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"odpsServer"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"http://service.odps.aliyun.com/api"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"tunnelServer"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"http://dt.odps.aliyun.com"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"accountType"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"aliyun"</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">]</span><span style="color:#f8f8f2">}</span> <span style="color:#f8f8f2">}</span></code></span>

1.3 DataX-On-Hadoop 任務(wù)高級(jí)配置參數(shù)

針對(duì)上面的例子,介紹幾個(gè)性能、臟數(shù)據(jù)的參數(shù):

  • core.transport.channel.speed.byte?同步任務(wù)切分多多個(gè)mapper并發(fā)執(zhí)行,每個(gè)mapper的同步速度比特Byte上限,默認(rèn)為-1,負(fù)數(shù)表示不限速;如果是1048576表示單個(gè)mapper最大速度是1MB/s。
  • core.transport.channel.speed.record?同步任務(wù)切分多多個(gè)mapper并發(fā)執(zhí)行,每個(gè)mapper的同步速度記錄上限,默認(rèn)為-1,負(fù)數(shù)表示不限速;如果是10000表示單個(gè)mapper最大記錄速度每秒1萬(wàn)行。
  • job.setting.speed.byte?同步任務(wù)整體的最大速度,依賴hadoop 2.7.0以后的版本,主要是通過(guò)mapreduce.job.running.map.limit參數(shù)控制同一時(shí)間點(diǎn)mapper的并行度。
  • job.setting.errorLimit.record?臟數(shù)據(jù)記錄現(xiàn)在,默認(rèn)不配置表示不進(jìn)行臟數(shù)據(jù)檢查(有臟數(shù)據(jù)任務(wù)不會(huì)失敗);0表示允許臟數(shù)據(jù)條數(shù)最大為0條,如果任務(wù)執(zhí)行時(shí)臟數(shù)據(jù)超過(guò)限制,任務(wù)會(huì)失敗;1表示允許臟數(shù)據(jù)條數(shù)最大為1條,含義不言自明。一個(gè)由于臟數(shù)據(jù)原因失敗的任務(wù):

作業(yè)級(jí)別的性能參數(shù)配置位置示例:

?

<span style="color:#f8f8f2"><code class="language-java"><span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"core"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"transport"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"channel"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"speed"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"byte"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"-1"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"record"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"-1"</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"job"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"setting"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"speed"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"byte"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#ae81ff"><span style="color:#ae81ff">1048576</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"errorLimit"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"record"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#ae81ff"><span style="color:#ae81ff">0</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"content"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">[</span><span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"reader"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"writer"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">]</span><span style="color:#f8f8f2">}</span> <span style="color:#f8f8f2">}</span></code></span>

另外,介紹幾個(gè)變量替換、作業(yè)命名參數(shù):

  • 支持變量參數(shù),比如作業(yè)配置文件json中有如下:
  • ? <span style="color:#f8f8f2"><code class="language-java"><span style="color:#a6e22e"><span style="color:#e6db74">"path"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"/tmp/test_datax/dt=${dt}/abc.txt"</span></span></code></span>
    任務(wù)執(zhí)行時(shí)可以配置如下傳參,使得一份配置代碼可以多次使用:
<span style="color:#f8f8f2"><code class="language-java"><span style="color:#f8f8f2">.</span>/bin<span style="color:#f8f8f2">/</span>hadoop jar datax<span style="color:#f8f8f2">-</span>jar<span style="color:#f8f8f2">-</span>with<span style="color:#f8f8f2">-</span>dependencies<span style="color:#f8f8f2">.</span>jar com<span style="color:#f8f8f2">.</span>alibaba<span style="color:#f8f8f2">.</span>datax<span style="color:#f8f8f2">.</span>hdfs<span style="color:#f8f8f2">.</span>odps<span style="color:#f8f8f2">.</span>mr<span style="color:#f8f8f2">.</span>HdfsToOdpsMRJob datax<span style="color:#f8f8f2">.</span>json <span style="color:#f8f8f2">-</span>p <span style="color:#a6e22e"><span style="color:#e6db74">"-Ddt=20170427 -Dbizdate=123"</span></span> <span style="color:#f8f8f2">-</span>t hdfs_2_odps_mr</code></span>
  • 支持給作業(yè)命名,任務(wù)執(zhí)行時(shí)的-t參數(shù)是作業(yè)的traceId,即作業(yè)的名字方便根據(jù)作業(yè)名字即知曉其意圖,比如上面的-t hdfs_2_odps_mr

讀寫(xiě)插件詳細(xì)配置介紹,請(qǐng)見(jiàn)后續(xù)第2、3部分。

?

2. Hdfs 讀取

2.1 快速介紹

Hdfs Reader提供了讀取分布式文件系統(tǒng)數(shù)據(jù)存儲(chǔ)的能力。在底層實(shí)現(xiàn)上,Hdfs Reader獲取分布式文件系統(tǒng)上文件的數(shù)據(jù),并轉(zhuǎn)換為DataX傳輸協(xié)議傳遞給Writer。

Hdfs Reader實(shí)現(xiàn)了從Hadoop分布式文件系統(tǒng)Hdfs中讀取文件數(shù)據(jù)并轉(zhuǎn)為DataX協(xié)議的功能。textfile是Hive建表時(shí)默認(rèn)使用的存儲(chǔ)格式,數(shù)據(jù)不做壓縮,本質(zhì)上textfile就是以文本的形式將數(shù)據(jù)存放在hdfs中,對(duì)于DataX而言,Hdfs Reader實(shí)現(xiàn)上類比TxtFileReader,有諸多相似之處。orcfile,它的全名是Optimized Row Columnar file,是對(duì)RCFile做了優(yōu)化。據(jù)官方文檔介紹,這種文件格式可以提供一種高效的方法來(lái)存儲(chǔ)Hive數(shù)據(jù)。Hdfs Reader利用Hive提供的OrcSerde類,讀取解析orcfile文件的數(shù)據(jù)。目前Hdfs Reader支持的功能如下:

  • 支持textfile、orcfile、rcfile、sequence file、csv和parquet格式的文件,且要求文件內(nèi)容存放的是一張邏輯意義上的二維表。

  • 支持多種類型數(shù)據(jù)讀取(使用String表示),支持列裁剪,支持列常量。

  • 支持遞歸讀取、支持正則表達(dá)式("*"和"?")。

  • 支持orcfile數(shù)據(jù)壓縮,目前支持SNAPPY,ZLIB兩種壓縮方式。

  • 支持sequence file數(shù)據(jù)壓縮,目前支持lzo壓縮方式。

  • 多個(gè)File可以支持并發(fā)讀取。

  • csv類型支持壓縮格式有:gzip、bz2、zip、lzo、lzo_deflate、snappy。

  • 我們暫時(shí)不能做到:

  • 單個(gè)File支持多線程并發(fā)讀取,這里涉及到單個(gè)File內(nèi)部切分算法。后續(xù)可以做到支持。
  • ?

    2.2 功能說(shuō)明

    2.2.1 配置樣例

    <span style="color:#333333"><span style="color:#f8f8f2"><code class="language-java"><span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"core"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"transport"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"channel"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"speed"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"byte"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"-1048576"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"record"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"-1"</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"job"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"setting"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"speed"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"byte"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#ae81ff"><span style="color:#ae81ff">1048576</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"errorLimit"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"record"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#ae81ff"><span style="color:#ae81ff">0</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"content"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">[</span><span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"reader"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"name"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"hdfsreader"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"parameter"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"path"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"/tmp/test_datax/*"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"defaultFS"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"hdfs://localhost:9000"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"column"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">[</span><span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"index"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#ae81ff"><span style="color:#ae81ff">0</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"type"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"string"</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"index"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#ae81ff"><span style="color:#ae81ff">1</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"type"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"string"</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">]</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"fileType"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"text"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"encoding"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"UTF-8"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"fieldDelimiter"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">","</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"writer"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">]</span><span style="color:#f8f8f2">}</span> <span style="color:#f8f8f2">}</span></code></span></span>

    ?

    2.2.2 參數(shù)說(shuō)明

    • path

      • 描述:要讀取的文件路徑,如果要讀取多個(gè)文件,可以使用正則表達(dá)式"*",注意這里可以支持填寫(xiě)多個(gè)路徑。

        當(dāng)指定通配符,HdfsReader嘗試遍歷出多個(gè)文件信息。例如: 指定/*代表讀取/目錄下所有的文件,指定/yixiao/*代表讀取yixiao目錄下所有的文件。HdfsReader目前只支持"*"和"?"作為文件通配符。

        特別需要注意的是,DataX會(huì)將一個(gè)作業(yè)下同步的所有的文件視作同一張數(shù)據(jù)表。用戶必須自己保證所有的File能夠適配同一套schema信息。并且提供給DataX權(quán)限可讀。

      • 必選:是

      • 默認(rèn)值:無(wú)

    • defaultFS

      • 描述:Hadoop hdfs文件系統(tǒng)namenode節(jié)點(diǎn)地址。
      • 必選:是
      • 默認(rèn)值:無(wú)
    • fileType

      • 描述:文件的類型,目前只支持用戶配置為"text"、"orc"、"rc"、"seq"、"csv"。

        text表示textfile文件格式

        orc表示orcfile文件格式

        rc表示rcfile文件格式

        seq表示sequence file文件格式

        csv表示普通hdfs文件格式(邏輯二維表)

        特別需要注意的是,HdfsReader能夠自動(dòng)識(shí)別文件是orcfile、rcfile、sequence file還是textfile或csv類型的文件,該項(xiàng)是必填項(xiàng),HdfsReader在做數(shù)據(jù)同步之前,會(huì)檢查用戶配置的路徑下所有需要同步的文件格式是否和fileType一致,如果不一致則會(huì)拋出異常

        另外需要注意的是,由于textfile和orcfile是兩種完全不同的文件格式,所以HdfsReader對(duì)這兩種文件的解析方式也存在差異,這種差異導(dǎo)致hive支持的復(fù)雜復(fù)合類型(比如map,array,struct,union)在轉(zhuǎn)換為DataX支持的String類型時(shí),轉(zhuǎn)換的結(jié)果格式略有差異,比如以map類型為例:

        orcfile map類型經(jīng)hdfsreader解析轉(zhuǎn)換成datax支持的string類型后,結(jié)果為"{job=80, team=60, person=70}"

        textfile map類型經(jīng)hdfsreader解析轉(zhuǎn)換成datax支持的string類型后,結(jié)果為"job:80,team:60,person:70"

        從上面的轉(zhuǎn)換結(jié)果可以看出,數(shù)據(jù)本身沒(méi)有變化,但是表示的格式略有差異,所以如果用戶配置的文件路徑中要同步的字段在Hive中是復(fù)合類型的話,建議配置統(tǒng)一的文件格式。

        如果需要統(tǒng)一復(fù)合類型解析出來(lái)的格式,我們建議用戶在hive客戶端將textfile格式的表導(dǎo)成orcfile格式的表

    • column

      • 描述:讀取字段列表,type指定源數(shù)據(jù)的類型,index指定當(dāng)前列來(lái)自于文本第幾列(以0開(kāi)始),value指定當(dāng)前類型為常量,不從源頭文件讀取數(shù)據(jù),而是根據(jù)value值自動(dòng)生成對(duì)應(yīng)的列。

        默認(rèn)情況下,用戶可以全部按照string類型讀取數(shù)據(jù),配置如下:

        用戶可以指定column字段信息,配置如下:

        對(duì)于用戶指定column信息,type必須填寫(xiě),index/value必須選擇其一。

    <span style="color:#f8f8f2"><code class="language-java"><span style="color:#a6e22e"><span style="color:#e6db74">"column"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">[</span><span style="color:#a6e22e"><span style="color:#e6db74">"*"</span></span><span style="color:#f8f8f2">]</span></code></span>

    ?

    ?

    <span style="color:#f8f8f2"><code class="language-java"><span style="color:#f8f8f2">{</span> <span style="color:#a6e22e"><span style="color:#e6db74">"type"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"long"</span></span><span style="color:#f8f8f2">,</span> <span style="color:#a6e22e"><span style="color:#e6db74">"index"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#ae81ff"><span style="color:#ae81ff">0</span></span> <span style="color:slategray"><span style="color:#75715e">//從本地文件文本第一列獲取int字段</span></span> <span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span> <span style="color:#f8f8f2">{</span> <span style="color:#a6e22e"><span style="color:#e6db74">"type"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"string"</span></span><span style="color:#f8f8f2">,</span> <span style="color:#a6e22e"><span style="color:#e6db74">"value"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"alibaba"</span></span> <span style="color:slategray"><span style="color:#75715e">//HdfsReader內(nèi)部生成alibaba的字符串字段作為當(dāng)前字段</span></span> <span style="color:#f8f8f2">}</span></code></span>
    • 必選:是

    • 默認(rèn)值:全部按照string類型讀取

    • fieldDelimiter

      另外需要注意的是,HdfsReader在讀取textfile數(shù)據(jù)時(shí),需要指定字段分割符,如果不指定默認(rèn)為',',HdfsReader在讀取orcfile時(shí),用戶無(wú)需指定字段分割符,hive本身的默認(rèn)分隔符為 "\u0001";若你想將每一行作為目的端的一列,分隔符請(qǐng)使用行內(nèi)容不存在的字符,比如不可見(jiàn)字符"\u0001"?,分隔符不能使用\n

      • 描述:讀取的字段分隔符
      • 必選:否
      • 默認(rèn)值:,
    • encoding

      • 描述:讀取文件的編碼配置。
      • 必選:否
      • 默認(rèn)值:utf-8
    • nullFormat

      • 描述:文本文件中無(wú)法使用標(biāo)準(zhǔn)字符串定義null(空指針),DataX提供nullFormat定義哪些字符串可以表示為null。

        例如如果用戶配置: nullFormat:"\N",那么如果源頭數(shù)據(jù)是"\N",DataX視作null字段。

      • 必選:否

      • 默認(rèn)值:無(wú)

    • compress

      • 描述:當(dāng)fileType(文件類型)為csv下的文件壓縮方式,目前僅支持 gzip、bz2、zip、lzo、lzo_deflate、hadoop-snappy、framing-snappy壓縮;值得注意的是,lzo存在兩種壓縮格式:lzo和lzo_deflate,用戶在配置的時(shí)候需要留心,不要配錯(cuò)了;另外,由于snappy目前沒(méi)有統(tǒng)一的stream format,datax目前只支持最主流的兩種:hadoop-snappy(hadoop上的snappy stream format)和framing-snappy(google建議的snappy stream format);orc文件類型下無(wú)需填寫(xiě)。
      • 必選:否
      • 默認(rèn)值:無(wú)
    • csvReaderConfig

      • 描述:讀取CSV類型文件參數(shù)配置,Map類型。讀取CSV類型文件使用的CsvReader進(jìn)行讀取,會(huì)有很多配置,不配置則使用默認(rèn)值。
      • 必選:否
      • 默認(rèn)值:無(wú)

        常見(jiàn)配置:

        <span style="color:#f8f8f2"><code class="language-java"><span style="color:#a6e22e"><span style="color:#e6db74">"csvReaderConfig"</span></span><span style="color:#f8f8f2">:</span><span style="color:#f8f8f2">{</span> <span style="color:#a6e22e"><span style="color:#e6db74">"safetySwitch"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#ae81ff"><span style="color:#f92672">false</span></span><span style="color:#f8f8f2">,</span> <span style="color:#a6e22e"><span style="color:#e6db74">"skipEmptyRecords"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#ae81ff"><span style="color:#f92672">false</span></span><span style="color:#f8f8f2">,</span> <span style="color:#a6e22e"><span style="color:#e6db74">"useTextQualifier"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#ae81ff"><span style="color:#f92672">false</span></span> <span style="color:#f8f8f2">}</span></code></span> ?

        所有配置項(xiàng)及默認(rèn)值,配置時(shí) csvReaderConfig 的map中請(qǐng)嚴(yán)格按照以下字段名字進(jìn)行配置

    • hadoopConfig

    描述:hadoopConfig里可以配置與Hadoop相關(guān)的一些高級(jí)參數(shù),比如HA的配置。

    <span style="color:#f8f8f2"><code class="language-java"><span style="color:#a6e22e"><span style="color:#e6db74">"hadoopConfig"</span></span><span style="color:#f8f8f2">:</span><span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"dfs.nameservices"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"testDfs"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"dfs.ha.namenodes.testDfs"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"namenode1,namenode2"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"dfs.namenode.rpc-address.youkuDfs.namenode1"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">""</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"dfs.namenode.rpc-address.youkuDfs.namenode2"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">""</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"dfs.client.failover.proxy.provider.testDfs"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"</span></span> <span style="color:#f8f8f2">}</span></code></span>

    ?

    • ???????必選:否
    • 默認(rèn)值:無(wú)

    • minInputSplitSize

      • 描述:Hadoop hdfs部分文件類型支持文件內(nèi)部切分,這樣一個(gè)文件可以被切分到多個(gè)mapper里面并發(fā)執(zhí)行,每個(gè)mapper讀取這個(gè)文件的一部分。這邊測(cè)試環(huán)境驗(yàn)證確實(shí)可以做到速度的 線性 擴(kuò)展。注意:由于切分的粒度更細(xì)了,啟動(dòng)mapper數(shù)量多可能占用的機(jī)器資源也多一些。目前支持文件內(nèi)部切分的文件類型有: rc、text、csv、parquet
      • 必選:否
      • 默認(rèn)值:無(wú)限大

    ?

    2.3 類型轉(zhuǎn)換

    2.3.1 RCFile

    如果用戶同步的hdfs文件是rcfile,由于rcfile底層存儲(chǔ)的時(shí)候不同的數(shù)據(jù)類型存儲(chǔ)方式不一樣,而HdfsReader不支持對(duì)Hive元數(shù)據(jù)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)查詢,因此需要用戶在column type里指定該column在hive表中的數(shù)據(jù)類型,比如該column是bigint型。那么type就寫(xiě)為bigint,如果是double型,則填寫(xiě)double,如果是float型,則填寫(xiě)float。注意:如果是varchar或者char類型,則需要填寫(xiě)字節(jié)數(shù),比如varchar(255),char(30)等,跟hive表中該字段的類型保持一致,或者也可以填寫(xiě)string類型。

    如果column配置的是*,會(huì)讀取所有column,那么datax會(huì)默認(rèn)以string類型讀取所有column,此時(shí)要求column中的類型只能為String,CHAR,VARCHAR中的一種。

    RCFile中的類型默認(rèn)會(huì)轉(zhuǎn)成DataX支持的內(nèi)部類型,對(duì)照表如下:

    RCFile在Hive表中的數(shù)據(jù)類型DataX 內(nèi)部類型
    TINYINT,SMALLINT,INT,BIGINTLong
    FLOAT,DOUBLE,DECIMALDouble
    String,CHAR,VARCHARString
    BOOLEANBoolean
    Date,TIMESTAMPDate
    BinaryBinary

    2.3.2 ParquetFile

    如果column配置的是*, 會(huì)讀取所有列; 此時(shí)Datax會(huì)默認(rèn)以String類型讀取所有列. 如果列中出現(xiàn)Double等類型的話, 全部將轉(zhuǎn)換為String類型。如果column配置讀取特定的列的話, DataX中的類型和Parquet文件類型的對(duì)應(yīng)關(guān)系如下:

    Parquet格式文件的數(shù)據(jù)類型DataX 內(nèi)部類型
    int32, int64, int96Long
    float, doubleDouble
    binaryBinary
    booleanBoolean
    fixed_len_byte_arrayString

    textfile,orcfile,sequencefile:

    由于textfile和orcfile文件表的元數(shù)據(jù)信息由Hive維護(hù)并存放在Hive自己維護(hù)的數(shù)據(jù)庫(kù)(如mysql)中,目前HdfsReader不支持對(duì)Hive元數(shù)據(jù)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)查詢,因此用戶在進(jìn)行類型轉(zhuǎn)換的時(shí)候,必須指定數(shù)據(jù)類型,如果用戶配置的column為"*",則所有column默認(rèn)轉(zhuǎn)換為string類型。HdfsReader提供了類型轉(zhuǎn)換的建議表如下:

    DataX 內(nèi)部類型Hive表 數(shù)據(jù)類型
    LongTINYINT,SMALLINT,INT,BIGINT
    DoubleFLOAT,DOUBLE
    StringString,CHAR,VARCHAR,STRUCT,MAP,ARRAY,UNION,BINARY
    BooleanBOOLEAN
    DateDate,TIMESTAMP

    其中:

    • Long是指Hdfs文件文本中使用整形的字符串表示形式,例如"123456789"。
    • Double是指Hdfs文件文本中使用Double的字符串表示形式,例如"3.1415"。
    • Boolean是指Hdfs文件文本中使用Boolean的字符串表示形式,例如"true"、"false"。不區(qū)分大小寫(xiě)。
    • Date是指Hdfs文件文本中使用Date的字符串表示形式,例如"2014-12-31"。

    特別提醒:

    • Hive支持的數(shù)據(jù)類型TIMESTAMP可以精確到納秒級(jí)別,所以textfile、orcfile中TIMESTAMP存放的數(shù)據(jù)類似于"2015-08-21 22:40:47.397898389",如果轉(zhuǎn)換的類型配置為DataX的Date,轉(zhuǎn)換之后會(huì)導(dǎo)致納秒部分丟失,所以如果需要保留納秒部分的數(shù)據(jù),請(qǐng)配置轉(zhuǎn)換類型為DataX的String類型。

    2.4 按分區(qū)讀取

    Hive在建表的時(shí)候,可以指定分區(qū)partition,例如創(chuàng)建分區(qū)partition(day="20150820",hour="09"),對(duì)應(yīng)的hdfs文件系統(tǒng)中,相應(yīng)的表的目錄下則會(huì)多出/20150820和/09兩個(gè)目錄,且/20150820是/09的父目錄。了解了分區(qū)都會(huì)列成相應(yīng)的目錄結(jié)構(gòu),在按照某個(gè)分區(qū)讀取某個(gè)表所有數(shù)據(jù)時(shí),則只需配置好json中path的值即可。

    比如需要讀取表名叫mytable01下分區(qū)day為20150820這一天的所有數(shù)據(jù),則配置如下:

    <span style="color:#f8f8f2"><code class="language-java"><span style="color:#a6e22e"><span style="color:#e6db74">"path"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"/user/hive/warehouse/mytable01/20150820/*"</span></span></code></span>

    ?


    3. MaxCompute寫(xiě)入

    3.1 快速介紹

    ODPSWriter插件用于實(shí)現(xiàn)往ODPS(即MaxCompute)插入或者更新數(shù)據(jù),主要提供給etl開(kāi)發(fā)同學(xué)將業(yè)務(wù)數(shù)據(jù)導(dǎo)入MaxCompute,適合于TB,GB數(shù)量級(jí)的數(shù)據(jù)傳輸。在底層實(shí)現(xiàn)上,根據(jù)你配置的 項(xiàng)目 / 表 / 分區(qū) / 表字段 等信息,通過(guò) Tunnel寫(xiě)入 MaxCompute 中。支持MaxCompute中以下數(shù)據(jù)類型:BIGINT、DOUBLE、STRING、DATATIME、BOOLEAN。下面列出ODPSWriter針對(duì)MaxCompute類型轉(zhuǎn)換列表:

    DataX 內(nèi)部類型MaxCompute 數(shù)據(jù)類型
    Longbigint
    Doubledouble
    Stringstring
    Datedatetime
    Booleanbool

    3.2 實(shí)現(xiàn)原理

    在底層實(shí)現(xiàn)上,ODPSWriter是通過(guò)MaxCompute Tunnel寫(xiě)入MaxCompute系統(tǒng)的,有關(guān)MaxCompute的更多技術(shù)細(xì)節(jié)請(qǐng)參看 MaxCompute主站:?https://www.aliyun.com/product/odps

    3.3 功能說(shuō)明

    3.3.1 配置樣例

    • 這里使用一份從內(nèi)存產(chǎn)生到MaxCompute導(dǎo)入的數(shù)據(jù)。 <span style="color:#f8f8f2"><code class="language-java"><span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"core"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"transport"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"channel"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"speed"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"byte"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"-1048576"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"record"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"-1"</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"job"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"setting"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"speed"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"byte"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#ae81ff"><span style="color:#ae81ff">1048576</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"errorLimit"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"record"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#ae81ff"><span style="color:#ae81ff">0</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"content"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">[</span><span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"reader"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"writer"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"name"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"odpswriter"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"parameter"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">{</span><span style="color:#a6e22e"><span style="color:#e6db74">"project"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">""</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"table"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">""</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"partition"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"pt=1,dt=2"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"column"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#f8f8f2">[</span><span style="color:#a6e22e"><span style="color:#e6db74">"col1"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"col2"</span></span><span style="color:#f8f8f2">]</span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"accessId"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">""</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"accessKey"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">""</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"truncate"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#ae81ff"><span style="color:#f92672">true</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"odpsServer"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"http://service.odps.aliyun.com/api"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"tunnelServer"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"http://dt.odps.aliyun.com"</span></span><span style="color:#f8f8f2">,</span><span style="color:#a6e22e"><span style="color:#e6db74">"accountType"</span></span><span style="color:#f8f8f2">:</span> <span style="color:#a6e22e"><span style="color:#e6db74">"aliyun"</span></span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">]</span><span style="color:#f8f8f2">}</span> <span style="color:#f8f8f2">}</span></code></span>

    3.3.2 參數(shù)說(shuō)明

    • accessId

      • 描述:MaxCompute系統(tǒng)登錄ID
      • 必選:是
      • 默認(rèn)值:無(wú)
    • accessKey

      • 描述:MaxCompute系統(tǒng)登錄Key
      • 必選:是
      • 默認(rèn)值:無(wú)
    • project

      • 描述:MaxCompute表所屬的project,注意:Project只能是字母+數(shù)字組合,請(qǐng)?zhí)顚?xiě)英文名稱。在云端等用戶看到的MaxCompute項(xiàng)目中文名只是顯示名,請(qǐng)務(wù)必填寫(xiě)底層真實(shí)地Project英文標(biāo)識(shí)名。
      • 必選:是
      • 默認(rèn)值:無(wú)
    • table

      • 描述:寫(xiě)入數(shù)據(jù)的表名,不能填寫(xiě)多張表,因?yàn)镈ataX不支持同時(shí)導(dǎo)入多張表。
      • 必選:是
      • 默認(rèn)值:無(wú)
    • partition

      • 描述:需要寫(xiě)入數(shù)據(jù)表的分區(qū)信息,必須指定到最后一級(jí)分區(qū)。把數(shù)據(jù)寫(xiě)入一個(gè)三級(jí)分區(qū)表,必須配置到最后一級(jí)分區(qū),例如pt=20150101/type=1/biz=2。
      • 必選:如果是分區(qū)表,該選項(xiàng)必填,如果非分區(qū)表,該選項(xiàng)不可填寫(xiě)。
      • 默認(rèn)值:空
    • column

      • 描述:需要導(dǎo)入的字段列表,當(dāng)導(dǎo)入全部字段時(shí),可以配置為"column": ["*"], 當(dāng)需要插入部分MaxCompute列填寫(xiě)部分列,例如"column": ["id", "name"]。ODPSWriter支持列篩選、列換序,例如表有a,b,c三個(gè)字段,用戶只同步c,b兩個(gè)字段。可以配置成["c","b"], 在導(dǎo)入過(guò)程中,字段a自動(dòng)補(bǔ)空,設(shè)置為null。
      • 必選:否
      • 默認(rèn)值:無(wú)
    • truncate

      • 描述:ODPSWriter通過(guò)配置"truncate": true,保證寫(xiě)入的冪等性,即當(dāng)出現(xiàn)寫(xiě)入失敗再次運(yùn)行時(shí),ODPSWriter將清理前述數(shù)據(jù),并導(dǎo)入新數(shù)據(jù),這樣可以保證每次重跑之后的數(shù)據(jù)都保持一致。

        truncate選項(xiàng)不是原子操作!MaxCompute SQL無(wú)法做到原子性。因此當(dāng)多個(gè)任務(wù)同時(shí)向一個(gè)Table/Partition清理分區(qū)時(shí)候,可能出現(xiàn)并發(fā)時(shí)序問(wèn)題,請(qǐng)務(wù)必注意!針對(duì)這類問(wèn)題,我們建議盡量不要多個(gè)作業(yè)DDL同時(shí)操作同一份分區(qū),或者在多個(gè)并發(fā)作業(yè)啟動(dòng)前,提前創(chuàng)建分區(qū)。

      • 必選:是

      • 默認(rèn)值:無(wú)

    • odpsServer

      • 描述:MaxCompute的server,詳細(xì)可以參考文檔https://help.aliyun.com/document_detail/34951.html

      線上公網(wǎng)地址為?http://service.cn.maxcompute.aliyun.com/api

      • 必選:是
      • 默認(rèn)值:無(wú)
    • tunnelServer

      • 描述:MaxCompute的tunnelserver,詳細(xì)可以參考文檔https://help.aliyun.com/document_detail/34951.html

      線上公網(wǎng)地址為?http://dt.cn-beijing.maxcompute.aliyun-inc.com

      • 必選:是
      • 默認(rèn)值:無(wú)
    • blockSizeInMB

      • 描述:為了提高數(shù)據(jù)寫(xiě)出MaxCompute的效率ODPSWriter會(huì)攢數(shù)據(jù)buffer,待數(shù)據(jù)達(dá)到一定大小后會(huì)進(jìn)行一次數(shù)據(jù)提交。blockSizeInMB即為攢數(shù)據(jù)buffer的大小,默認(rèn)是64MB。
      • 必選:否
      • 默認(rèn)值:64


    原文鏈接
    本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的Hadoop迁移MaxCompute神器之DataX-On-Hadoop使用指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。