九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
數(shù)倉實戰(zhàn):Hive數(shù)據(jù)加載到Greenplum

  如果說Hive是離線數(shù)倉的代表,那么Greenplum就是MPP數(shù)據(jù)庫的代表。在離線數(shù)倉的年代,以Hive為核心的數(shù)據(jù)倉庫席卷數(shù)據(jù)倉庫市場,幾乎成為了離線數(shù)倉的代名詞。但是Hive的查詢能力非常弱,通常需要其它計算引擎輔助才能完成OLAP查詢。

  具體來說,Hive數(shù)據(jù)倉庫的查詢引擎主要有以下幾種選擇:

  Spark支持sql查詢,需要啟動Thrift Server,不穩(wěn)定,查詢速度一般幾秒到幾分鐘。? Impala是CDH公司推出的產(chǎn)品,一般用在CDH平臺中,MPP架構(gòu),查詢比Spark快,但是是C++開發(fā)的,非CDH平臺安裝比較困難;? Presto和Hive一樣也是Facebook開源的,但是語法居然不兼容Hive。查詢速度也比較快,是基于MPP架構(gòu)。? Kylin是國人開源的MOLAP軟件,基于Spark引擎對Hive數(shù)據(jù)做預(yù)計算保存在Hbase或者其他存儲中,查詢速度非??觳⑶曳€(wěn)定,一般在10s以下。但是模型構(gòu)建復(fù)雜,使用和運維都不太方便。? Clickhouse是目前最火的OLAP查詢軟件,特點是快,集成了各大數(shù)據(jù)庫的精華引擎;獨立于Hadoop平臺以外,需要把Hive數(shù)據(jù)同步遷移過去;有限的SQL支持,幾乎不支持join。? Greenplum是MPP架構(gòu)數(shù)據(jù)庫的代表,支持行存儲和列存儲,支持非常完善的SQL語法,開發(fā)和使用與傳統(tǒng)數(shù)據(jù)庫幾乎一致,查詢速度通常在1s到10s之間。

  當時由于認知水平有限,未將Doris納入比較。

  根據(jù)我的經(jīng)驗,最大的常用業(yè)務(wù)查詢表數(shù)據(jù)量在億級以下,建議直接使用Greenplum數(shù)據(jù)庫作為數(shù)據(jù)倉庫或者數(shù)據(jù)中臺,完全無需搭建Hive數(shù)據(jù)倉庫。在數(shù)據(jù)量超過億級的時候,Hive on Spark將實現(xiàn)更好的批處理,降低硬件成本,但是這個時候,Greenplum將成為數(shù)據(jù)應(yīng)用層(ADS)的可選數(shù)據(jù)庫之一(其他選項包括Kylin、Clickhouse、Doirs、Hana等)。

  

  在Greenplum作為ADS存儲的情況下,我們需要批量導(dǎo)入ADS層數(shù)據(jù)到Greenplum,這個時候GPLoad將發(fā)揮巨大的作用。

  GPLoad是Greenplum數(shù)據(jù)庫提供的用來進行并行數(shù)據(jù)裝載的工具。GPLoad的實現(xiàn)原理是Greenplum數(shù)據(jù)庫使用可讀外部表和并行文件服務(wù)gpfdist裝載數(shù)據(jù)的一個學歷證命令集合,允許通過使用配置文件的方式設(shè)置數(shù)據(jù)格式、文件位置等參數(shù)來創(chuàng)建外部表。GPLoad命令通過按照YAML格式定義的裝載說明配置文件,然后執(zhí)行insert、update、merger操作,將數(shù)據(jù)裝載到目標數(shù)據(jù)庫表中。

  GPLoad的控制文件采用YAML1.1文檔格式編寫,因此它必須得是有效的YAML格式。YAML配置文件格式要求如下:

  VERSION: 1.0.0.1DATABASE: opsUSER: gpadminHOST: mdw-1PORT: 5432GPLOAD: INPUT: - SOURCE: LOCAL_HOSTNAME: - etl1-1 - etl1-2 - etl1-3 - etl1-4 PORT: 8081 FILE: - /var/load/data/* - COLUMNS: - name: text - amount: float4 - category: text - descr: text - date: date - FORMAT: text - DELIMITER: '|' - ERROR_LIMIT: 25 - LOG_ERRORS: True OUTPUT: - TABLE: payables.expenses - MODE: INSERT SQL: - BEFORE: "INSERT INTO audit VALUES('start', current_timestamp)" - AFTER: "INSERT INTO audit VALUES('end', current_timestamp)"

  接下來,我們將通過一個模板腳本和shell程序?qū)崿F(xiàn)HDFS數(shù)據(jù)的批量導(dǎo)入Greenplum。這個腳本是我2022年上半年實現(xiàn)的,至今仍然穩(wěn)定運行在生產(chǎn)環(huán)境中。

  首先,我們定義一個模板的yml文件gpload_cfg_template.yml,內(nèi)容如下:

  VERSION: 1.0.0.1DATABASE: xxxUSER: xxxHOST: 192.168.5.30PORT: 5432GPLOAD: INPUT: - SOURCE: LOCAL_HOSTNAME: - 192.168.5.10 PORT: 12000 PORT_RANGE: [12000,13000] FILE: - /data/hdsp/infra/ETL_HOME/shell/tempdata/{dbname}.{table}/* - FORMAT: text - HEADER: false - DELIMITER: '\001' - NULL_AS: '\N' OUTPUT: - TABLE: {dbname}.{table} - MODE: INSERT PRELOAD: - TRUNCATE: true SQL:

  其次,我們創(chuàng)建一個shell腳本hive2gp_gpload.sh,實現(xiàn)以下功能:

  復(fù)制yaml模板,并根據(jù)shell腳本參數(shù)替換數(shù)據(jù)庫表和表名;從HDFS上線下載文件到本地,要求數(shù)據(jù)文件必須是TEXT格式;運行g(shù)pload命令,加載數(shù)據(jù)到Greenplum數(shù)據(jù)庫;刪除本地文件。 shell代碼如下:

  #!/bin/bash# 使用方式# eg: ./gpload2hive.sh cabbeen_dw dw_ret_sales_detail_text# 免密登錄配置: ~.pgpassif [ ! -n "$2" ]; then echo "Invalid arguments. Usage: sh hive2gp_gpload.sh dbname tablename" exit -1else dbname=$1; tablename=$2;fisource ~/.bash_profile;shellpath=/data/hdsp/infra/ETL_HOME/shellyml_file=${shellpath}/gpload_yml/${dbname}.${tablename}.yml if [ ! -f ${yml_file} ]; then cp $shellpath/gpload_yml/gpload_cfg_template.yml ${yml_file} sed -i "s/{table}/$tablename/g" $yml_file; sed -i "s/{dbname}/$dbname/g" $yml_file;fi #刪除上一次抽取的文件rm -rf $shellpath/tempdata/${dbname}.${tablename}echo "[${dbname}.${tablename}]:start to get hdfs file!"#從hdfs上獲取文件hdfs dfs -get hdfs://hdp01/data/apps/hive/warehouse/cabbeen_dw.db/$tablename $shellpath/tempdata/${dbname}.${tablename}echo "[${dbname}.${tablename}]:get hdfs file sucess! start to load!"#load數(shù)據(jù)到GP/data/greenplum6/greenplum-db/bin/gpload -f $yml_file -U cabbeenc -l $shellpath/gpload_log/${dbname}_${tablename}_$(date +"%Y-%m-%d-%H-%M-%S").logecho "[${dbname}.${tablename}]:load success!"#刪除本次抽取的文件,節(jié)省空間rm -rf $shellpath/tempdata/${dbname}.${tablename}

  調(diào)用腳本的方式如下:

  sh hive2gp_gpload.sh dbname tablename

  使用這種方式有以下前提:

  1. hive表數(shù)據(jù)為text格式,分隔符為默認分隔符

  2. gpload需安裝,也可以直接復(fù)制Greenplum安裝包并配置環(huán)境變量

  3. 數(shù)據(jù)庫用戶需要有權(quán)限創(chuàng)建表

  4. gp和hive schame和table映射關(guān)系相同,字段順序也要保持一致。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
greenPlum中通過gpfdist導(dǎo)入文本數(shù)據(jù)到數(shù)據(jù)庫表中
什么是數(shù)據(jù)倉庫,什么是ETL
大數(shù)據(jù)概述
一文看懂數(shù)據(jù)倉庫概念、特點、區(qū)別、MPP架構(gòu)選型等
我所經(jīng)歷的大數(shù)據(jù)平臺發(fā)展史(三):互聯(lián)網(wǎng)時代 · 上篇
怎樣選擇數(shù)據(jù)平臺的建設(shè)方案
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服