版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)集成工具:ApacheNifi:Nifi數(shù)據(jù)源與目標(biāo)實(shí)踐1數(shù)據(jù)集成工具:ApacheNifi:Nifi數(shù)據(jù)源與目標(biāo)實(shí)踐1.1介紹ApacheNifi基礎(chǔ)1.1.1Nifi的架構(gòu)與組件ApacheNiFi是一個(gè)易于使用、功能強(qiáng)大且可靠的數(shù)據(jù)處理和分發(fā)系統(tǒng)。它采用流式編程模型,允許用戶創(chuàng)建復(fù)雜的數(shù)據(jù)管道,以處理和路由數(shù)據(jù)。NiFi的核心架構(gòu)包括:NiFi節(jié)點(diǎn):運(yùn)行NiFi實(shí)例的物理或虛擬服務(wù)器。NiFi集群:多個(gè)NiFi節(jié)點(diǎn)協(xié)同工作,提供高可用性和負(fù)載均衡。NiFi用戶界面:提供一個(gè)圖形化的界面,用于設(shè)計(jì)、監(jiān)控和管理數(shù)據(jù)流。NiFi處理器:執(zhí)行特定任務(wù)的組件,如讀取、寫入、轉(zhuǎn)換數(shù)據(jù)。NiFi連接:處理器之間的數(shù)據(jù)傳輸通道。NiFi流程組:將多個(gè)處理器和連接組織在一起,形成邏輯單元。NiFi控制器服務(wù):提供配置和管理功能,如數(shù)據(jù)庫(kù)連接、加密服務(wù)等。1.1.2數(shù)據(jù)流與處理器概念在NiFi中,數(shù)據(jù)流是通過(guò)處理器和連接來(lái)定義的。每個(gè)處理器都有特定的功能,如數(shù)據(jù)的讀取、寫入、轉(zhuǎn)換、路由等。處理器可以連接到其他處理器,形成數(shù)據(jù)處理的鏈路。數(shù)據(jù)流的起點(diǎn)是數(shù)據(jù)源處理器,終點(diǎn)是數(shù)據(jù)目標(biāo)處理器。示例:使用NiFi從文件系統(tǒng)讀取數(shù)據(jù)并發(fā)送到Kafka<!--在NiFi中創(chuàng)建數(shù)據(jù)流-->
<!--1.添加GetFile處理器-->
<!--2.配置GetFile處理器以監(jiān)聽特定目錄-->
<!--3.添加KafkaPublish處理器-->
<!--4.配置KafkaPublish處理器以連接到Kafka集群-->
<!--5.使用連接將GetFile處理器的輸出連接到KafkaPublish處理器-->1.1.3Nifi的安裝與配置安裝和配置NiFi涉及以下步驟:下載NiFi:從ApacheNiFi官方網(wǎng)站下載最新版本的NiFi。解壓安裝包:將下載的安裝包解壓到期望的目錄。配置NiFi:編輯conf/perties文件,設(shè)置NiFi的運(yùn)行參數(shù),如日志目錄、數(shù)據(jù)目錄等。啟動(dòng)NiFi:在解壓的目錄下,運(yùn)行bin/nifi.shstart命令啟動(dòng)NiFi服務(wù)。訪問(wèn)NiFi界面:在瀏覽器中輸入http://localhost:8080/nifi,使用默認(rèn)的用戶名和密碼登錄。示例:配置NiFi的perties文件#perties配置示例
nifi.web.http.host=
nifi.web.http.port=8080
nifi.web.https.host=
nifi.web.https.port=8443
nifi.bootstrap.listen.port=8081
nifi.bootstrap.listen.address=
tocol.address=localhost
tocol.port=8082
nifi.node.cluster.is.node=true
nifi.node.cluster.node.address=localhost
tocol.port=8082
nifi.node.cluster.node.http.port=8080
nifi.node.cluster.node.https.port=8443
nifi.node.cluster.node.id=1
tocol.security=SSL
tocol.security.client.auth=none
tocol.security.client.certificate.path=
tocol.security.client.certificate.key.path=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.truststore.path=
tocol.security.client.certificate.truststore.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
tocol.security.client.certificate.key.password=
#理解Nifi數(shù)據(jù)源
##系統(tǒng)數(shù)據(jù)源概覽
在數(shù)據(jù)集成項(xiàng)目中,ApacheNiFi是一個(gè)強(qiáng)大的工具,用于自動(dòng)化數(shù)據(jù)流的管理。NiFi的核心功能之一是處理來(lái)自各種數(shù)據(jù)源的輸入,這些數(shù)據(jù)源可以是文件系統(tǒng)、數(shù)據(jù)庫(kù)、消息隊(duì)列等。NiFi提供了一系列的處理器,使得數(shù)據(jù)的采集、轉(zhuǎn)換和傳輸變得簡(jiǎn)單且高效。
###數(shù)據(jù)源處理器的分類
-**文件輸入處理器**:用于從文件系統(tǒng)中讀取數(shù)據(jù),支持多種文件格式,如文本、CSV、JSON、XML等。
-**數(shù)據(jù)庫(kù)輸入處理器**:從關(guān)系型數(shù)據(jù)庫(kù)或NoSQL數(shù)據(jù)庫(kù)中提取數(shù)據(jù),支持SQL查詢和數(shù)據(jù)抽取。
###數(shù)據(jù)源處理器的特點(diǎn)
-**非侵入性**:NiFi的數(shù)據(jù)源處理器不會(huì)改變?cè)聪到y(tǒng)的數(shù)據(jù)結(jié)構(gòu)或性能。
-**可配置性**:用戶可以輕松配置處理器的參數(shù),如文件路徑、數(shù)據(jù)庫(kù)連接信息等。
-**容錯(cuò)性**:內(nèi)置重試機(jī)制,確保數(shù)據(jù)的完整性和一致性。
##使用文件輸入處理器
###文件輸入處理器的配置
文件輸入處理器是NiFi中用于讀取文件數(shù)據(jù)的工具。配置文件輸入處理器時(shí),需要指定文件的來(lái)源目錄、文件過(guò)濾規(guī)則以及數(shù)據(jù)讀取的格式。
####示例配置
```markdown
-**來(lái)源目錄**:/data/input
-**文件過(guò)濾規(guī)則**:*.csv
-**數(shù)據(jù)讀取格式**:CSV1.1.4文件輸入處理器的使用流程創(chuàng)建處理器:在NiFi的畫布上,通過(guò)拖拽創(chuàng)建一個(gè)“GetFile”處理器。配置處理器:設(shè)置來(lái)源目錄、文件過(guò)濾規(guī)則和數(shù)據(jù)讀取格式。連接下游處理器:將“GetFile”處理器與用于數(shù)據(jù)轉(zhuǎn)換或輸出的下游處理器連接。啟動(dòng)處理器:確保所有配置正確無(wú)誤后,啟動(dòng)處理器開始數(shù)據(jù)讀取。1.1.5實(shí)例演示假設(shè)我們有一個(gè)CSV文件,位于/data/input目錄下,文件名為sales.csv,內(nèi)容如下:Product,Quantity,Price
Apple,10,1.5
Banana,20,.1配置GetFile處理器來(lái)源目錄:/data/input文件過(guò)濾規(guī)則:*.csv數(shù)據(jù)讀取格式:CSV連接CSVRead處理器將“GetFile”處理器與“CSVRead”處理器連接,以解析CSV數(shù)據(jù)。啟動(dòng)處理器啟動(dòng)處理器后,NiFi將自動(dòng)讀取sales.csv文件,并通過(guò)CSVRead處理器解析其內(nèi)容。1.2使用數(shù)據(jù)庫(kù)輸入處理器1.2.1數(shù)據(jù)庫(kù)輸入處理器的配置數(shù)據(jù)庫(kù)輸入處理器,如“GetDBRecord”,用于從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)。配置時(shí),需要提供數(shù)據(jù)庫(kù)連接信息、查詢語(yǔ)句或表名。示例配置-**數(shù)據(jù)庫(kù)連接**:MySQL
-**連接字符串**:jdbc:mysql://localhost:3306/mydatabase
-**查詢語(yǔ)句**:SELECT*FROMsales1.2.2數(shù)據(jù)庫(kù)輸入處理器的使用流程創(chuàng)建數(shù)據(jù)庫(kù)連接:在NiFi的“ControllerServices”中創(chuàng)建一個(gè)“JDBCConnectionPool”。配置處理器:選擇“GetDBRecord”處理器,設(shè)置數(shù)據(jù)庫(kù)連接和查詢語(yǔ)句。連接下游處理器:將“GetDBRecord”與用于數(shù)據(jù)轉(zhuǎn)換或輸出的下游處理器連接。啟動(dòng)處理器:確保所有配置正確無(wú)誤后,啟動(dòng)處理器開始數(shù)據(jù)讀取。1.2.3實(shí)例演示假設(shè)我們有一個(gè)MySQL數(shù)據(jù)庫(kù),其中包含一個(gè)名為sales的表,結(jié)構(gòu)如下:CREATETABLEsales(
idINTAUTO_INCREMENTPRIMARYKEY,
productVARCHAR(255)NOTNULL,
quantityINTNOTNULL,
priceDECIMAL(10,2)NOTNULL
);配置JDBCConnectionPool在“ControllerServices”中創(chuàng)建一個(gè)“JDBCConnectionPool”,并配置連接字符串和數(shù)據(jù)庫(kù)驅(qū)動(dòng)。配置GetDBRecord處理器數(shù)據(jù)庫(kù)連接:選擇在“ControllerServices”中創(chuàng)建的連接池。查詢語(yǔ)句:SELECT*FROMsales連接RecordToAvro處理器將“GetDBRecord”處理器與“RecordToAvro”處理器連接,以將數(shù)據(jù)庫(kù)記錄轉(zhuǎn)換為Avro格式。啟動(dòng)處理器啟動(dòng)處理器后,NiFi將從sales表中讀取數(shù)據(jù),并通過(guò)“RecordToAvro”處理器轉(zhuǎn)換為Avro格式,便于后續(xù)的數(shù)據(jù)處理和分析。通過(guò)上述示例,我們可以看到ApacheNiFi如何通過(guò)其強(qiáng)大的數(shù)據(jù)源處理器,簡(jiǎn)化數(shù)據(jù)集成項(xiàng)目中的數(shù)據(jù)采集和轉(zhuǎn)換過(guò)程。無(wú)論是文件系統(tǒng)還是數(shù)據(jù)庫(kù),NiFi都能提供靈活且高效的解決方案,使得數(shù)據(jù)工程師能夠?qū)W⒂跀?shù)據(jù)流的設(shè)計(jì)和優(yōu)化,而不是數(shù)據(jù)源的細(xì)節(jié)。2掌握Nifi數(shù)據(jù)目標(biāo)2.1系統(tǒng)數(shù)據(jù)目標(biāo)概覽在數(shù)據(jù)集成流程中,ApacheNiFi的數(shù)據(jù)目標(biāo)(DataDestination)扮演著至關(guān)重要的角色。數(shù)據(jù)目標(biāo)是指數(shù)據(jù)流的終點(diǎn),即數(shù)據(jù)被最終存儲(chǔ)或發(fā)送的地方。NiFi提供了多種數(shù)據(jù)目標(biāo)處理器,包括文件輸出、數(shù)據(jù)庫(kù)輸出等,以滿足不同場(chǎng)景下的數(shù)據(jù)處理需求。2.1.1文件輸出處理器文件輸出處理器允許用戶將數(shù)據(jù)流中的內(nèi)容寫入文件系統(tǒng)。這可以是簡(jiǎn)單的文本文件,也可以是更復(fù)雜的格式,如CSV、JSON或XML。文件輸出處理器提供了靈活的配置選項(xiàng),如文件路徑、文件名生成策略、編碼類型等,使得數(shù)據(jù)的存儲(chǔ)方式高度可定制。示例:使用文件輸出處理器假設(shè)我們有一個(gè)數(shù)據(jù)流,需要將處理后的數(shù)據(jù)寫入本地文件系統(tǒng)的一個(gè)CSV文件中。以下是一個(gè)使用NiFi的文件輸出處理器的配置示例:添加文件輸出處理器:在NiFi的畫布上,通過(guò)搜索“FileOutput”添加一個(gè)文件輸出處理器。配置處理器:文件路徑:設(shè)置為/path/to/your/directory,這是文件將被寫入的目錄。文件名生成策略:選擇“Simple”,并設(shè)置前綴為data_,后綴為.csv。編碼:選擇UTF-8。內(nèi)容類型:選擇text/csv。連接數(shù)據(jù)流:將上游處理器的輸出連接到文件輸出處理器的輸入。啟動(dòng)流程:確保所有配置正確無(wú)誤后,啟動(dòng)NiFi流程。2.1.2數(shù)據(jù)庫(kù)輸出處理器數(shù)據(jù)庫(kù)輸出處理器用于將數(shù)據(jù)流中的內(nèi)容寫入關(guān)系型數(shù)據(jù)庫(kù)。這包括但不限于MySQL、PostgreSQL、Oracle等。通過(guò)配置數(shù)據(jù)庫(kù)連接、表名、字段映射等,可以將數(shù)據(jù)準(zhǔn)確地插入到數(shù)據(jù)庫(kù)中。示例:使用數(shù)據(jù)庫(kù)輸出處理器假設(shè)我們需要將數(shù)據(jù)流中的JSON格式數(shù)據(jù)插入到一個(gè)PostgreSQL數(shù)據(jù)庫(kù)中。以下是一個(gè)使用NiFi的數(shù)據(jù)庫(kù)輸出處理器的配置示例:添加數(shù)據(jù)庫(kù)輸出處理器:在NiFi的畫布上,搜索并添加一個(gè)“DBOutput”處理器。配置數(shù)據(jù)庫(kù)連接:連接池服務(wù):選擇一個(gè)已配置的PostgreSQL數(shù)據(jù)庫(kù)連接池服務(wù)。SQL語(yǔ)句:設(shè)置為INSERTINTOyour_table_name(column1,column2)VALUES(?,?)。配置字段映射:在“字段映射”選項(xiàng)中,將JSON數(shù)據(jù)中的字段與數(shù)據(jù)庫(kù)表中的字段進(jìn)行映射。例如,將JSON字段name映射到數(shù)據(jù)庫(kù)字段column1,將JSON字段age映射到數(shù)據(jù)庫(kù)字段column2。連接數(shù)據(jù)流:將上游處理器的輸出連接到數(shù)據(jù)庫(kù)輸出處理器的輸入。啟動(dòng)流程:確保所有配置正確無(wú)誤后,啟動(dòng)NiFi流程。2.2使用文件輸出處理器在NiFi中,文件輸出處理器是一個(gè)強(qiáng)大的工具,用于將數(shù)據(jù)流中的內(nèi)容寫入文件系統(tǒng)。下面是一個(gè)具體的使用場(chǎng)景和配置步驟:2.2.1場(chǎng)景描述假設(shè)我們有一個(gè)NiFi流程,用于收集來(lái)自多個(gè)傳感器的實(shí)時(shí)數(shù)據(jù)。數(shù)據(jù)以JSON格式接收,需要被轉(zhuǎn)換并存儲(chǔ)為CSV文件,以便后續(xù)的數(shù)據(jù)分析。2.2.2配置步驟添加文件輸出處理器:在NiFi的畫布上,搜索并添加一個(gè)“FileOutput”處理器。配置文件輸出處理器:文件路徑:設(shè)置為/data/sensor_data,這是文件將被寫入的目錄。文件名生成策略:選擇“Simple”,并設(shè)置前綴為sensor_data_,后綴為.csv。編碼:選擇UTF-8。內(nèi)容類型:選擇text/csv。添加轉(zhuǎn)換處理器:在文件輸出處理器之前,添加一個(gè)“ConvertRecord”處理器,用于將JSON數(shù)據(jù)轉(zhuǎn)換為CSV格式。配置轉(zhuǎn)換處理器:轉(zhuǎn)換策略:選擇“MaptoCSV”,并配置JSON字段到CSV字段的映射。連接數(shù)據(jù)流:將上游處理器(例如,接收J(rèn)SON數(shù)據(jù)的處理器)的輸出連接到“ConvertRecord”處理器的輸入,然后將“ConvertRecord”處理器的輸出連接到“FileOutput”處理器的輸入。啟動(dòng)流程:確保所有配置正確無(wú)誤后,啟動(dòng)NiFi流程。通過(guò)以上步驟,NiFi將能夠自動(dòng)收集、轉(zhuǎn)換并存儲(chǔ)傳感器數(shù)據(jù),為后續(xù)的數(shù)據(jù)分析提供便利。2.3使用數(shù)據(jù)庫(kù)輸出處理器數(shù)據(jù)庫(kù)輸出處理器是NiFi中用于將數(shù)據(jù)寫入關(guān)系型數(shù)據(jù)庫(kù)的工具。下面是一個(gè)具體的使用場(chǎng)景和配置步驟:2.3.1場(chǎng)景描述假設(shè)我們有一個(gè)NiFi流程,用于處理和存儲(chǔ)用戶注冊(cè)信息。數(shù)據(jù)以JSON格式接收,需要被存儲(chǔ)到一個(gè)PostgreSQL數(shù)據(jù)庫(kù)中,以便進(jìn)行用戶行為分析。2.3.2配置步驟添加數(shù)據(jù)庫(kù)輸出處理器:在NiFi的畫布上,搜索并添加一個(gè)“DBOutput”處理器。配置數(shù)據(jù)庫(kù)連接:連接池服務(wù):選擇一個(gè)已配置的PostgreSQL數(shù)據(jù)庫(kù)連接池服務(wù)。SQL語(yǔ)句:設(shè)置為INSERTINTOusers(username,email)VALUES(?,?)。配置字段映射:在“字段映射”選項(xiàng)中,將JSON數(shù)據(jù)中的字段與數(shù)據(jù)庫(kù)表中的字段進(jìn)行映射。例如,將JSON字段username映射到數(shù)據(jù)庫(kù)字段username,將JSON字段email映射到數(shù)據(jù)庫(kù)字段email。添加轉(zhuǎn)換處理器:在數(shù)據(jù)庫(kù)輸出處理器之前,添加一個(gè)“ConvertRecord”處理器,用于將JSON數(shù)據(jù)轉(zhuǎn)換為符合數(shù)據(jù)庫(kù)表結(jié)構(gòu)的格式。配置轉(zhuǎn)換處理器:轉(zhuǎn)換策略:選擇“MaptoSQL”,并配置JSON字段到SQL字段的映射。連接數(shù)據(jù)流:將上游處理器(例如,接收J(rèn)SON數(shù)據(jù)的處理器)的輸出連接到“ConvertRecord”處理器的輸入,然后將“ConvertRecord”處理器的輸出連接到“DBOutput”處理器的輸入。啟動(dòng)流程:確保所有配置正確無(wú)誤后,啟動(dòng)NiFi流程。通過(guò)以上步驟,NiFi將能夠自動(dòng)處理并存儲(chǔ)用戶注冊(cè)信息到PostgreSQL數(shù)據(jù)庫(kù)中,為后續(xù)的用戶行為分析提供數(shù)據(jù)支持。3構(gòu)建數(shù)據(jù)集成流程3.1設(shè)計(jì)數(shù)據(jù)流策略在設(shè)計(jì)數(shù)據(jù)流策略時(shí),ApacheNiFi提供了一個(gè)可視化界面,使得數(shù)據(jù)流的構(gòu)建變得直觀且易于管理。數(shù)據(jù)流策略應(yīng)考慮數(shù)據(jù)的來(lái)源、處理需求、目標(biāo)以及數(shù)據(jù)流的效率和安全性。3.1.1示例:從文件系統(tǒng)讀取數(shù)據(jù)并發(fā)送至Kafka假設(shè)我們有一個(gè)數(shù)據(jù)集成需求,需要從本地文件系統(tǒng)讀取日志文件,并將這些日志數(shù)據(jù)發(fā)送至Kafka集群進(jìn)行進(jìn)一步處理。首先,我們需要在NiFi中創(chuàng)建一個(gè)數(shù)據(jù)流,包括以下組件:GetFile處理器:用于從文件系統(tǒng)中讀取數(shù)據(jù)。PutKafkaRecord處理器:用于將數(shù)據(jù)發(fā)送至Kafka。GetFile處理器配置輸入目錄:設(shè)置為日志文件所在的目錄。文件過(guò)濾器:使用正則表達(dá)式.*\.log來(lái)匹配所有.log文件。PutKafkaRecord處理器配置KafkaBootstrapServers:輸入Kafka集群的地址,例如localhost:9092。TopicName:設(shè)置為日志數(shù)據(jù)的目標(biāo)主題,例如logs。3.2連接數(shù)據(jù)源與目標(biāo)在NiFi中,數(shù)據(jù)源與目標(biāo)的連接是通過(guò)創(chuàng)建數(shù)據(jù)流中的處理器連接來(lái)實(shí)現(xiàn)的。處理器連接定義了數(shù)據(jù)從一個(gè)處理器到另一個(gè)處理器的流動(dòng)路徑。3.2.1示例:從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)并寫入文件假設(shè)我們需要從一個(gè)MySQL數(shù)據(jù)庫(kù)讀取數(shù)據(jù),并將這些數(shù)據(jù)寫入到本地文件系統(tǒng)中。這涉及到以下組件:JDBCInput處理器:用于從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)。PutFile處理器:用于將數(shù)據(jù)寫入文件。JDBCInput處理器配置ConnectionURL:設(shè)置為數(shù)據(jù)庫(kù)的連接字符串,例如jdbc:mysql://localhost:3306/mydatabase。Query:設(shè)置SQL查詢語(yǔ)句,例如SELECT*FROMmytable。PutFile處理器配置輸出目錄:設(shè)置為文件將被寫入的目錄。文件名生成器:使用默認(rèn)的SimpleFileNameGenerator,或者自定義一個(gè)生成器來(lái)創(chuàng)建文件名。3.3處理器之間的數(shù)據(jù)流配置在NiFi中,數(shù)據(jù)流的配置不僅包括處理器的設(shè)置,還包括連接、關(guān)系和控制器服務(wù)的配置。這些配置確保數(shù)據(jù)能夠按照預(yù)期的策略流動(dòng)。3.3.1示例:數(shù)據(jù)清洗與轉(zhuǎn)換假設(shè)我們從一個(gè)數(shù)據(jù)源讀取了原始數(shù)據(jù),需要進(jìn)行清洗和轉(zhuǎn)換,然后發(fā)送至目標(biāo)。這可能涉及到以下組件:GetHTTP處理器:用于從HTTP源讀取數(shù)據(jù)。ExecuteScript處理器:使用Groovy腳本進(jìn)行數(shù)據(jù)清洗和轉(zhuǎn)換。PutS3Object處理器:將清洗后的數(shù)據(jù)發(fā)送至AmazonS3存儲(chǔ)。GetHTTP處理器配置URL:設(shè)置為數(shù)據(jù)源的HTTPURL。HTTPMethod:選擇GET或POST方法,根據(jù)數(shù)據(jù)源的要求。ExecuteScript處理器配置ScriptEngine:選擇Groovy。ScriptBody:編寫Groovy腳本來(lái)清洗和轉(zhuǎn)換數(shù)據(jù)。例如,刪除空行和轉(zhuǎn)換數(shù)據(jù)格式。//Groovy腳本示例
flowFile=session.get()
if(flowFile!=null){
defcontent=newString(session.read(flowFile))
defcleanedContent=content.replaceAll(/\n\s*\n/,'\n')//刪除空行
session.write(flowFile,{it.write(cleanedContent)})
session.transfer(flowFile,REL_SUCCESS)
}PutS3Object處理器配置AccessKey:輸入AmazonS3的訪問(wèn)密鑰。SecretKey:輸入AmazonS3的密鑰。BucketName:設(shè)置為數(shù)據(jù)將被寫入的S3桶名。通過(guò)以上步驟,我們可以在NiFi中構(gòu)建一個(gè)從HTTP源讀取數(shù)據(jù),進(jìn)行清洗和轉(zhuǎn)換,然后將數(shù)據(jù)發(fā)送至AmazonS3的數(shù)據(jù)集成流程。每個(gè)處理器的配置和連接定義了數(shù)據(jù)流的具體策略,確保數(shù)據(jù)能夠按照預(yù)期的方式流動(dòng)和處理。4數(shù)據(jù)源與目標(biāo)的高級(jí)實(shí)踐4.1數(shù)據(jù)路由與分發(fā)在ApacheNiFi中,數(shù)據(jù)路由與分發(fā)是核心功能之一,它允許用戶根據(jù)數(shù)據(jù)內(nèi)容或?qū)傩裕瑢?shù)據(jù)流導(dǎo)向不同的目標(biāo)。這一過(guò)程通過(guò)使用處理器和控制器服務(wù)來(lái)實(shí)現(xiàn),其中處理器負(fù)責(zé)讀取、修改或?qū)懭霐?shù)據(jù)流,而控制器服務(wù)則提供配置信息,如數(shù)據(jù)庫(kù)連接或加密密鑰。4.1.1實(shí)例:基于內(nèi)容的路由假設(shè)我們有一個(gè)日志數(shù)據(jù)流,其中包含不同類型的日志信息,如錯(cuò)誤日志、警告日志和信息日志。我們希望將錯(cuò)誤日志發(fā)送到一個(gè)錯(cuò)誤日志數(shù)據(jù)庫(kù),將警告日志發(fā)送到一個(gè)警告日志文件,而將信息日志發(fā)送到一個(gè)信息日志文件。創(chuàng)建處理器:首先,創(chuàng)建一個(gè)GetFile處理器來(lái)讀取日志文件。添加ContentBasedRouter處理器:此處理器將根據(jù)內(nèi)容決定數(shù)據(jù)的流向。配置ContentBasedRouter:設(shè)置路由規(guī)則,例如,如果日志包含ERROR,則路由到錯(cuò)誤日志數(shù)據(jù)庫(kù);如果包含WARNING,則路由到警告日志文件;否則,路由到信息日志文件。連接處理器:將GetFile處理器的輸出連接到ContentBasedRouter,然后從ContentBasedRouter連接到不同的目標(biāo)處理器。4.2數(shù)據(jù)轉(zhuǎn)換與富化數(shù)據(jù)轉(zhuǎn)換與富化是指在數(shù)據(jù)流中修改數(shù)據(jù)格式或添加額外信息的過(guò)程。NiFi提供了多種處理器來(lái)執(zhí)行這些操作,如ConvertRecord用于轉(zhuǎn)換數(shù)據(jù)格式,EnrichRecord用于添加元數(shù)據(jù)或從外部源獲取信息。4.2.1實(shí)例:數(shù)據(jù)格式轉(zhuǎn)換與添加地理位置信息假設(shè)我們有一個(gè)CSV文件,其中包含用戶的位置信息,如城市和國(guó)家。我們希望將這些信息轉(zhuǎn)換為JSON格式,并添加具體的經(jīng)緯度坐標(biāo)。創(chuàng)建GetFile處理器:讀取CSV文件。添加ConvertRecord處理器:配置此處理器使用CSVtoJSON轉(zhuǎn)換器將CSV數(shù)據(jù)轉(zhuǎn)換為JSON。使用EnrichRecord處理器:配置此處理器從一個(gè)地理位置API獲取經(jīng)緯度信息,并將其添加到JSON數(shù)據(jù)中。連接處理器:將GetFile的輸出連接到ConvertRecord,然后連接到EnrichRecord。4.3數(shù)據(jù)質(zhì)量與驗(yàn)證數(shù)據(jù)質(zhì)量與驗(yàn)證是確保數(shù)據(jù)準(zhǔn)確性和完整性的關(guān)鍵步驟。在NiFi中,可以通過(guò)使用ValidateRecord處理器和RecordValidator控制器服務(wù)來(lái)實(shí)現(xiàn)。ValidateRecord處理器可以檢查數(shù)據(jù)是否符合預(yù)定義的模式,而RecordValidator則提供模式定義和驗(yàn)證規(guī)則。4.3.1實(shí)例:驗(yàn)證用戶信息數(shù)據(jù)假設(shè)我們有一個(gè)用戶信息數(shù)據(jù)流,其中包含用戶的姓名、年齡和電子郵件。我們希望確保所有數(shù)據(jù)都符合以下規(guī)則:-姓名:非空字符串-年齡:18至100之間的整數(shù)-電子郵件:有效的電子郵件格式創(chuàng)建GetFile處理器:讀取用戶信息文件。添加ValidateRecord處理器:配置此處理器使用RecordValidator控制器服務(wù)來(lái)驗(yàn)證數(shù)據(jù)。配置RecordValidator:定義一個(gè)模式,包括上述規(guī)則。連接處理器:將GetFile的輸出連接到ValidateRecord,并處理驗(yàn)證失敗的情況,例如,將無(wú)效數(shù)據(jù)發(fā)送到一個(gè)錯(cuò)誤隊(duì)列。通過(guò)這些高級(jí)實(shí)踐,ApacheNiFi可以有效地管理復(fù)雜的數(shù)據(jù)流,確保數(shù)據(jù)的準(zhǔn)確傳輸和處理。5優(yōu)化與監(jiān)控?cái)?shù)據(jù)集成5.1性能調(diào)優(yōu)技巧5.1.1調(diào)整線程池在ApacheNiFi中,線程池的配置直接影響到處理器的執(zhí)行效率。默認(rèn)情況下,NiFi為每個(gè)處理器分配一個(gè)線程,但這可能不是最優(yōu)配置。例如,對(duì)于I/O密集型操作,如讀取或?qū)懭胛募?,可以增加線程池的大小以提高并行處理能力。示例配置<threadPoolSchedulingPeriod>0sec</threadPoolSchedulingPeriod>
<threadPoolSize>10</threadPoolSize>這里,threadPoolSize被設(shè)置為10,意味著處理器可以同時(shí)在10個(gè)線程上運(yùn)行。5.1.2優(yōu)化隊(duì)列策略NiFi使用隊(duì)列來(lái)管理數(shù)據(jù)流中的內(nèi)容。優(yōu)化隊(duì)列策略,如使用優(yōu)先級(jí)隊(duì)列或限制隊(duì)列大小,可以提高數(shù)據(jù)處理的效率和響應(yīng)時(shí)間。示例配置<queueSizeLimit>10000</queueSizeLimit>
<queueSizeLimitUnit>flowFiles</queueSizeLimitUnit>此配置限制隊(duì)列中的最大流文件數(shù)量為10000,防止隊(duì)列過(guò)度膨脹,影響系統(tǒng)性能。5.1.3使用斷言處理器斷言處理器可以用來(lái)檢查數(shù)據(jù)流中的條件,如數(shù)據(jù)大小或數(shù)據(jù)格式,以確保數(shù)據(jù)符合預(yù)期。這有助于避免在后續(xù)處理中出現(xiàn)錯(cuò)誤,從而提高整體性能。示例配置<propertyname="MinimumSize"value="10KB"/>
<propertyname="MaximumSize"value="10MB"/>這里,斷言處理器被配置為檢查數(shù)據(jù)大小是否在10KB到10MB之間。5.2監(jiān)控與日志記錄5.2.1啟用NiFi監(jiān)控NiFi提供了詳細(xì)的監(jiān)控信息,包括處理器的執(zhí)行時(shí)間、隊(duì)列大小和系統(tǒng)資源使用情況。這些信息對(duì)于識(shí)別瓶頸和優(yōu)化性能至關(guān)重要。如何啟用在NiFi的配置文件perties中,可以啟用詳細(xì)的監(jiān)控日志:erval=10sec這將設(shè)置監(jiān)控任務(wù)的執(zhí)行間隔為10秒。5.2.2使用NiFi系統(tǒng)監(jiān)控NiFi的系統(tǒng)監(jiān)控功能可以實(shí)時(shí)查看CPU、內(nèi)存和磁盤使用情況。這對(duì)于在高負(fù)載情況下監(jiān)控系統(tǒng)健康狀況非常有用。如何訪問(wèn)通過(guò)NiFi的WebUI,點(diǎn)擊“系統(tǒng)監(jiān)控”選項(xiàng)卡,可以查看實(shí)時(shí)的系統(tǒng)資源使用情況。5.2.3日志記錄配置NiFi的日志記錄可以配置為記錄不同級(jí)別的信息,從調(diào)試到錯(cuò)誤。這有助于在問(wèn)題發(fā)生時(shí)進(jìn)行故障排除。示例配置logback.configurationFile=/path/to/logback.xml在logback.xml文件中,可以配置日志級(jí)別和輸出格式。5.3故障排除與維護(hù)5.3.1使用NiFi的故障排除工具NiFi提供了多種故障排除工具,如“斷言”和“調(diào)試”功能,可以幫助識(shí)別和解決數(shù)據(jù)流中的問(wèn)題。如何使用在處理器的屬性中,啟用“斷言”或“調(diào)試”模式,可以查看處理器的輸入和輸出,以及執(zhí)行過(guò)程中的詳細(xì)信息。5.3.2定期清理NiFi內(nèi)容庫(kù)NiFi的內(nèi)容庫(kù)存儲(chǔ)了所有流文件的元數(shù)據(jù)。定期清理內(nèi)容庫(kù)可以避免數(shù)據(jù)膨脹,提高系統(tǒng)性能。清理策略在NiFi的配置文件中,可以設(shè)置內(nèi)容庫(kù)的清理策略,如清理頻率和保留時(shí)間:nifi.content.repository.max.size=10GB
nifi.content.repository.max.age=7days這將限制內(nèi)容庫(kù)的大小為10GB,并自動(dòng)清理超過(guò)7天的舊數(shù)據(jù)。5.3.3監(jiān)控NiFi狀態(tài)通過(guò)定期檢查NiFi的運(yùn)行狀態(tài),可以及時(shí)發(fā)現(xiàn)并解決潛在問(wèn)題,如處理器失敗或隊(duì)列堵塞。使用NiFi狀態(tài)監(jiān)控在NiFi的WebUI中,狀態(tài)監(jiān)控頁(yè)面提供了處理器、連接和隊(duì)列的實(shí)時(shí)狀態(tài),幫助快速定位問(wèn)題。以上配置和操作需要根據(jù)具體的應(yīng)用場(chǎng)景和系統(tǒng)資源進(jìn)行調(diào)整。在實(shí)踐中,持續(xù)監(jiān)控和優(yōu)化是保持?jǐn)?shù)據(jù)集成系統(tǒng)高效運(yùn)行的關(guān)鍵。6案例研究:Nifi在實(shí)際項(xiàng)目中的應(yīng)用6.1零售業(yè)數(shù)據(jù)集成案例在零售業(yè)中,數(shù)據(jù)集成是關(guān)鍵的一環(huán),它涉及到從多個(gè)數(shù)據(jù)源(如銷售點(diǎn)系統(tǒng)、庫(kù)存管理系統(tǒng)、客戶關(guān)系管理系統(tǒng)等)收集數(shù)據(jù),并將其整合到一個(gè)中心化的數(shù)據(jù)倉(cāng)庫(kù)中,以便進(jìn)行深入的分析和報(bào)告。ApacheNifi提供了一個(gè)強(qiáng)大的平臺(tái),可以實(shí)現(xiàn)數(shù)據(jù)的自動(dòng)化收集、處理和分發(fā)。下面,我們將通過(guò)一個(gè)具體的案例來(lái)展示如何使用Nifi在零售業(yè)中進(jìn)行數(shù)據(jù)集成。6.1.1數(shù)據(jù)源:銷售點(diǎn)系統(tǒng)銷售點(diǎn)系統(tǒng)(POS)是零售業(yè)中最常見的數(shù)據(jù)源之一。它記錄了每一次銷售的詳細(xì)信息,包括商品ID、銷售數(shù)量、銷售時(shí)間、銷售地點(diǎn)等。為了將這些數(shù)據(jù)集成到數(shù)據(jù)倉(cāng)庫(kù)中,我們可以使用Nifi的GetFile處理器來(lái)定期從POS系統(tǒng)的文件目錄中讀取數(shù)據(jù)文件。-**GetFile**處理器配置:
-監(jiān)聽目錄:`/path/to/pos/data`
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- AI智能家居系統(tǒng)打造智慧家庭生活新體驗(yàn)
- 健康醫(yī)療在家庭中的推廣與應(yīng)用提高生活質(zhì)量
- 企業(yè)如何借助工業(yè)互聯(lián)網(wǎng)平臺(tái)提升效率
- 2014滬教版七年級(jí)數(shù)學(xué)上學(xué)期期末測(cè)卷
- 企業(yè)級(jí)智能制造技術(shù)在辦公自動(dòng)化中的應(yīng)用實(shí)踐
- 體育鍛煉與學(xué)習(xí)效率的相互促進(jìn)機(jī)制
- 從思維到行動(dòng)實(shí)驗(yàn)教學(xué)中創(chuàng)新能力培養(yǎng)的路徑研究
- 以學(xué)生為中心的學(xué)校健身空間設(shè)計(jì)與裝飾策略
- 以用戶為中心的創(chuàng)新企業(yè)社交媒體運(yùn)營(yíng)策略研究
- 以醫(yī)療角度談家庭教育的挑戰(zhàn)與對(duì)策
- 中職生家訪記錄內(nèi)容
- Q∕GDW 10250-2021 輸變電工程建設(shè)安全文明施工規(guī)程
- 客運(yùn)企業(yè)雙重預(yù)防體系培訓(xùn)(57頁(yè))
- 新概念 二 Lesson 75 SOS
- 鋁合金壓鑄件的標(biāo)準(zhǔn)
- 吹風(fēng)機(jī)成品過(guò)程質(zhì)量控制檢查指引
- 固定資產(chǎn)情況表
- 瀝青路面施工監(jiān)理工作細(xì)則
- 《彩色的中國(guó)》音樂(lè)教學(xué)設(shè)計(jì)
- 人教版八年級(jí)上冊(cè)英語(yǔ)單詞表默寫版(直接打印)
- 4.初中物理儀器配備目錄清單
評(píng)論
0/150
提交評(píng)論