国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

二次開發(fā)DataX以支持HIVE分區(qū)表

這篇具有很好參考價(jià)值的文章主要介紹了二次開發(fā)DataX以支持HIVE分區(qū)表。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

問題

????????最近在一個(gè)大數(shù)據(jù)的項(xiàng)目開發(fā)中使用到了數(shù)據(jù)同步工具DataX,但在使用過程中發(fā)現(xiàn)了DataX對HIve分區(qū)表的支持不太友好。

????????具體體現(xiàn)在將數(shù)據(jù)庫中的數(shù)據(jù)同步到HIVE分區(qū)表時(shí),寫入目錄為HIVE表分區(qū)為dt=XXXX,如果不提前創(chuàng)建該分區(qū),會(huì)報(bào)目錄不存在的錯(cuò)誤,如下圖:

datax hivewriter,大數(shù)據(jù),DataX Web,大數(shù)據(jù),java?

?文章來源地址http://www.zghlxwxcb.cn/news/detail-574573.html

原因分析?

? ? ? ? ?這個(gè)錯(cuò)誤是由于DataX不支持在HDFS上創(chuàng)建目錄導(dǎo)致的。

?

解決辦法

????????二次開發(fā)DataX,在寫入時(shí)檢測目錄,若目錄不存在自動(dòng)創(chuàng)建此分區(qū)目錄。

步驟:1.從GitHub下載datax源碼? 鏈接

? ? ? ? ? ?2.修改hdfswriter目錄下的HdfsWriter.java源碼,重寫里面的prepare方法:

    @Override
    public void prepare() {
        //若路徑已經(jīng)存在,檢查path是否是目錄
        if (hdfsHelper.isPathexists(path)) {
            if (!hdfsHelper.isPathDir(path)) {
                throw DataXException.asDataXException(HdfsWriterErrorCode.ILLEGAL_VALUE,
                        String.format("您配置的path: [%s] 不是一個(gè)合法的目錄, 請您注意文件重名, 不合法目錄名等情況.",
                                path));
            }
            //根據(jù)writeMode對目錄下文件進(jìn)行處理
            Path[] existFilePaths = hdfsHelper.hdfsDirList(path, fileName);
            boolean isExistFile = false;
            if (existFilePaths.length > 0) {
                isExistFile = true;
            }
            if ("append".equalsIgnoreCase(writeMode)) {
                LOG.info(String.format("由于您配置了writeMode append, 寫入前不做清理工作, [%s] 目錄下寫入相應(yīng)文件名前綴  [%s] 的文件",
                        path, fileName));
            } else if ("nonconflict".equalsIgnoreCase(writeMode) && isExistFile) {
                LOG.info(String.format("由于您配置了writeMode nonConflict, 開始檢查 [%s] 下面的內(nèi)容", path));
                List<String> allFiles = new ArrayList<String>();
                for (Path eachFile : existFilePaths) {
                    allFiles.add(eachFile.toString());
                }
                LOG.error(String.format("沖突文件列表為: [%s]", StringUtils.join(allFiles, ",")));
                throw DataXException.asDataXException(HdfsWriterErrorCode.ILLEGAL_VALUE,
                        String.format("由于您配置了writeMode nonConflict,但您配置的path: [%s] 目錄不為空, 下面存在其他文件或文件夾.", path));
            } else if ("truncate".equalsIgnoreCase(writeMode) && isExistFile) {
                LOG.info(String.format("由于您配置了writeMode truncate,  [%s] 下面的內(nèi)容將被覆蓋重寫", path));
                hdfsHelper.deleteFiles(existFilePaths);
            }
        } else {
            LOG.info(String.format("您配置的路徑: [%s] 不存在,自動(dòng)為您創(chuàng)建此路徑", path));
            hdfsHelper.createPath(path);
        }
    }

? ? ? ? ? ?3.修改hdfswriter目錄下的HdfsHelper.java源碼,在里面添加createPath方法:

    public boolean createPath(String filePath) {
        Path path = new Path(filePath);
        boolean exist = false;
        try {
            if (fileSystem.exists(path)) {
                String message = String.format("文件路徑[%s]已存在,無需創(chuàng)建!",
                        "message:filePath =" + filePath);
                LOG.info(message);
                exist = true;
            } else {
                exist = fileSystem.mkdirs(path);
            }
        } catch (IOException e) {
            String message = String.format("創(chuàng)建文件路徑[%s]時(shí)發(fā)生網(wǎng)絡(luò)IO異常,請檢查您的網(wǎng)絡(luò)是否正常!",
                    "message:filePath =" + filePath);
            LOG.error(message);
            throw DataXException.asDataXException(HdfsWriterErrorCode.CONNECT_HDFS_IO_ERROR, e);
        }
        return exist;
    }

? ? ? ? ? ?4.打包修改后的源碼,并替換掉集群的datax安裝目錄datax/plugin/writer/hdfswriter/hdfswriter-0.0.1-SNAPSHOT.jar即可。(在DataX-master根目錄下的pom.xml文件核心組件、公共組件、reader/writer插件都以module的方式組裝到一起了,把不需要的注釋掉可加快打包速度)

?

處理結(jié)果

? ? ? ? 二次開發(fā)后完美運(yùn)行:

????????datax hivewriter,大數(shù)據(jù),DataX Web,大數(shù)據(jù),java

?

?

到了這里,關(guān)于二次開發(fā)DataX以支持HIVE分區(qū)表的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • HIVE創(chuàng)建分區(qū)表

    HIVE創(chuàng)建分區(qū)表

    partitioned by ( c2 string ) # 創(chuàng)建分區(qū) c1跟c2都是字段,但是創(chuàng)建的時(shí)候不能寫在t2里面,只能寫在分區(qū)里面(同時(shí)select查詢的時(shí)候,c2的字段也要寫在最后面) 要加載數(shù)據(jù)到分區(qū)表,只需在原來的加載數(shù)據(jù)的語句上增加partition,同時(shí)指定分區(qū)的字段值即可。 注意:當(dāng)你退出

    2024年02月15日
    瀏覽(22)
  • Hive 分區(qū)表 (Partitioned Tables) 『 創(chuàng)建分區(qū)表 | CRUD分區(qū) | 修復(fù)分區(qū) | 數(shù)據(jù)導(dǎo)入(靜態(tài)分區(qū)、動(dòng)態(tài)分區(qū)) | 查詢數(shù)據(jù)/表結(jié)構(gòu)』

    Hive 分區(qū)表 (Partitioned Tables) 『 創(chuàng)建分區(qū)表 | CRUD分區(qū) | 修復(fù)分區(qū) | 數(shù)據(jù)導(dǎo)入(靜態(tài)分區(qū)、動(dòng)態(tài)分區(qū)) | 查詢數(shù)據(jù)/表結(jié)構(gòu)』

    條件:假如現(xiàn)有一個(gè)角色表 t_all_hero ,該表中有6個(gè)清洗干凈的互不干擾的數(shù)據(jù)文件:射手、坦克、戰(zhàn)士、法師、刺客、輔助 要求:查找出名字為射手且生命值大于6000的角色人數(shù) 慣性解決方法:按照MySQL思維很容易想到 問:如何提高效率?這樣雖然能夠解決問題,但是由于要

    2024年02月04日
    瀏覽(39)
  • Hive分區(qū)表修改(增刪)列

    環(huán)境:CDH6.3.0,Hive 2.1.1-cdh6.3.0 基礎(chǔ)數(shù)據(jù)分區(qū)表test1,包含a,b,c,d共4列加分區(qū)列p_day,向其中插入兩行數(shù)據(jù) 表中數(shù)據(jù)及parquet文件信息如下: test2表直接使用test1表的文件: 修復(fù)分區(qū)并查詢數(shù)據(jù) 刪除test2表的a列,看起來只有通過replace columns實(shí)現(xiàn),但是運(yùn)行報(bào)錯(cuò),根據(jù)官方文檔,只

    2023年04月26日
    瀏覽(23)
  • Hive 分區(qū)表和分桶表

    在《Hive 建表語句解析》文章中,建表的時(shí)候我們可以使用 PARTITIONED BY 子句和 CLUSTERED BY 子句來創(chuàng)建分區(qū)表和分桶表,為什么要?jiǎng)?chuàng)建分區(qū)表和分桶表呢?分區(qū)表和分桶表有什么區(qū)別呢? 1. 為什么分區(qū) 在Hive 查詢中一般會(huì)掃描整個(gè)表內(nèi)容,會(huì)消耗很多時(shí)間做沒必要的工作。有時(shí)

    2023年04月23日
    瀏覽(46)
  • Hive ---- 分區(qū)表和分桶表

    Hive ---- 分區(qū)表和分桶表

    Hive中的分區(qū)就是把一張大表的數(shù)據(jù)按照業(yè)務(wù)需要分散的存儲(chǔ)到多個(gè)目錄,每個(gè)目錄就稱為該表的一個(gè)分區(qū)。在查詢時(shí)通過where子句中的表達(dá)式選擇查詢所需要的分區(qū),這樣的查詢效率會(huì)提高很多。 1. 創(chuàng)建分區(qū)表 2. 分區(qū)表讀寫數(shù)據(jù) 1)寫數(shù)據(jù) (1)load 數(shù)據(jù)準(zhǔn)備 在/opt/module/hiv

    2024年02月10日
    瀏覽(56)
  • Hive 分區(qū)表新增字段 cascade

    在以前上線的分區(qū)表中新加一個(gè)字段,并且要求添加到指定的位置列。 加 cascade 操作 創(chuàng)建測試表 插入測試數(shù)據(jù) 查看現(xiàn)有數(shù)據(jù) 官網(wǎng)添加列的語法 注意: Hive 1.1.0 中有 CASCADE|RESTRICT 子句。 ALTER TABLE ADD|REPLACE COLUMNS CASCADE 命令修改表元數(shù)據(jù)的列,并將相同的更改級聯(lián)到所有分區(qū)

    2024年02月11日
    瀏覽(22)
  • Hive創(chuàng)建分區(qū)表并插入數(shù)據(jù)

    業(yè)務(wù)中經(jīng)常會(huì)遇到這種需求:數(shù)據(jù)每天全量更新,但是要求月底將數(shù)據(jù)單獨(dú)保存一份以供后期查詢某月節(jié)點(diǎn)的信息。這時(shí)就要考慮用到Hive的分區(qū)表實(shí)現(xiàn),即按照月份創(chuàng)建分區(qū)表,相當(dāng)于新的月份數(shù)據(jù)保存在新表,進(jìn)而實(shí)現(xiàn)保存了歷史數(shù)據(jù)。 分區(qū)表的創(chuàng)建本質(zhì)是在HDFS創(chuàng)建了一

    2024年02月07日
    瀏覽(22)
  • 【Hive大數(shù)據(jù)】Hive分區(qū)表與分桶表使用詳解

    目錄 一、分區(qū)概念產(chǎn)生背景 二、分區(qū)表特點(diǎn) 三、分區(qū)表類型 3.1 單分區(qū) 3.2 多分區(qū)

    2024年02月03日
    瀏覽(28)
  • HIVE表數(shù)據(jù)快速構(gòu)造(分區(qū)表、orc、text)

    HIVE表數(shù)據(jù)快速構(gòu)造(分區(qū)表、orc、text)

    引言 當(dāng)需要在hive數(shù)倉中去創(chuàng)建測試表并構(gòu)造測試數(shù)據(jù)時(shí),通常需要在安裝了hive客戶端的服務(wù)器環(huán)境下,通過執(zhí)行命令的方式建表。通過在HDFS上上傳和加載數(shù)據(jù)文件的方式來加載數(shù)據(jù)到hive表中。其中操作算不得多復(fù)雜,但比較依賴對環(huán)境和命令的熟悉,并且操作不夠可視化

    2024年02月16日
    瀏覽(40)
  • hive分區(qū)表之insert overwrite 注意事項(xiàng)

    hive分區(qū)表之insert overwrite 注意事項(xiàng)

    hive version 3.1.3 以往我們插入分區(qū) 需要 insert ovewrite table? p_table partition(period_id=‘202212’)? select id name from xxxx; ?或者是 insert overwrite table? select? id,name,period_id from table where period_id=202212 前者是指定分區(qū),后者是動(dòng)態(tài)分區(qū)。沒啥好說的。 但是今天遇到一個(gè)問題,如果我查詢的數(shù)

    2024年02月13日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包