周少珂 郭璇 張振平 付媛冰
摘 要:【目的】Hadoop系統(tǒng)是大數據分布式集群系統(tǒng),其開源的生態(tài)圈中有眾多功能組件,通過在大數據Hadoop集群系統(tǒng)上部署Sqoop組件,將本地關系型Mysql數據庫中的數據和Hive數據倉庫中存儲的數據進行快速導入導出,進一步研究數據傳輸性能?!痉椒ā渴紫仍谄髽I(yè)服務器上部署配置Hadoop分布式集群系統(tǒng),其次在該集群上部署Sqoop組件并測試與Mysql數據庫和Hive數據倉庫的連通性,最后使用Sqoop技術測試本地Mysql數據庫和Hive數據倉庫之間的導入和導出?!窘Y果】通過Sqoop技術能夠更加便捷快速地從本地Mysql數據庫上傳到Hadoop集群系統(tǒng),與傳統(tǒng)方式下先將本地Mysql數據庫中數據導出TXT文檔格式后再使用Hive數據倉庫的Load數據批量加載功能相比,在時間和效率方面大為提升?!窘Y論】驗證了Sqoop組件在Hadoop集群中部署運行的正確性,為大數據技術學習者提供一定程度的參考借鑒。
關鍵詞:大數據;Hadoop;分布式集群;Sqoop
中圖分類號:TP311? ? ?文獻標志碼:A? ? ?文章編號:1003-5168(2024)06-0025-04
DOI:10.19968/j.cnki.hnkj.1003-5168.2024.06.005
Research on Sqoop Data Transmission Technology Based on Big Data Hadoop Cluster
ZHOU Shaoke GUO Xuan ZHANG Zhenping FU Yuanbing
(College of Information Science and Engineering, Henan Vocational College of Applied Technology, Zhengzhou 450042, China)
Abstract:[Purposes] The Hadoop system is a big data distributed cluster system with numerous functional components in its open source ecosystem. By deploying the Sqoop component on the big data Hadoop cluster system, the data in the local relational MySQL database and the data stored in the Hive data warehouse can be quickly imported and exported, further studying the data transmission performance. [Methods] This article first deploys and configures the Hadoop distributed cluster system on the enterprise server, and then deploys the Sqoop component on the cluster and tests its connectivity with the MySQL database and Hive data warehouse. Finally, this paper uses Sqoop technology to test the import and export between the local MySQL database and Hive data warehouse. [Findings] Through Sqoop technology, it is more convenient and fast to upload data from the local MySQL database to the Hadoop cluster system. Compared to traditional methods of exporting data from the local MySQL database to TXT document format and then using the Hive data warehouse's Load data batch loading function, the technology greatly improves time and efficiency. [Conclusions] This paper verifies the correctness of deploying and running Sqoop components in Hadoop clusters, providing a certain degree of reference for big data technology learners.
Keywords: big data; Hadoop; distributed clustering; Sqoop
0 引言
Hadoop起始于2002年Apache項目中的Nutch項目。開發(fā)者通過學習和借鑒Google的開源GFS、MapReduce、BigTable三篇論文,開發(fā)創(chuàng)建出Hadoop項目。隨著技術的發(fā)展,Hadoop版本已經發(fā)展到Apache Hadoop 3.3.6[1]。
目前,Hadoop生態(tài)圈發(fā)展日益完善,其中包括HDFS分布式文件系統(tǒng)、MapReduce計算模型、Zookeeper協(xié)調一致性服務、Hbase列式數據庫、Hive數據倉庫、Flume日志采集、Sqoop數據泵等眾多生態(tài)圈中的組件[2]。Sqoop組件功能是完成關系型(如Mysql、Oracle)和大數據集群型(如Hbase)數據庫、Hive數據倉庫、HDFS分布式文件系統(tǒng)之間數據導入導出的存儲[3]。
1 Hadoop集群部署
Hadoop項目整體包括底層的大數據分布式集群部署和上層的大數據應用開發(fā),本研究主要針對底層大數據分布式集群部署進行研究。在Hadoop分布式集群部署中可以分為三類:單機版Hadoop集群;偽分布式Hadoop集群;完全分布式Hadoop集群。其中完全分布式集群部署是真實集群環(huán)境,前兩類集群僅僅作為初學者進行學習的參考。
本研究使用三臺Linux系統(tǒng)進行Hadoop分布式集群系統(tǒng)配置[4]。在運行CentOS7.5發(fā)行版的三臺Linux系統(tǒng)服務器上進行完全分布式Hadoop集群系統(tǒng)部署。
首先,進行分布式集群中的Java環(huán)境變量的基礎配置。由于Hadoop項目的底層環(huán)境為Java,因此需要在三臺服務器中的/etc/profile目錄下配置JDK1.8環(huán)境變量。在配置完畢后需要使用Source命令對文檔進行刷新,使用Java -version命令查看JDK的具體版本信息是否正確。在配置部署前需將各主機防火墻進行關閉,SeLinux功能禁用,并配置使用本地Yum軟件源,同時分別修改主機名為Hadoop01、Hadoop02、Hadoop03,其中Hadoop01為主節(jié)點(即NameNode節(jié)點),Hadoop02和Hadoop03為從節(jié)點(即DataNode節(jié)點),并修改主機名和IP地址的映射。
其次,在三臺CentOS7.5系統(tǒng)服務器節(jié)點上配置六個文檔,分別為:hadoop-env.sh文檔;core-site.xml文檔;yarn-site.xml文檔;mapred-site.xml文檔;hdfs-site.xml文檔;master-slave文檔。該文件主要保存和記錄分布式集群數量和名稱,使集群成為統(tǒng)一運行整體。該文件中需把所有DataNode數據節(jié)點的主機名添加至文件中,且每個DataNode數據節(jié)點名稱單獨占用一行記錄[5]。
再次,對Hadoop分布式集群系統(tǒng)NameNode控制節(jié)點在Shell終端環(huán)境下進行Hadoop namenode format格式化命令操作。在格式化節(jié)點過程中不要進行多次操作,以免造成NameNode節(jié)點和DataNode節(jié)點不同步,影響系統(tǒng)的穩(wěn)定性,通過使用Start-all.sh命令啟動集群。
最后,Hadoop分布式集群系統(tǒng)運行成功后,就可以隨機選擇任何一臺主機進行測試,有兩種方式進行測試。一種是瀏覽器Web界面登錄方式。使用瀏覽器輸入http://主節(jié)點IP地址(或域名):50070,進入HDFS分布式文件系統(tǒng)界面,如圖1所示。另一種是通過Shell終端命令方式。輸入“JPS”“hadoop fs –ls / ”等命令。
2 Sqoop配置部署
Sqoop組件是Hadoop系統(tǒng)生態(tài)圈中的組件之一,也稱作“數據泵”。主要是本地關系型(如Mysql、Oracle)數據庫和大數據Hadoop集群中的非關系型(如Hbase)數據庫、Hive數據倉庫、HDFS分布式文件系統(tǒng)之間數據的導入導出,Sqoop組件技術更加方便數據之間傳輸的高效性和便捷性。在Hadoop分布式集群系統(tǒng)、Hive數據倉庫、Mysql關系型數據庫已正確完成部署后,本研究以Linux系統(tǒng)中Mysql本地數據庫和Hadoop分布式集群中的Hive數據倉庫二者為研究對象,進行數據間的傳輸測試,其Sqoop組件工作原理,如圖2所示。
Sqoop組件是開源免費的,可以在開源鏡像站中下載,本研究使用Sqoop-1.4.7.bin__hadoop-2.7.6.tar.gz壓縮包,Sqoop版本為1.4.7。為了避免操作權限的影響,Linux操作系統(tǒng)中使用root管理員權限身份操作,在Hadoop完全分布式集群(三臺服務器)運行的基礎上,通過Hadoop01(即Master節(jié)點)進行Sqoop組件的安裝部署。
①上傳服務器Sqoop組件。使用將SecureCRT遠程登錄軟件,將Sqoop壓縮包上傳至/root目錄下,并將/root/Sqoop-1.4.7.bin__hadoop-2.7.6.tar.gz壓縮包解壓到/usr/local/src目錄。將解壓后生成的Sqoop-1.4.7.bin__hadoop-2.7.6文件夾更名為Sqoop。
②修改并配置Sqoop環(huán)境。復制Sqoop-env-template.sh模板,并將模板重命名為Sqoop-env.sh。修改Sqoop-env.sh文件,添加Hdoop、Hbase、Hive等組件的安裝路徑。
④配置連接Mysql數據庫。為了使Sqoop能夠連接MySQL數據庫,需要將Mysql-connector-java-5.1.46.jar文件放入Sqoop的lib目錄中。該jar文件版本需要與MySQL數據庫的5.7版本相對應,否則Sqoop導入數據時會報錯。
⑤測試Sqoop組件連接Mysql數據庫。在Master服務器節(jié)點上啟動Hadoop分布式集群系統(tǒng),測試Sqoop組件是否能夠正常連接Mysql數據庫。使用“sqoop list-databases --connect jdbc:mysql://hadoop01:3306/ --username root -P Mysql數據庫密碼”命令,能夠查看到MySQL數據庫中的information_schema、hive、mysql、performance_schema、sys等數據,說明Sqoop可以正常連接MySQL數據庫。
⑥測試Sqoop組件連接Hive數據倉庫。為使Sqoop能夠連接Hive,需要將Hive組件/usr/local/src/hive/lib目錄下的hive-common-2.0.0.jar放入Sqoop安裝路徑的lib目錄中,該jar包為內部調用普通庫函數時所需要使用的包。
通過以上六步的配置,完成了Hadoop分布式集群系統(tǒng)中Sqoop組件的安裝部署,并能夠使用Sqoop相關命令進行本地Mysql數據庫和Hive數據倉庫的連接。其中Hive數據倉庫并非數據庫而是一種數據庫引擎,通過Hive將數據存儲在HDFS分布式文件系統(tǒng)中。
3 Sqoop功能測試
根據Sqoop組件功能,其測試包含兩個方面。一方面是,將本地Mysql數據庫中的數據進行導出,通過Sqoop技術再次將該數據導入到Hive數據倉庫中。另一方面是,將Hive數據倉庫中的數據導出,通過Sqoop技術再次將該數據導入到本地Mysql數據庫中。測試完成后,通過實際的運行結果,驗證Sqoop配置的正確性和性能。
①創(chuàng)建Mysql數據庫和數據表的樣本數據。使用Root管理員權限身份登錄Linux本地系統(tǒng)的Mysql數據庫,創(chuàng)建Example數據庫和樣例Student表,該表格有Snumber學號主鍵列和Sname姓名列?!癱reate table Student(Snumber char(9) primary key,Sname varchar(10));”并向該表格中插入三行詳細數據“insert into Student values(‘01,‘ZhangSan);”“insert into Student values(‘02,‘LiSi);”“insert into Student values(‘03,WangWu);”
②創(chuàng)建Hive數據倉庫中的Example數據庫和Student數據表。在運行的Hadoop分布式集群系統(tǒng)中啟動Hive數據倉庫并創(chuàng)建Example數據庫“hive> create database sample;”進而創(chuàng)建Student數據表“hive> create table Student(Snumber STRING,Sname STRING) row format delimited fields terminated by ‘| stored as textfile;”此時Hive中的Student數據表是使用“|”進行、列之間的分割,并最終以textfile文件格式進行數據存儲,此時Hive中的數據庫和表格格式已創(chuàng)建完成。
③將本地Mysql數據導出,導入Hive數據倉庫測試。本地Mysql數據庫中已創(chuàng)建數據庫和數據表,并插入部分行數據,所以可以直接在Master服務器中使用“sqoop import--connectjdbc:mysql://master:3306/Example --username root --password Password123?。〝祿烀艽a) --table student --fields-terminated-by ‘| --delete-target-dir --num-mappers 1 --hive-import --hive-database Example --hive-table Student”命令進行測試。其中數據庫密碼設定符合密碼復雜度即可,在該命令底層運行過程中會轉換成一個MapReduce計算模型的工作任務,如圖3所示。
④將Hive數據倉庫導出,導入本地Mysql數據測試。由于Mysql數據庫中已插入部分數據,因此需要先刪除表格中的數據,但無須刪除表格框架結構,使用命令“mysql>use Example; mysql>delete from Student;”在Master節(jié)點中使用“sqoop export --connect jdbc:mysql://master:3306/Example?useUnicode=true &characterEncoding=utf-8 --username root --password Password123?。〝祿烀艽a) --table Student --input-fieldsterminated-by ‘| --export-dir /user/hive/warehouse/Example.db/Student/*”命令。在從Hive導出數據過程中,底層需要轉換為MapReduce計算模型的程序進行調用系統(tǒng)程序,因此是以MapReduce程序進行運行。Hive數據倉庫中的數據成功導入到本地Mysql數據庫中的過程,如圖4所示。
4 結語
Sqoop組件是Hadoop系統(tǒng)生態(tài)圈中的組件之一,其主要功能是進行本地數據和Hadoop分布式集群系統(tǒng)中數據間的傳輸。通過Sqoop技術能夠更加便捷、快速地從本地Mysql數據庫上傳到Hadoop集群系統(tǒng),與傳統(tǒng)方式下將本地Mysql數據庫中數據導出TXT文檔格式后,再使用Hive數據倉庫的Load數據批量加載功能相比,在時間和效率方面大為提升。下一步,可以在此基礎上運用海量數據,從使用Sqoop技術導入和Hive的Load批量加載兩個方面,將數據導入到Hive數據倉庫中進行對比研究,并進行性能優(yōu)化。
參考文獻:
[1]劉曉莉,李滿,熊超,等.基于Hadoop搭建高可用數據倉庫的研究和實現[J].現代信息科技,2023,7(1):99-101.
[2]李霄揚,朱恒.基于HHS的離線數據分析平臺的設計與實現[J].電腦知識與技術,2023,19(10):75-77.
[3]吳建.基于Linux的Hadoop集群搭建的探索與實現[J].物聯(lián)網技術,2023,13(7):134-137,141.
[4]王建軍,張英成,戰(zhàn)非,等.基于Sqoop的高校海量結構化數據導入研究[J].無線互聯(lián)科技,2018,15(20):52-53.
[5]周少珂,王雷,崔琳,等.大數據Hadoop技術完全分布式集群部署[J].工業(yè)控制計算機,2021,34(8):101-103.