(全國職業(yè)技能比賽:高職)GZ033大數(shù)據(jù)應(yīng)用開發(fā)賽題第06套.docx

(全國職業(yè)技能比賽:高職)GZ033大數(shù)據(jù)應(yīng)用開發(fā)賽題第06套.docx

ID:83631132

大小:39.40 KB

頁數(shù):24頁

時(shí)間:2024-09-03

上傳者:gjxwyhcr
(全國職業(yè)技能比賽:高職)GZ033大數(shù)據(jù)應(yīng)用開發(fā)賽題第06套.docx_第1頁
(全國職業(yè)技能比賽:高職)GZ033大數(shù)據(jù)應(yīng)用開發(fā)賽題第06套.docx_第2頁
(全國職業(yè)技能比賽:高職)GZ033大數(shù)據(jù)應(yīng)用開發(fā)賽題第06套.docx_第3頁
(全國職業(yè)技能比賽:高職)GZ033大數(shù)據(jù)應(yīng)用開發(fā)賽題第06套.docx_第4頁
(全國職業(yè)技能比賽:高職)GZ033大數(shù)據(jù)應(yīng)用開發(fā)賽題第06套.docx_第5頁
(全國職業(yè)技能比賽:高職)GZ033大數(shù)據(jù)應(yīng)用開發(fā)賽題第06套.docx_第6頁
(全國職業(yè)技能比賽:高職)GZ033大數(shù)據(jù)應(yīng)用開發(fā)賽題第06套.docx_第7頁
(全國職業(yè)技能比賽:高職)GZ033大數(shù)據(jù)應(yīng)用開發(fā)賽題第06套.docx_第8頁
(全國職業(yè)技能比賽:高職)GZ033大數(shù)據(jù)應(yīng)用開發(fā)賽題第06套.docx_第9頁
(全國職業(yè)技能比賽:高職)GZ033大數(shù)據(jù)應(yīng)用開發(fā)賽題第06套.docx_第10頁
資源描述:

《(全國職業(yè)技能比賽:高職)GZ033大數(shù)據(jù)應(yīng)用開發(fā)賽題第06套.docx》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫

2023年全國職業(yè)院校技能大賽賽題第06套賽項(xiàng)名稱:大數(shù)據(jù)應(yīng)用開發(fā)英文名稱:BigDataApplicationDevelopment賽項(xiàng)組別:高等職業(yè)教育組賽項(xiàng)編號:GZ033 背景描述大數(shù)據(jù)時(shí)代背景下,電商經(jīng)營模式發(fā)生很大改變。在傳統(tǒng)運(yùn)營模式中,缺乏數(shù)據(jù)積累,人們在做出一些決策行為過程中,更多是憑借個(gè)人經(jīng)驗(yàn)和直覺,發(fā)展路徑比較自我封閉。而大數(shù)據(jù)時(shí)代,為人們提供一種全新的思路,通過大量的數(shù)據(jù)分析得出的結(jié)果將更加現(xiàn)實(shí)和準(zhǔn)確。商家可以對客戶的消費(fèi)行為信息數(shù)據(jù)進(jìn)行收集和整理,比如消費(fèi)者購買產(chǎn)品的花費(fèi)、選擇產(chǎn)品的渠道、偏好產(chǎn)品的類型、產(chǎn)品回購周期、購買產(chǎn)品的目的、消費(fèi)者家庭背景、工作和生活環(huán)境、個(gè)人消費(fèi)觀和價(jià)值觀等。通過數(shù)據(jù)追蹤,知道顧客從哪兒來,是看了某網(wǎng)站投放的廣告還是通過朋友推薦鏈接,是新訪客還是老用戶,喜歡瀏覽什么產(chǎn)品,購物車有無商品,是否清空,還有每一筆交易記錄,精準(zhǔn)鎖定一定年齡、收入、對產(chǎn)品有興趣的顧客,對顧客進(jìn)行分組、標(biāo)簽化,通過不同標(biāo)簽組合運(yùn)用,獲得不同目標(biāo)群體,以此開展精準(zhǔn)推送。因數(shù)據(jù)驅(qū)動(dòng)的零售新時(shí)代已經(jīng)到來,沒有大數(shù)據(jù),我們無法為消費(fèi)者提供這些體驗(yàn),為完成電商的大數(shù)據(jù)分析工作,你所在的小組將應(yīng)用大數(shù)據(jù)技術(shù),以Scala作為整個(gè)項(xiàng)目的基礎(chǔ)開發(fā)語言,基于大數(shù)據(jù)平臺(tái)綜合利用Hudi、Spark、Flink、Vue.js等技術(shù),對數(shù)據(jù)進(jìn)行處理、分析及可視化呈現(xiàn),你們作為該小組的技術(shù)人員,請按照下面任務(wù)完成本次工作。 任務(wù)A:大數(shù)據(jù)平臺(tái)搭建(容器環(huán)境)(15分)環(huán)境說明:服務(wù)端登錄地址詳見各任務(wù)服務(wù)端說明。補(bǔ)充說明:宿主機(jī)及各容器節(jié)點(diǎn)可通過Asbru工具或SSH客戶端進(jìn)行SSH訪問。子任務(wù)一:Hadoop完全分布式安裝配置本任務(wù)需要使用root用戶完成相關(guān)配置,安裝Hadoop需要配置前置環(huán)境。命令中要求使用絕對路徑,具體要求如下:1、從宿主機(jī)/opt目錄下將文件hadoop-3.1.3.tar.gz、jdk-8u212-linux-x64.tar.gz復(fù)制到容器Master中的/opt/software路徑中(若路徑不存在,則需新建),將Master節(jié)點(diǎn)JDK安裝包解壓到/opt/module路徑中(若路徑不存在,則需新建),將JDK解壓命令復(fù)制并粘貼至客戶端桌面【Release任務(wù)A提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;2、修改容器中/etc/profile文件,設(shè)置JDK環(huán)境變量并使其生效,配置完畢后在Master節(jié)點(diǎn)分別執(zhí)行“java-version”和“javac”命令,將命令行執(zhí)行結(jié)果分別截圖并粘貼至客戶端桌面【Release任務(wù)A提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;3、請完成host相關(guān)配置,將三個(gè)節(jié)點(diǎn)分別命名為master、slave1、slave2,并做免密登錄,用scp命令并使用絕對路徑從Master復(fù)制JDK解壓后的安裝文件到slave1、slave2節(jié)點(diǎn)(若路徑不存在,則需新建),并配置slave1、slave2相關(guān)環(huán)境變量,將全部scp復(fù)制JDK的命令復(fù)制并粘貼至客戶端桌面【Release任務(wù)A提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;4、在Master將Hadoop解壓到/opt/module(若路徑不存在,則需新建)目錄下,并將解壓包分發(fā)至slave1、slave2中,其中master、slave1、slave2 節(jié)點(diǎn)均作為datanode,配置好相關(guān)環(huán)境,初始化Hadoop環(huán)境namenode,將初始化命令及初始化結(jié)果截圖(截取初始化結(jié)果日志最后20行即可)粘貼至客戶端桌面【Release任務(wù)A提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;1、啟動(dòng)Hadoop集群(包括hdfs和yarn),使用jps命令查看Master節(jié)點(diǎn)與slave1節(jié)點(diǎn)的Java進(jìn)程,將jps命令與結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)A提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。子任務(wù)二:SparkonYarn安裝配置本任務(wù)需要使用root用戶完成相關(guān)配置,已安裝Hadoop及需要配置前置環(huán)境,具體要求如下:1、從宿主機(jī)/opt目錄下將文件spark-3.1.1-bin-hadoop3.2.tgz復(fù)制到容器Master中的/opt/software(若路徑不存在,則需新建)中,將Spark包解壓到/opt/module路徑中(若路徑不存在,則需新建),將完整解壓命令復(fù)制粘貼至客戶端桌面【Release任務(wù)A提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;2、修改容器中/etc/profile文件,設(shè)置Spark環(huán)境變量并使環(huán)境變量生效,在/opt目錄下運(yùn)行命令spark-submit--version,將命令與結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)A提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;3、完成onyarn相關(guān)配置,使用sparkonyarn的模式提交$SPARK_HOME/examples/jars/spark-examples_2.12-3.1.1.jar運(yùn)行的主類為org.apache.spark.examples.SparkPi,將運(yùn)行結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)A提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下(截取Pi結(jié)果的前后各5行)。(運(yùn)行命令為:spark-submit--masteryarn--classorg.apache.spark.examples.SparkPi$SPARK_HOME/examples/jars/spark-examples_2.12-3.1.1.jar)子任務(wù)三:Hudi安裝配置本任務(wù)需要使用root用戶完成相關(guān)配置,具體要求如下:1、從宿主機(jī)/opt目錄下將maven相關(guān)安裝包復(fù)制到容器Master中的/opt/software(若路徑不存在,則需新建)中, 將maven相關(guān)安裝包解壓到/opt/module/目錄下(若路徑不存在,則需新建)并配置maven本地庫為/opt/software/RepMaven/,遠(yuǎn)程倉庫使用阿里云鏡像,配置maven的環(huán)境變量,并在/opt/下執(zhí)行mvn-v,將運(yùn)行結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)A提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;nexus-aliyuncentralNexusaliyunhttp://maven.aliyun.com/nexus/content/groups/public1、從宿主機(jī)/opt目錄下將Hudi相關(guān)安裝包復(fù)制到容器Master中的/opt/software(若路徑不存在,則需新建)中,將Hudi相關(guān)安裝包解壓到/opt/module/目錄下(若路徑不存在,則需新建),將命令復(fù)制并粘貼至客戶端桌面【Release任務(wù)A提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;2、完成解壓安裝及配置后使用maven對Hudi進(jìn)行構(gòu)建(spark3.1,scala-2.12),編譯完成后與Spark集成,集成后使用spark-shell操作Hudi,將spark-shell啟動(dòng)使用spark-shell運(yùn)行下面給到的案例,并將最終查詢結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)A提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。(提示:編譯需要替換以下內(nèi)容:1.將父模塊pom.xml替換;2.hudi-common/src/main/java/org/apache/hudi/common/table/log/block/HoodieParquetDataBlock.java替換;2.將packaging/hudi-spark-bundle/pom.xml替換;3.將packaging/hudi-utilities-bundle/pom.xml替換)importorg.apache.hudi.QuickstartUtils._importscala.collection.JavaConversions._importorg.apache.spark.sql.SaveMode._importorg.apache.hudi.DataSourceReadOptions._importorg.apache.hudi.DataSourceWriteOptions._importorg.apache.hudi.config.HoodieWriteConfig._importorg.apache.hudi.common.model.HoodieRecordvaltableName="hudi_trips_cow"valbasePath="file:///tmp/hudi_trips_cow" valdataGen=newDataGeneratorvalinserts=convertToStringList(dataGen.generateInserts(10))valdf=spark.read.json(spark.sparkContext.parallelize(inserts,2))df.write.format("hudi").options(getQuickstartWriteConfigs).option(PRECOMBINE_FIELD_OPT_KEY,"ts").option(RECORDKEY_FIELD_OPT_KEY,"uuid").option(PARTITIONPATH_FIELD_OPT_KEY,"partitionpath").option(TABLE_NAME,tableName).mode(Overwrite).save(basePath)valtripsSnapshotDF=spark.read.format("hudi").load(basePath+"/*/*/*/*")tripsSnapshotDF.createOrReplaceTempView("hudi_trips_snapshot")spark.sql("selectfare,begin_lon,begin_lat,tsfromhudi_trips_snapshotwherefare>20.0").show() 任務(wù)B:離線數(shù)據(jù)處理(25分)環(huán)境說明:服務(wù)端登錄地址詳見各任務(wù)服務(wù)端說明。補(bǔ)充說明:各節(jié)點(diǎn)可通過Asbru工具或SSH客戶端進(jìn)行SSH訪問;主節(jié)點(diǎn)MySQL數(shù)據(jù)庫用戶名/密碼:root/123456(已配置遠(yuǎn)程連接);Spark任務(wù)在Yarn上用Client運(yùn)行,方便觀察日志。子任務(wù)一:數(shù)據(jù)抽取編寫Scala代碼,使用Spark將MySQL的shtd_store庫中表user_info、sku_info、base_province、base_region、order_info、order_detail的數(shù)據(jù)增量抽取到Hudi的ods_ds_hudi庫(路徑為/user/hive/warehouse/ods_ds_hudi.db)的user_info、sku_info、base_province、base_region、order_info、order_detail中。(若ods_ds_hudi庫中部分表沒有數(shù)據(jù),正常抽取即可)1、抽取shtd_store庫中user_info的增量數(shù)據(jù)進(jìn)入Hudi的ods_ds_hudi庫中表user_info。根據(jù)ods_ds_hudi.user_info表中operate_time或create_time作為增量字段(即MySQL中每條數(shù)據(jù)取這兩個(gè)時(shí)間中較大的那個(gè)時(shí)間作為增量字段去和ods_ds_hudi里的這兩個(gè)字段中較大的時(shí)間進(jìn)行比較),只將新增的數(shù)據(jù)抽入,字段名稱、類型不變,同時(shí)添加分區(qū),若operate_time為空,則用create_time填充,分區(qū)字段為etl_date,類型為String,且值為當(dāng)前比賽日的前一天日期(分區(qū)字段格式為yyyyMMdd)。id作為primaryKey,operate_time作為preCombineField。使用spark-shell執(zhí)行showpartitionsods_ds_hudi.user_info命令,將結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下; 1、抽取shtd_store庫中sku_info的增量數(shù)據(jù)進(jìn)入Hudi的ods_ds_hudi庫中表sku_info。根據(jù)ods_ds_hudi.sku_info表中create_time作為增量字段,只將新增的數(shù)據(jù)抽入,字段名稱、類型不變,同時(shí)添加分區(qū),分區(qū)字段為etl_date,類型為String,且值為當(dāng)前比賽日的前一天日期(分區(qū)字段格式為yyyyMMdd)。id作為primaryKey,operate_time作為preCombineField。使用spark-shell執(zhí)行showpartitionsods_ds_hudi.sku_info命令,將結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;2、抽取shtd_store庫中base_province的增量數(shù)據(jù)進(jìn)入Hudi的ods_ds_hudi庫中表base_province。根據(jù)ods_ds_hudi.base_province表中id作為增量字段,只將新增的數(shù)據(jù)抽入,字段名稱、類型不變并添加字段create_time取當(dāng)前時(shí)間,同時(shí)添加分區(qū),分區(qū)字段為etl_date,類型為String,且值為當(dāng)前比賽日的前一天日期(分區(qū)字段格式為yyyyMMdd)。id作為primaryKey,create_time作為preCombineField。使用spark-shell執(zhí)行showpartitionsods_ds_hudi.base_province命令,將結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;3、抽取shtd_store庫中base_region的增量數(shù)據(jù)進(jìn)入Hudi的ods_ds_hudi庫中表base_region。根據(jù)ods_ds_hudi.base_region表中id作為增量字段,只將新增的數(shù)據(jù)抽入,字段名稱、類型不變并添加字段create_time取當(dāng)前時(shí)間,同時(shí)添加分區(qū),分區(qū)字段為etl_date,類型為String,且值為當(dāng)前比賽日的前一天日期(分區(qū)字段格式為yyyyMMdd)。id作為primaryKey,create_time作為preCombineField。使用spark-shell執(zhí)行showpartitionsods_ds_hudi.base_region命令,將結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;4、抽取shtd_store庫中order_info的增量數(shù)據(jù)進(jìn)入Hudi的ods_ds_hudi庫中表order_info,根據(jù)ods _ds_hudi.order_info表中operate_time或create_time作為增量字段(即MySQL中每條數(shù)據(jù)取這兩個(gè)時(shí)間中較大的那個(gè)時(shí)間作為增量字段去和ods_ds_hudi里的這兩個(gè)字段中較大的時(shí)間進(jìn)行比較),只將新增的數(shù)據(jù)抽入,字段名稱、類型不變,同時(shí)添加分區(qū),分區(qū)字段為etl_date,類型為String,且值為當(dāng)前比賽日的前一天日期(分區(qū)字段格式為yyyyMMdd)。id作為primaryKey,operate_time作為preCombineField。使用spark-shell執(zhí)行showpartitionsods_ds_hudi.order_info命令,將結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;1、抽取shtd_store庫中order_detail的增量數(shù)據(jù)進(jìn)入Hudi的ods_ds_hudi庫中表order_detail,根據(jù)ods_ds_hudi.order_detail表中create_time作為增量字段,只將新增的數(shù)據(jù)抽入,字段名稱、類型不變,同時(shí)添加分區(qū),分區(qū)字段為etl_date,類型為String,且值為當(dāng)前比賽日的前一天日期(分區(qū)字段格式為yyyyMMdd)。id作為primaryKey,create_time作為preCombineField。使用spark-shell執(zhí)行showpartitionsods_ds_hudi.order_detail命令,將結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。子任務(wù)二:數(shù)據(jù)清洗編寫Scala代碼,使用Spark將ods_ds_hudi庫中相應(yīng)表數(shù)據(jù)全量抽取到Hudi的dwd_ds_hudi庫(路徑為/user/hive/warehouse/dwd_ds_hudi.db)中對應(yīng)表中。表中有涉及到timestamp類型的,均要求按照yyyy-MM-ddHH:mm:ss,不記錄毫秒數(shù),若原數(shù)據(jù)中只有年月日,則在時(shí)分秒的位置添加00:00:00,添加之后使其符合yyyy-MM-ddHH:mm:ss。(若dwd_ds_hudi庫中部分表沒有數(shù)據(jù),正常抽取即可)1、抽取ods_ds_hudi庫中user_info表中昨天的分區(qū)(子任務(wù)一生成的分區(qū))數(shù)據(jù),并結(jié)合dim_user_info最新分區(qū)現(xiàn)有的數(shù)據(jù),根據(jù)id合并數(shù)據(jù)到dwd_ds_hudi庫中dim_user_info的分區(qū)表(合并是指對dwd層數(shù)據(jù)進(jìn)行插入或修改,需修改的數(shù)據(jù)以id為合并字段,根據(jù)operate_time排序 取最新的一條),分區(qū)字段為etl_date且值與ods_ds_hudi庫的相對應(yīng)表該值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填寫“user1”。若該條記錄第一次進(jìn)入數(shù)倉dwd層則dwd_insert_time、dwd_modify_time均存當(dāng)前操作時(shí)間,并進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。若該數(shù)據(jù)在進(jìn)入dwd層時(shí)發(fā)生了合并修改,則dwd_insert_time時(shí)間不變,dwd_modify_time存當(dāng)前操作時(shí)間,其余列存最新的值。id作為primaryKey,operate_time作為preCombineField。使用spark-shell執(zhí)行showpartitionsdwd_ds_hudi.dim_user_info命令,將結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;1、抽取ods_ds_hudi庫sku_info表中昨天的分區(qū)(子任務(wù)一生成的分區(qū))數(shù)據(jù),并結(jié)合dim_sku_info最新分區(qū)現(xiàn)有的數(shù)據(jù),根據(jù)id合并數(shù)據(jù)到dwd_ds_hudi庫中dim_sku_info的分區(qū)表(合并是指對dwd層數(shù)據(jù)進(jìn)行插入或修改,需修改的數(shù)據(jù)以id為合并字段,根據(jù)create_time排序取最新的一條),分區(qū)字段為etl_date且值與ods_ds_hudi庫的相對應(yīng)表該值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填寫“user1”。若該條數(shù)據(jù)第一次進(jìn)入數(shù)倉dwd層則dwd_insert_time、dwd_modify_time均填寫當(dāng)前操作時(shí)間,并進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。若該數(shù)據(jù)在進(jìn)入dwd層時(shí)發(fā)生了合并修改,則dwd_insert_time時(shí)間不變,dwd_modify_time存當(dāng)前操作時(shí)間,其余列存最新的值。id作為primaryKey,dwd_modify_time作為preCombineField。使用spark-shell查詢表dim_sku_info的字段id、sku_desc、dwd_insert_user、dwd_modify_time、etl_date,條件為最新分區(qū)的數(shù)據(jù),id大于等于15且小于等于20,并且按照id升序排序,將結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;2、抽取ods_ds_hudi庫base_province表中昨天的分區(qū)(子任務(wù)一 生成的分區(qū))數(shù)據(jù),并結(jié)合dim_province最新分區(qū)現(xiàn)有的數(shù)據(jù),根據(jù)id合并數(shù)據(jù)到dwd_ds_hudi庫中dim_province的分區(qū)表(合并是指對dwd層數(shù)據(jù)進(jìn)行插入或修改,需修改的數(shù)據(jù)以id為合并字段,根據(jù)create_time排序取最新的一條),分區(qū)字段為etl_date且值與ods_ds_hudi庫的相對應(yīng)表該值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填寫“user1”。若該條數(shù)據(jù)第一次進(jìn)入數(shù)倉dwd層則dwd_insert_time、dwd_modify_time均填寫當(dāng)前操作時(shí)間,并進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。若該數(shù)據(jù)在進(jìn)入dwd層時(shí)發(fā)生了合并修改,則dwd_insert_time時(shí)間不變,dwd_modify_time存當(dāng)前操作時(shí)間,其余列存最新的值。id作為primaryKey,dwd_modify_time作為preCombineField。使用spark-shell在表dwd_ds_hudi.dim_province最新分區(qū)中,查詢該分區(qū)中數(shù)據(jù)的條數(shù),將結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;1、抽取ods_ds_hudi庫base_region表中昨天的分區(qū)(子任務(wù)一生成的分區(qū))數(shù)據(jù),并結(jié)合dim_region最新分區(qū)現(xiàn)有的數(shù)據(jù),根據(jù)id合并數(shù)據(jù)到dwd_ds_hudi庫中dim_region的分區(qū)表(合并是指對dwd層數(shù)據(jù)進(jìn)行插入或修改,需修改的數(shù)據(jù)以id為合并字段,根據(jù)create_time排序取最新的一條),分區(qū)字段為etl_date且值與ods_ds_hudi庫的相對應(yīng)表該值相等,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填寫“user1”。若該條數(shù)據(jù)第一次進(jìn)入數(shù)倉dwd層則dwd_insert_time、dwd_modify_time均填寫當(dāng)前操作時(shí)間,并進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。若該數(shù)據(jù)在進(jìn)入dwd層時(shí)發(fā)生了合并修改,則dwd_insert_time時(shí)間不變,dwd_modify_time存當(dāng)前操作時(shí)間,其余列存最新的值。id作為primaryKey,dwd_modify_time作為preCombineField。使用spark-shell在表dwd_ds_hudi.dim_region最新分區(qū)中,查詢該分區(qū)中數(shù)據(jù)的條數(shù),將結(jié)果截圖粘貼至客戶端桌面【Release任務(wù) B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;1、將ods_ds_hudi庫中order_info表昨天的分區(qū)(子任務(wù)一生成的分區(qū))數(shù)據(jù)抽取到dwd_ds_hudi庫中fact_order_info的動(dòng)態(tài)分區(qū)表,分區(qū)字段為etl_date,類型為String,取create_time值并將格式轉(zhuǎn)換為yyyyMMdd,同時(shí)若operate_time為空,則用create_time填充,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填寫“user1”,dwd_insert_time、dwd_modify_time均填寫當(dāng)前操作時(shí)間,并進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。id作為primaryKey,operate_time作為preCombineField。使用spark-shell執(zhí)行showpartitionsdwd_ds_hudi.fact_order_info命令,將結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;2、將ods_ds_hudi庫中order_detail表昨天的分區(qū)(子任務(wù)一中生成的分區(qū))數(shù)據(jù)抽取到dwd_ds_hudi庫中fact_order_detail的動(dòng)態(tài)分區(qū)表,分區(qū)字段為etl_date,類型為String,取create_time值并將格式轉(zhuǎn)換為yyyyMMdd,并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填寫“user1”,dwd_insert_time、dwd_modify_time均填寫當(dāng)前操作時(shí)間,并進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。id作為primaryKey,dwd_modify_time作為preCombineField。使用spark-shell執(zhí)行showpartitionsdwd_ds_hudi.fact_order_detail命令,將結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。子任務(wù)三:指標(biāo)計(jì)算編寫Scala代碼,使用Spark計(jì)算相關(guān)指標(biāo)。注:在指標(biāo)計(jì)算中,不考慮訂單信息表中order_status字段的值,將所有訂單視為有效訂單。計(jì)算訂單金額或訂單總金額時(shí)只使用final_total_amount字段。需注意dwd_ds_hudi所有的維表取最新的分區(qū)。1、 本任務(wù)基于以下2、3、4小題完成,使用Azkaban完成第2、3、4題任務(wù)代碼的調(diào)度。工作流要求,使用shell輸出“開始”作為工作流的第一個(gè)job(job1),2、3、4題任務(wù)為串行任務(wù)且它們依賴job1的完成(命名為job2、job3、job4),job2、job3、job4完成之后使用shell輸出“結(jié)束”作為工作流的最后一個(gè)job(endjob),endjob依賴job2、job3、job4,并將最終任務(wù)調(diào)度完成后的工作流截圖,將截圖粘貼至客戶端桌面【Release任務(wù)B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;1、根據(jù)dwd_ds_hudi層表統(tǒng)計(jì)每個(gè)省每月下單的數(shù)量和下單的總金額,并按照year,month,region_id進(jìn)行分組,按照total_amount降序排序,形成sequence值,將計(jì)算結(jié)果存入Hudi的dws_ds_hudi數(shù)據(jù)庫province_consumption_day_aggr表中(表結(jié)構(gòu)如下),然后使用spark-shell根據(jù)訂單總數(shù)、訂單總金額、省份表主鍵均為降序排序,查詢出前5條,在查詢時(shí)對于訂單總金額字段將其轉(zhuǎn)為bigint類型(避免用科學(xué)計(jì)數(shù)法展示),將SQL語句復(fù)制粘貼至客戶端桌面【Release任務(wù)B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下,將執(zhí)行結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;字段類型中文含義備注uuidstring隨機(jī)字符隨機(jī)字符,保證不同即可,作為primaryKeyprovince_idint省份主鍵province_namestring省份名稱region_idint地區(qū)主鍵region_namestring地區(qū)名稱total_amountdouble訂單總金額當(dāng)月訂單總金額total_countint訂單總數(shù)當(dāng)月訂單總數(shù)。 同時(shí)可作為preCombineField(作為合并字段時(shí),無意義,因?yàn)橹麈I為隨機(jī)生成)sequenceint次序yearint年訂單產(chǎn)生的年,為動(dòng)態(tài)分區(qū)字段monthint月訂單產(chǎn)生的月,為動(dòng)態(tài)分區(qū)字段1、請根據(jù)dwd_ds_hudi層的相關(guān)表,計(jì)算2020年銷售量前10的商品,銷售額前10的商品,存入ClickHouse數(shù)據(jù)庫shtd_result的topten表中(表結(jié)構(gòu)如下),然后在Linux的ClickHouse命令行中根據(jù)排名升序排序,查詢出前5條,將SQL語句復(fù)制粘貼至客戶端桌面【Release任務(wù)B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下,將執(zhí)行結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;字段類型中文含義備注topquantityidint商品id銷售量前10的商品topquantitynametext商品名稱銷售量前10的商品topquantityint該商品銷售量銷售量前10的商品toppriceidtext商品id銷售額前10的商品toppricenametext商品名稱銷售額前10的商品toppricedecimal該商品銷售額銷售額前10的商品sequenceint排名所屬排名2、請根據(jù)dwd_ds_hudi層的相關(guān)表,計(jì)算出2020年每個(gè)省份所在地區(qū)的訂單金額的中位數(shù),存入ClickHouse數(shù)據(jù)庫shtd_result的nationmedian表中(表結(jié)構(gòu)如下),然后在Linux的ClickHouse命令行中根據(jù)地區(qū)表主鍵,省份表主鍵均為升序排序,查詢出前5條,將SQL語句復(fù)制粘貼至客戶端桌面【Release任務(wù)B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下,將執(zhí)行結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)B提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;提示:可用percentile函數(shù)求取中位數(shù)。 字段類型中文含義備注provinceidint省份表主鍵provincenametext省份名稱regionidint地區(qū)表主鍵regionnametext地區(qū)名稱provincemediandouble該省份中位數(shù)該省份訂單金額中位數(shù)regionmediandouble該省所在地區(qū)中位數(shù)該省所在地區(qū)訂單金額中位數(shù) 任務(wù)C:數(shù)據(jù)挖掘(10分)環(huán)境說明:服務(wù)端登錄地址詳見各任務(wù)服務(wù)端說明。補(bǔ)充說明:各節(jié)點(diǎn)可通過Asbru工具或SSH客戶端進(jìn)行SSH訪問;主節(jié)點(diǎn)MySQL數(shù)據(jù)庫用戶名/密碼:root/123456(已配置遠(yuǎn)程連接);Spark任務(wù)在Yarn上用Client運(yùn)行,方便觀察日志。該任務(wù)均使用Scala編寫,利用Spark相關(guān)庫完成。子任務(wù)一:特征工程剔除訂單信息表與訂單詳細(xì)信息表中用戶id與商品id不存在于現(xiàn)有的維表中的記錄,同時(shí)建議多利用緩存并充分考慮并行度來優(yōu)化代碼,達(dá)到更快的計(jì)算效果。1、據(jù)Hudi的dwd_ds_hudi庫中相關(guān)表或MySQL數(shù)據(jù)庫shtd_store中訂單相關(guān)表(order_detail、order_info、sku_info),對用戶購買過的商品進(jìn)行去重,將其轉(zhuǎn)換為以下格式:第一列為用戶idmapping,第二列為用戶購買過的商品idmapping,按照user_id與sku_id進(jìn)行升序排序,輸出前5行,將結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)C提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;字段類型中文含義備注user_idint用戶id的mapping對應(yīng)鍵sku_idint商品id的mapping對應(yīng)鍵提示:Mapping操作:例如用戶id:1、4、7、8、9,則做完mapping操作轉(zhuǎn)為字典類型,鍵0對應(yīng)用戶id1,鍵1對應(yīng)用戶id4,以此類推結(jié)果格式如下:-------user_id_mapping與sku_id_mapping數(shù)據(jù)前5條如下:------- 0:00:891:11:21:31、根據(jù)第1小題的結(jié)果,對其進(jìn)行聚合,其中對sku_id進(jìn)行one-hot轉(zhuǎn)換,將其轉(zhuǎn)換為以下格式矩陣:第一列為用戶id,其余列名為商品id,按照用戶id進(jìn)行升序排序,展示矩陣第一行前5列數(shù)據(jù),將結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)C提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。字段類型中文含義備注user_iddouble客戶keysku_id0double用戶是否購買過商品1若用戶購買過該商品,則值為1,否則為0sku_id1double用戶是否購買過商品2若用戶購買過該商品,則值為1,否則為0sku_id2double用戶是否購買過商品3若用戶購買過該商品,則值為1,否則為0.....結(jié)果格式如下:---------------第一行前5列結(jié)果展示為---------------0.0,1.0,0.0,0.0,0.0子任務(wù)二:推薦系統(tǒng)1、根據(jù)子任務(wù)一的結(jié)果,對其進(jìn)行SVD分解,對數(shù)據(jù)進(jìn)行降維保留前 5個(gè)奇異值信息,根據(jù)該用戶已購買的商品分別與未購買的商品計(jì)算余弦相似度再進(jìn)行累加求均值,將均值最大的5件商品id進(jìn)行輸出作為推薦使用。將輸出結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)C提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。結(jié)果格式如下:------------------------推薦Top5結(jié)果如下------------------------相似度top1(商品id:1,平均相似度:0.983456)相似度top2(商品id:71,平均相似度:0.782672)相似度top3(商品id:22,平均相似度:0.7635246)相似度top4(商品id:351,平均相似度:0.7335748)相似度top5(商品id:14,平均相似度:0.522356) 任務(wù)D:數(shù)據(jù)采集與實(shí)時(shí)計(jì)算(20分)環(huán)境說明:服務(wù)端登錄地址詳見各任務(wù)服務(wù)端說明。補(bǔ)充說明:各節(jié)點(diǎn)可通過Asbru工具或SSH客戶端進(jìn)行SSH訪問;Flink任務(wù)在Yarn上用perjob模式(即Job分離模式,不采用Session模式),方便Yarn回收資源。子任務(wù)一:實(shí)時(shí)數(shù)據(jù)采集1、在主節(jié)點(diǎn)使用Flume采集實(shí)時(shí)數(shù)據(jù)生成器10050端口的socket數(shù)據(jù),將數(shù)據(jù)存入到Kafka的Topic中(Topic名稱為order,分區(qū)數(shù)為4),使用Kafka自帶的消費(fèi)者消費(fèi)order(Topic)中的數(shù)據(jù),將前2條數(shù)據(jù)的結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)D提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下;2、采用多路復(fù)用模式,F(xiàn)lume接收數(shù)據(jù)注入kafka的同時(shí),將數(shù)據(jù)備份到HDFS目錄/user/test/flumebackup下,將查看備份目錄下的第一個(gè)文件的前2條數(shù)據(jù)的命令與結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)D提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。子任務(wù)二:使用Flink處理Kafka中的數(shù)據(jù)編寫Scala代碼,使用Flink消費(fèi)Kafka中Topic為order的數(shù)據(jù)并進(jìn)行相應(yīng)的數(shù)據(jù)統(tǒng)計(jì)計(jì)算(訂單信息對應(yīng)表結(jié)構(gòu)order_info,訂單詳細(xì)信息對應(yīng)表結(jié)構(gòu)order_detail(來源類型和來源編號這兩個(gè)字段不考慮,所以在實(shí)時(shí)數(shù)據(jù)中不會(huì)出現(xiàn)),同時(shí)計(jì)算中使用order_info或order_detail表中create_time或operate_time取兩者中值較大者作為EventTime,若operate_time為空值或無此列,則使用create_time填充,允許數(shù)據(jù)延遲5s,訂單狀態(tài)order_status分別為1001:創(chuàng)建訂單、1002:支付訂單、1003:取消訂單、1004:完成訂單、1005: 申請退回、1006:退回完成。另外對于數(shù)據(jù)結(jié)果展示時(shí),不要采用例如:1.9786518E7的科學(xué)計(jì)數(shù)法)。1、使用Flink消費(fèi)Kafka中的數(shù)據(jù),統(tǒng)計(jì)商城實(shí)時(shí)訂單數(shù)量(需要考慮訂單狀態(tài),若有取消訂單、申請退回、退回完成則不計(jì)入訂單數(shù)量,其他狀態(tài)則累加),將key設(shè)置成totalcount存入Redis中。使用rediscli以getkey方式獲取totalcount值,將結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)D提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下,需兩次截圖,第一次截圖和第二次截圖間隔1分鐘以上,第一次截圖放前面,第二次截圖放后面;2、在任務(wù)1進(jìn)行的同時(shí),使用側(cè)邊流,使用Flink消費(fèi)Kafka中的訂單詳細(xì)信息的數(shù)據(jù),實(shí)時(shí)統(tǒng)計(jì)商城中銷售量前3的商品(不考慮訂單狀態(tài),不考慮打折),將key設(shè)置成top3itemamount存入Redis中(value使用String數(shù)據(jù)格式,value為前3的商品信息并且外層用[]包裹,其中按排序依次存放商品id:銷售量,并用逗號分割)。使用rediscli以getkey方式獲取top3itemamount值,將結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)D提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下,需兩次截圖,第一次截圖和第二次截圖間隔1分鐘以上,第一次截圖放前面,第二次截圖放后面;示例如下:top3itemamount:[1:700,42:500,41:100]3、在任務(wù)1進(jìn)行的同時(shí),使用側(cè)邊流,使用Flink消費(fèi)Kafka中的訂單詳細(xì)信息的數(shù)據(jù),實(shí)時(shí)統(tǒng)計(jì)商城中銷售額前3的商品(不考慮訂單狀態(tài),不考慮打折,銷售額為order_price*sku_num),將key設(shè)置成top3itemconsumption存入Redis中(value使用String數(shù)據(jù)格式,value為前3的商品信息并且外層用[]包裹,其中按排序依次存放商品id:銷售額,并用逗號分割)。使用rediscli以getkey方式獲取top3itemconsumption值,將結(jié)果截圖粘貼至客戶端桌面【Release任務(wù)D提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下,需兩次截圖,第一次截圖和第二次截圖間隔1分鐘以上,第一次截圖放前面,第二次截圖放后面。 示例如下:top3itemconsumption:[1:10020.2,42:4540.0,12:540] 任務(wù)E:數(shù)據(jù)可視化(15分)環(huán)境說明:數(shù)據(jù)接口地址及接口描述詳見各任務(wù)服務(wù)端說明。子任務(wù)一:用柱狀圖展示消費(fèi)額最高的省份編寫Vue工程代碼,根據(jù)接口,用柱狀圖展示2020年消費(fèi)額最高的5個(gè)省份,同時(shí)將用于圖表展示的數(shù)據(jù)結(jié)構(gòu)在瀏覽器的console中進(jìn)行打印輸出,將圖表可視化結(jié)果和瀏覽器console打印結(jié)果分別截圖并粘貼至客戶端桌面【Release任務(wù)E提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。子任務(wù)二:用餅狀圖展示各地區(qū)消費(fèi)能力編寫Vue工程代碼,根據(jù)接口,用餅狀圖展示2020年各地區(qū)的消費(fèi)總額占比,同時(shí)將用于圖表展示的數(shù)據(jù)結(jié)構(gòu)在瀏覽器的console中進(jìn)行打印輸出,將圖表可視化結(jié)果和瀏覽器console打印結(jié)果分別截圖并粘貼至客戶端桌面【Release任務(wù)E提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。子任務(wù)三:用折線圖展示每年上架商品數(shù)量的變化編寫Vue工程代碼,根據(jù)接口,用折線圖展示每年上架商品數(shù)量的變化情況,同時(shí)將用于圖表展示的數(shù)據(jù)結(jié)構(gòu)在瀏覽器的console中進(jìn)行打印輸出,將圖表可視化結(jié)果和瀏覽器console打印結(jié)果分別截圖并粘貼至客戶端桌面【Release任務(wù)E提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。子任務(wù)四:用條形圖展示消費(fèi)額最高的地區(qū)編寫Vue工程代碼,根據(jù)接口,用條形圖展示2020年消費(fèi)額最高的5個(gè)地區(qū),同時(shí)將用于圖表展示的數(shù)據(jù)結(jié)構(gòu)在瀏覽器的console中進(jìn)行打印輸出,將圖表可視化結(jié)果和瀏覽器console打印結(jié)果分別截圖并粘貼至客戶端桌面【Release任務(wù)E提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。 子任務(wù)五:用散點(diǎn)圖展示省份平均消費(fèi)額編寫Vue工程代碼,根據(jù)接口,用基礎(chǔ)散點(diǎn)圖展示2020年最高10個(gè)省份平均消費(fèi)額(四舍五入保留兩位小數(shù)),同時(shí)將用于圖表展示的數(shù)據(jù)結(jié)構(gòu)在瀏覽器的console中進(jìn)行打印輸出,將圖表可視化結(jié)果和瀏覽器console打印結(jié)果分別截圖并粘貼至客戶端桌面【Release任務(wù)E提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。 任務(wù)F:綜合分析(10分)子任務(wù)一:Spark中的HashShuffle的有哪些不足?請簡述Spark中HashShuffle有哪些不足,將內(nèi)容編寫至客戶端桌面【Release任務(wù)F提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。子任務(wù)二:請簡述Flink的Slot和parallelism有什么區(qū)別。請簡述Flink的Slot和parallelism有什么區(qū)別,將內(nèi)容編寫至客戶端桌面【Release任務(wù)F提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。子任務(wù)三:分析下一年度的建倉目的地。根據(jù)任務(wù)E的圖表,分析各省份的經(jīng)濟(jì)現(xiàn)狀,公司決定挑選3個(gè)省份進(jìn)行倉儲(chǔ)建設(shè),請問應(yīng)該在哪些省份建設(shè)?將內(nèi)容編寫至客戶端桌面【Release任務(wù)F提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。
最近更新
更多
大家都在看
近期熱門
關(guān)閉