欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決sqoop import 導(dǎo)入到hive后數(shù)據(jù)量變多的問(wèn)題

 更新時(shí)間:2020年12月31日 09:32:55   作者:lee_moonj  
這篇文章主要介紹了解決sqoop import 導(dǎo)入到hive后數(shù)據(jù)量變多的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

使用sqoop import 命令從postgresql導(dǎo)入數(shù)據(jù)到hive中,發(fā)現(xiàn)數(shù)據(jù)行數(shù)變多了,但是任務(wù)沒(méi)有跑錯(cuò),非常奇怪。

導(dǎo)入語(yǔ)句為:

sqoop import 
--connect jdbc:postgresql://*.*.*.*:5432/database_name 
--username name111 
--password password111 
--table table111 
--hive-import 
--hive-database database111 
--hive-table hive_table111 
--hive-overwrite 
--delete-target-dir 
--hive-drop-import-delims 
--null-string ''
 --null-non-string '' 
 -m5

導(dǎo)入前pgsql數(shù)據(jù)量為3698條,但是導(dǎo)入后再hive中的數(shù)據(jù)量為3938,數(shù)據(jù)竟然變多了。最后發(fā)現(xiàn)將參數(shù)-m5,改為-m1即可解決問(wèn)題。

為什么呢?

我們先來(lái)了解一下參數(shù)-m的含義以及sqoop導(dǎo)入的原理。

首先用戶輸入一個(gè) Sqoop import 命令,Sqoop 會(huì)從關(guān)系型數(shù)據(jù)庫(kù)中獲取元數(shù)據(jù)信息,比如要操作數(shù)據(jù)庫(kù)表的 schema是什么樣子,這個(gè)表有哪些字段,這些字段都是什么數(shù)據(jù)類型等。它獲取這些信息之后,會(huì)將輸入命令轉(zhuǎn)化為基于 Map 的 MapReduce作業(yè),這樣 MapReduce作業(yè)中有很多 Map 任務(wù),每個(gè) Map 任務(wù)從數(shù)據(jù)庫(kù)中讀取一片數(shù)據(jù),這樣多個(gè) Map 任務(wù)實(shí)現(xiàn)并發(fā)的拷貝,把整個(gè)數(shù)據(jù)快速的拷貝到 HDFS 上。

而決定切分成多少個(gè)map就是參數(shù)-m的作用,-m5代表切分為5個(gè)map,-m1代表切分為1個(gè)map,即不用切分。

而決定用什么字段來(lái)切分,就是用--split-by來(lái)制定的。當(dāng)sqoop import 沒(méi)有定義--split-by時(shí),默認(rèn)使用源數(shù)據(jù)表的key作為切分字段。

split-by 根據(jù)不同的參數(shù)類型有不同的切分方法,如int型,Sqoop會(huì)取最大和最小split-by字段值,然后根據(jù)傳入的num-mappers來(lái) 確定劃分幾個(gè)區(qū)域。比如select max(split_by),min(split-by) from得到的max(split-by)和min(split-by)分別為1000和1,而num-mappers(-m)為2的話,則會(huì)分成兩個(gè)區(qū)域 (1,500)和(501-1000),同時(shí)也會(huì)分成2個(gè)sql給2個(gè)map去進(jìn)行導(dǎo)入操作,分別為select XXX from table where split-by>=1 and split-by<500和select XXX from table where split-by>=501 and split-by<=1000.最后每個(gè)map各自獲取各自SQL中的數(shù)據(jù)進(jìn)行導(dǎo)入工作。

那回到最開(kāi)始的問(wèn)題,為什么切分?jǐn)?shù)目不一樣,結(jié)果就不一樣呢?理論上無(wú)論怎么切分,導(dǎo)入的數(shù)據(jù)都應(yīng)該是一樣的,但現(xiàn)在甚至還多了?這是因?yàn)椋脕?lái)切分的字段不友好,不是int型或者有排序規(guī)律的。

這種id內(nèi)容是沒(méi)有排序規(guī)則的,比如本來(lái)10條id切兩份得到(5,5),現(xiàn)在切出來(lái)時(shí)(5,6),有一個(gè)id重復(fù)了,就導(dǎo)致數(shù)量變多了。

所以解決辦法有兩個(gè):

一是將 -m5 改成 -m1 直接不切分;

二是 --split-by制定另外的字段,換一個(gè)int型的或者有明確排序順序的字段。

除了以上這種原因?qū)е聰?shù)據(jù)變多,語(yǔ)句缺少 --hive-drop-import-delims 也可能導(dǎo)致問(wèn)題的出現(xiàn),解決如下:

關(guān)于在sqoop導(dǎo)入數(shù)據(jù)的時(shí)候,數(shù)據(jù)量變多的解決方案。

今天使用sqoop導(dǎo)入一張表,我去查數(shù)據(jù)庫(kù)當(dāng)中的數(shù)據(jù)量為650條數(shù)據(jù),但是我將數(shù)據(jù)導(dǎo)入到hive表當(dāng)中的時(shí)候出現(xiàn)了563條數(shù)據(jù),這就很奇怪了,我以為是數(shù)據(jù)錯(cuò)了,然后多導(dǎo)入了幾次數(shù)據(jù)發(fā)現(xiàn)還是一樣的問(wèn)題。

然后我去查數(shù)據(jù)字段ID的值然后發(fā)現(xiàn)建了主鍵的數(shù)據(jù)怎么可能為空的那。然后我去看數(shù)據(jù)庫(kù)當(dāng)中的數(shù)據(jù)發(fā)現(xiàn),數(shù)據(jù)在存入的時(shí)候不知道加入了什么鬼東西,導(dǎo)致數(shù)據(jù)從哪一行截?cái)嗔耍瑢?dǎo)致多出現(xiàn)了三條數(shù)據(jù)。下面是有問(wèn)題的字段。

這里我也不知道數(shù)據(jù)為啥會(huì)是這樣,我猜想是在導(dǎo)入數(shù)據(jù)的時(shí)候hive默認(rèn)行的分割符號(hào)是按照\(chéng)n的形式導(dǎo)入進(jìn)來(lái)的,到這里遇到了這樣的字符就對(duì)其按照下一行進(jìn)行對(duì)待將數(shù)據(jù)截?cái)嗔恕?/p>

然后我測(cè)試了一直自定義的去指定hive的行的分割符號(hào),使用--lines-terminated-by 指定hive的行的分割符號(hào),但是不幸的是好像這個(gè)是不能改的。他會(huì)報(bào)下面的錯(cuò)誤:

FAILED: SemanticException 1:424 LINES TERMINATED BY only supports newline '\n' right now. Error encountered near token ''\164'' 于是上網(wǎng)找資料,然后發(fā)現(xiàn)可以使用一個(gè)配置清除掉hive當(dāng)中默認(rèn)的分割符號(hào),然后導(dǎo)入數(shù)據(jù),配置如下: --hive-drop-import-delims 這個(gè)參數(shù)是去掉hive默認(rèn)的分割符號(hào),加上這個(gè)參數(shù)然后在使用--fields-terminated-by 指定hive的行的分割符號(hào) 最終數(shù)據(jù)導(dǎo)入成功,數(shù)據(jù)量和原來(lái)數(shù)庫(kù)當(dāng)中的數(shù)據(jù)一致。

上面是sqoop腳本的部分內(nèi)容,下面是執(zhí)行完hive之后,hive創(chuàng)建的表,字段之間默認(rèn)的分割符號(hào)。

至此問(wèn)題得到了解決。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Postgresql查詢效率計(jì)算初探

    Postgresql查詢效率計(jì)算初探

    這篇文章主要給大家介紹了關(guān)于Postgresql查詢效率計(jì)算的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Postgresql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • postgresql中時(shí)間轉(zhuǎn)換和加減操作

    postgresql中時(shí)間轉(zhuǎn)換和加減操作

    這篇文章主要介紹了postgresql中時(shí)間轉(zhuǎn)換和加減操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • PostgreSQL 正則表達(dá)式替換-使用變量方式

    PostgreSQL 正則表達(dá)式替換-使用變量方式

    這篇文章主要介紹了PostgreSQL 正則表達(dá)式替換-使用變量方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • pgsql查詢優(yōu)化之模糊查詢實(shí)例詳解

    pgsql查詢優(yōu)化之模糊查詢實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于pgsql查詢優(yōu)化之模糊查詢的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用pgsql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • postgreSQL 非count方法算記錄數(shù)操作

    postgreSQL 非count方法算記錄數(shù)操作

    這篇文章主要介紹了postgreSQL 非count方法算記錄數(shù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 查看postgresql數(shù)據(jù)庫(kù)用戶系統(tǒng)權(quán)限、對(duì)象權(quán)限的方法

    查看postgresql數(shù)據(jù)庫(kù)用戶系統(tǒng)權(quán)限、對(duì)象權(quán)限的方法

    這篇文章主要介紹了查看postgresql數(shù)據(jù)庫(kù)用戶系統(tǒng)權(quán)限、對(duì)象權(quán)限的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Mybatis調(diào)用PostgreSQL存儲(chǔ)過(guò)程實(shí)現(xiàn)數(shù)組入?yún)鬟f

    Mybatis調(diào)用PostgreSQL存儲(chǔ)過(guò)程實(shí)現(xiàn)數(shù)組入?yún)鬟f

    這篇文章主要介紹了mybatis調(diào)用postgresql自定義函數(shù)傳遞數(shù)組參數(shù)的解決方案,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • postgresql數(shù)據(jù)庫(kù)使用說(shuō)明_實(shí)現(xiàn)時(shí)間范圍查詢

    postgresql數(shù)據(jù)庫(kù)使用說(shuō)明_實(shí)現(xiàn)時(shí)間范圍查詢

    這篇文章主要介紹了postgresql數(shù)據(jù)庫(kù)使用說(shuō)明_實(shí)現(xiàn)時(shí)間范圍查詢,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • Postgresql中null值和空字符串舉例詳解

    Postgresql中null值和空字符串舉例詳解

    在使用?PostgreSql時(shí),實(shí)際場(chǎng)景中會(huì)出現(xiàn)某個(gè)字段為空或空字符串,下面這篇文章主要給大家介紹了關(guān)于Postgresql中null值和空字符串的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • PostgreSQL事務(wù)回卷實(shí)戰(zhàn)案例詳析

    PostgreSQL事務(wù)回卷實(shí)戰(zhàn)案例詳析

    前段時(shí)間在公司小范圍做了一個(gè)關(guān)于PG事務(wù)實(shí)現(xiàn)的講座,最后總結(jié)了一個(gè)摘要性的東西,分享一下,這篇文章主要給大家介紹了關(guān)于PostgreSQL事務(wù)回卷實(shí)戰(zhàn)案例的相關(guān)資料,需要的朋友可以參考下
    2022-03-03

最新評(píng)論