版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Hadoop大數(shù)據(jù)平臺(tái)構(gòu)建與應(yīng)用課件項(xiàng)目3就業(yè)崗位數(shù)據(jù)采集和存儲(chǔ)Hadoop大數(shù)據(jù)平臺(tái)構(gòu)建與應(yīng)用課件項(xiàng)目3就業(yè)崗位數(shù)據(jù)采集和項(xiàng)目3 就業(yè)崗位數(shù)據(jù)采集和存儲(chǔ)項(xiàng)目3 任務(wù)3.1 使用網(wǎng)絡(luò)爬蟲采集崗位招聘數(shù)據(jù)A任務(wù)3.2 采集的數(shù)據(jù)上傳到HDFSB任務(wù)3.3 使用Sqoop轉(zhuǎn)換Mysql中的學(xué)生成績數(shù)據(jù)到Hive中C項(xiàng)目描述任務(wù)3.1 使用網(wǎng)絡(luò)爬蟲采集崗位招聘數(shù)據(jù)A任務(wù)3.2 采集的任務(wù)3.1 使用網(wǎng)絡(luò)爬蟲采集崗位招聘數(shù)據(jù)【知識(shí)目標(biāo)】 識(shí)記WebMagic的流程架構(gòu)和HDFS的基礎(chǔ)架構(gòu)以及Hive的基本概念和特點(diǎn)。 領(lǐng)會(huì)網(wǎng)絡(luò)爬蟲的編程實(shí)現(xiàn)的步驟和方法?!炯寄苣繕?biāo)】 學(xué)會(huì)使用WebMagic開發(fā)網(wǎng)絡(luò)爬
2、蟲的步驟和方法 學(xué)會(huì)HDFS服務(wù)進(jìn)程管理。 學(xué)會(huì)HDFS屬性配置管理。 學(xué)會(huì)HDFS上傳文件的方法。 學(xué)會(huì)Sqoop上傳文件至Hive中的方法。任務(wù)3.1 使用網(wǎng)絡(luò)爬蟲采集崗位招聘數(shù)據(jù)【知識(shí)目標(biāo)】知識(shí)準(zhǔn)備webmagic-scriptswebmagic-seleniumwebmagic-saxonwebmagic-samplesWebMagic項(xiàng)目里還有幾個(gè)包,這些都是一些實(shí)驗(yàn)性的功能,目的只是提供一些與外圍工具整合的樣例。webmagic-avalon13524WebMagic的是一個(gè)無須配置、便于二次開發(fā)的爬蟲框架,它提供簡單靈活的API,只需少量代碼即可實(shí)現(xiàn)一個(gè)爬蟲。其架構(gòu)流程如圖3-1
3、所示。3-1 WebMagic架構(gòu)圖知識(shí)準(zhǔn)備webmagic-scriptswebmagic-s任務(wù)實(shí)施(1)解析崗位列表頁源代碼崗位信息頁后續(xù)列表分頁圖3-2 崗位列表頁結(jié)構(gòu)任務(wù)實(shí)施(1)解析崗位列表頁源代碼崗位信息頁后續(xù)列表分頁圖這是在WebMagic框架中的PageProcessor組件中定制實(shí)現(xiàn)的,首先要做的是設(shè)置抓取的基本配置,包括編碼、抓取間隔、重試次數(shù),代碼如下:private Site site = Site.me().setRetryTimes(3).setSleepTime(10).setCharset(gbk);這里選擇重試次數(shù)為3次,抓取間隔為10毫秒,編碼根據(jù)為51j
4、ob網(wǎng)頁源代碼可以查看得到,如下所示:【云計(jì)算招聘,求職】-前程無憂該招聘網(wǎng)站的編碼為gbk。這是在WebMagic框架中的PageProcessor組件接下來,判斷當(dāng)前分析的頁面是否為崗位列表頁。不難發(fā)現(xiàn),列表頁的URL中都含有字符段,可以通過簡單的if語句判斷:if (page.getUrl().toString().contains()下面分析崗位信息頁鏈接的HTML源代碼,并用Xpath語法解析出,添加至抓取隊(duì)列。檢查某個(gè)鏈接源代碼的方法,在崗位列表中右擊一項(xiàng),在彈出的下拉菜單中選擇“Inspect”命令,如圖3-3所示。圖3-3 選擇Inspect命令接下來,判斷當(dāng)前分析的頁面是否為
5、崗位列表頁。不難發(fā)現(xiàn),列表頁右擊并選擇檢查(Inspect)后,出現(xiàn)了該鏈接的HTML源碼,如圖3-4所示。圖3-4 查看HTML源代碼右擊并選擇檢查(Inspect)后,出現(xiàn)了該鏈接的HTML源可以發(fā)現(xiàn),所需要的URL地址是一個(gè)標(biāo)簽下的唯一的超鏈接,該標(biāo)簽的class名為t1。同理,這個(gè)崗位列表頁下的所有崗位信息頁的URL都有著相同的格式。因此可以使用Xpath全部識(shí)別,并添加至抓取隊(duì)列,代碼實(shí)現(xiàn)如下:select = page.getHtml().xpath(/pclass=t1);urls = select.links().all();page.addTargetRequests(url
6、s);添加后續(xù)分頁的鏈接也是如上一樣的方法,在此省去分析HTML源碼的截圖,直接貼上代碼:select = page.getHtml().xpath(/divclass=dw_page);urls = select.links().all();可以發(fā)現(xiàn),所需要的URL地址是一個(gè)標(biāo)簽下的唯一的超鏈接這里需要注意的是,要防止添加空白搜索結(jié)果頁的鏈接,不然將會(huì)把整個(gè)51job的崗位全都抓取下來。盡管按照定制的抓取邏輯,這種意外不會(huì)出現(xiàn),但還是添加了踢出隊(duì)列的保護(hù)機(jī)制,代碼如下:Iterator it = urls.iterator(); while(it.hasNext() String x = i
7、t.next(); if(x.equals(/list/000000,000000,0000,00,9,99,%2520,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=) it.r
8、emove(); page.addTargetRequests(urls);這里需要注意的是,要防止添加空白搜索結(jié)果頁的鏈接,不然將會(huì)把(2)解析崗位信息頁源代碼如圖3-5所示,需要抓取崗位信息頁上用紅框標(biāo)注出來的信息。方法與上一步中的類似,也是通過分析HTML源碼,再利用Xpath語法或者正則表達(dá)式去定位相關(guān)內(nèi)容.(2)解析崗位信息頁源代碼具體的代碼如下:else if (page.getUrl().toString().startsWith(/) page.putField(url, page.getUrl().toString(); / 崗位名稱page.putField(job, pa
9、ge.getHtml().xpath(/divclass=cn/h1/text().toString(); / 發(fā)布日期page.putField(createtime, page.getHtml().regex(+).toString(); / 崗位描述 page.putField(content, page.getHtml().xpath(/divclass=bmsg job_msg inbox/html().toString(); / 其他可選項(xiàng) page.putField(salary, page.getHtml().xpath(/divclass=cn/strong/text().t
10、oString();具體的代碼如下:page.putField(location, page.getHtml().xpath(/spanclass=lname/text().toString(); page.putField(company, page.getHtml().xpath(/pclass=cname/a/text().toString(); page.putField(experience, page.getHtml().regex(+).toString(); page.putField(education, page.getHtml().regex(+).toString();
11、 page.putField(number, page.getHtml().regex(+).toString();page.putField(location, page(3)根據(jù)條件保存抓取到的信息這里根據(jù)條件篩選崗位信息,比如已經(jīng)列出了一些培訓(xùn)機(jī)構(gòu)的“公司黑名單”,保存在了Dictionary類中的Blacklist靜態(tài)String數(shù)組中,那么可以用簡單的if語句來判斷:Boolean choose = true;/判斷是否為培訓(xùn)公司發(fā)布的“垃圾”招聘信息for (String i:Dictionary.Blacklist)if ( (String) resultItems.get(co
12、mpany).contains(i)choose=false;對(duì)于發(fā)布日期,僅需要保留當(dāng)天發(fā)布的招聘信息,判斷代碼如下:/判斷是否為當(dāng)天發(fā)布的招聘信息if (!(String) resultItems.get(createtime).contains(Today_Date)choose=false;(3)根據(jù)條件保存抓取到的信息其中Today_Date是一個(gè)靜態(tài)final型字符串:public static final String Today_Date = timeTostrMD(new Date();timeToStrMD是一個(gè)自定義獲取當(dāng)天月份和日期并返回諸如“05-05”形式字符串的方
13、法。代碼如下:public static String timeTostrMD(Date date) String strDate = ;if (date != null) SimpleDateFormat format = new SimpleDateFormat(MM-dd);strDate = format.format(date);return strDate;其中Today_Date是一個(gè)靜態(tài)final型字符串:在篩選完之后,便可以將抓取內(nèi)容選擇性地保存至本地的某個(gè)文件中,這里定制的保存格式為一個(gè)崗位保存一行,每行中的信息用制表符t分隔,最后保存在一個(gè)以日期命名的文本文件中,代碼如下
14、:try /定義存儲(chǔ)路徑,以每天為一個(gè)文件存儲(chǔ)String path = this.path + PATH_SEPERATOR + timeTostrYMD(new Date() + .txt;File file = getFile(path);String str =resultItems.get(url)+t+resultItems.get(job)+t+ resultItems.get(location)+ t+ resultItems.get(company)在篩選完之后,便可以將抓取內(nèi)容選擇性地保存至本地的某個(gè)文件中+ t+ resultItems.get(salary)+ t+ r
15、esultItems.get(experience)+ t+ resultItems.get(education)+ t+ resultItems.get(number)+ t + resultItems.get(createtime)+ t+ rn;FileUtils.writeStringToFile(file, str, utf-8, true); catch (IOException e) logger.warn(write file error, e);+ t(4)運(yùn)行代碼程序WebMagic的核心組件為PageProcessor與Pipeline,通過上述步驟的講解,讀者應(yīng)該可以定
16、制這兩個(gè)組件了,而調(diào)用這兩個(gè)核心組件是通過Spider類,簡單的代碼如下:Spider.create(new CrawlJob().addUrl(URL_START).addPipeline(new PipelineJob().thread(5).run();由于要將Java程序?qū)С鰹閖ar文件,并且需要實(shí)現(xiàn)無參傳遞(使用默認(rèn)保存路徑)和有參傳遞(使用指定保存路徑)兩種形式,因此使用main方法的代碼如下:public static void main(String args) throws Exception String URL_START = (4)運(yùn)行代碼程序/list/000000%
17、252C00,000000,0000,00,9,99,%25E4%25BA%2591%25E8%25AE%25A1%25E7%25AE%2597,2,1.html?lang=c°reefrom=99&stype=1&workyear=99&cotype=99&jobterm=99&companysize=99&radius=-1&address=&lonlat=&postchannel=&list_type=&ord_field=&curr_page=&dibiaoid=0&landmark=&welfare=;if (args.length=0)Spider.create(new Cr
18、awlJob().addUrl(URL_START).addPipeline(new PipelineJob().thread(5).run();elseSpider.create(new CrawlJob().addUrl(URL_START).addPipeline(new PipelineJob(args0).thread(5).run();/list任務(wù)3.2 采集的數(shù)據(jù)上傳到HDFS任務(wù)描述1. 借助學(xué)習(xí)論壇、網(wǎng)絡(luò)視頻等網(wǎng)絡(luò)資源和各種圖書資源,學(xué)習(xí)HDFS文件系統(tǒng)的使用方法。2. 將利用WebMagic爬取工具爬取的招聘崗位信息上傳到HDFS文件系統(tǒng)中。任務(wù)目標(biāo)1. 熟悉HDFS工作
19、原理。2. 學(xué)會(huì)文件系統(tǒng)的屬性配置方法。3. 學(xué)會(huì)通過多種方式上傳文件至HDFS文件系統(tǒng)的方法。任務(wù)3.2 采集的數(shù)據(jù)上傳到HDFS任務(wù)描述知識(shí)準(zhǔn)備在HDFS體系結(jié)構(gòu)采用Master/Slave的主從架構(gòu),如圖3-6所示,其中Master節(jié)點(diǎn)運(yùn)行NameNode進(jìn)程,Slave節(jié)點(diǎn)運(yùn)行DataNode進(jìn)程。圖3-6 HDFS體系結(jié)構(gòu)知識(shí)準(zhǔn)備在HDFS體系結(jié)構(gòu)采用Master/Slave的主磁盤有一個(gè)Block Size的概念,它是磁盤讀/寫數(shù)據(jù)的最小單位。文件系統(tǒng)的塊一般為幾千字節(jié)(byte),磁盤塊一般為512字節(jié)(byte)。HDFS也有Block的概念,但它的塊是一個(gè)很大的單元,是文件存
20、儲(chǔ)處理的邏輯單元。默認(rèn)是64 MB。像硬盤中的文件系統(tǒng)一樣,在HDFS中的文件將會(huì)按塊大小進(jìn)行分解,并作為獨(dú)立的單元進(jìn)行存儲(chǔ)。但和硬盤中的文件系統(tǒng)不一樣的是,存儲(chǔ)在塊中的一個(gè)比塊小的文件并不會(huì)占據(jù)一個(gè)塊大小的物理空間(HDFS中一個(gè)塊只存儲(chǔ)一個(gè)文件的內(nèi)容)。HDFS作為一個(gè)分布式文件系統(tǒng),是設(shè)計(jì)用來處理大文件的,使用抽象的塊會(huì)帶來很多好處。一個(gè)好處是可以存儲(chǔ)任意大的文件,而又不會(huì)受到網(wǎng)絡(luò)中任一單個(gè)節(jié)點(diǎn)磁盤大小的限制。另外一個(gè)好處是使用抽象塊作為操作的單元可簡化存儲(chǔ)子系統(tǒng),不僅如此,塊更有利于分布式文件系統(tǒng)中復(fù)制容錯(cuò)的實(shí)現(xiàn)。在HDFS中為了處理節(jié)點(diǎn)故障,默認(rèn)將文件塊副本數(shù)設(shè)定為3份,分別存儲(chǔ)在集
21、群的不同節(jié)點(diǎn)上。當(dāng)一個(gè)塊損壞時(shí),系統(tǒng)會(huì)通過NameNode獲取元數(shù)據(jù)信息,在另外的機(jī)器上讀取一個(gè)副本并進(jìn)行存儲(chǔ),這個(gè)過程對(duì)用戶來說都是透明的。當(dāng)然,這里的文件塊副本冗余可以通過文件進(jìn)行配置,在HDFS中,可以通過終端命令直接獲得文件和塊信息,比如以下命令可以列出文件系統(tǒng)中組成各個(gè)文件的塊:hadoop fsck / -files -blocks磁盤有一個(gè)Block Size的概念,它是磁盤讀/寫數(shù)據(jù)的最任務(wù)實(shí)施(1)服務(wù)進(jìn)程管理hadoop-daemon.sh腳本是啟動(dòng)和停止Hadoop后臺(tái)程序, -config參數(shù)指定啟動(dòng)程序時(shí)用到的配置文件目錄。大括號(hào)中的namenode和datenode
22、是需要啟動(dòng)的進(jìn)程,兩者擇其一。命令如下:# /usr/hdp/current/hadoop-client/sbin/hadoop-daemon.sh -config /usr/hdp/current/hadoop-client/conf stop namenode/datenode# /usr/hdp/current/hadoop-client/sbin/hadoop-daemon.sh -config /usr/hdp/current/hadoop-client/conf start namenode/datenode任務(wù)實(shí)施(1)服務(wù)進(jìn)程管理hadoop-daemon.sh腳(2)HDFS
23、屬性配置 core-site.xml設(shè)置Hadoop默認(rèn)文件系統(tǒng)。 fs.defaultFS hdfs:/master:8020設(shè)置緩存的大小,這個(gè)參數(shù)要設(shè)置為系統(tǒng)頁面大小的倍數(shù),以byte為單位。 io.file.buffer.size 131072設(shè)置HDFS的NameNode的格式化信息存儲(chǔ)路徑。 hadoop.tmp.dir file:/home/hadoop/tmp Abase for other temporary directories.(2)HDFS屬性配置 core-site.xml設(shè)置Had(2)HDFS屬性配置hdfs-site.xml設(shè)置本地文件系統(tǒng)DFS NameNo
24、de存放Name Ttable的路徑。 .dir file:/usr/hadoop/dfs/name設(shè)置本地文件系統(tǒng)DFS DataNode存放數(shù)據(jù)Block的目錄。 dfs.datanode.data.dir file:/usr/hadoop/dfs/data設(shè)置HDFS文件系統(tǒng)Block的復(fù)制份數(shù)。設(shè)置為的3時(shí),HDFS就會(huì)按照設(shè)置將文件系統(tǒng)塊復(fù)制為3份。如果采用的是偽分布配置,這里參數(shù)應(yīng)設(shè)置為1,否則在單獨(dú)一個(gè)數(shù)據(jù)節(jié)點(diǎn)上運(yùn)行時(shí),HDFS無法將塊復(fù)制到3個(gè)數(shù)據(jù)節(jié)點(diǎn)上,所以會(huì)持續(xù)警告塊的副本不夠。 dfs.replication 3(2)HDFS屬性配置hdfs-site.xml設(shè)置本地文件
25、(2)HDFS屬性配置安全模式NameNode啟動(dòng)后會(huì)進(jìn)入一個(gè)稱為安全模式的特殊狀態(tài)。處于安全模式下的文件系統(tǒng)只可讀不可寫。NameNode從所有的DataNode上接收心跳信號(hào)和塊狀態(tài)報(bào)告。當(dāng)在進(jìn)行系統(tǒng)維護(hù)或者集群維護(hù)時(shí),不希望用戶再去操作HDFS文件系統(tǒng)中的文件,這時(shí)候需要手動(dòng)將NameNode設(shè)置成安全模式的狀態(tài)。該操作需要HDFS管理用戶來進(jìn)行實(shí)現(xiàn),即hdfs用戶。進(jìn)入安全模式的命令如下:$ hadoop dfsadmin -safemode enter$ hadoop dfsadmin -safemode get執(zhí)行結(jié)果如下:Safe mode is ON(2)HDFS屬性配置安全模
26、式NameNode啟動(dòng)后會(huì)進(jìn)入一(2)HDFS屬性配置文件安全下面簡單介紹Hadoop是采用哪種機(jī)制來確保NameNode的安全的。第一種是備份NameNode上持久化存儲(chǔ)的元數(shù)據(jù)文件,然后將其轉(zhuǎn)儲(chǔ)到其他文件系統(tǒng)中,這種轉(zhuǎn)儲(chǔ)是同步的、原子的操作。第二種是系統(tǒng)中同步運(yùn)行一個(gè)Secondary NameNode(二級(jí)NameNode)。(2)HDFS屬性配置文件安全下面簡單介紹Hadoop是采用(2)HDFS屬性配置可靠性管理為了保證HDFS文件系統(tǒng)的可靠性,可以采取以下策略: 冗余副本策略。第一種是通過Web界面,進(jìn)入到HDFS配置中修改Block replication的參數(shù)值。如圖3-8所示
27、。圖3-8 修改Block replication的參數(shù)值(2)HDFS屬性配置可靠性管理為了保證HDFS文件系統(tǒng)的可(2)HDFS屬性配置可靠性管理第二種方式是在Shell命令行模式下,修改hdfs-site.xml配置文件,將dfs.replication的值設(shè)置為5,然后重啟NameNode和DataNode進(jìn)程。# vi /etc/hadoop/-3796/0/hdfs-site.xml dfs.replication 5(2)HDFS屬性配置可靠性管理第二種方式是在Shell命令(2)HDFS屬性配置可靠性管理 回收站策略。設(shè)置HDFS文件系統(tǒng)回收站中的文件徹底刪除的時(shí)間間隔為7天。
28、進(jìn)入到HDFS配置中修改erval的值為10,080(分鐘)。如圖3-9所示。注意:當(dāng)該值為0時(shí),表示禁用回收站的功能。圖3-9 修改erval的值(2)HDFS屬性配置可靠性管理 回收站策略。圖3-9 修(2)HDFS屬性配置可靠性管理 快照管理策略為HDFS文件系統(tǒng)中/1daoyun目錄創(chuàng)建快照,首先需要設(shè)置該目錄可進(jìn)行快照功能,然后再進(jìn)行創(chuàng)建快照。rootmaster # hadoop fs -ls /1daoyunFound 5 items-rw-r-r- 3 root hdfs 46 2017-06-22 07:15 /1daoyun/bigdata.txt首先允許/1daoyun目
29、錄以及子目錄可創(chuàng)建快照。rootmaster # hadoop dfsadmin -allowSnapshot /1daoyunDEPRECATED: Use of this script to execute hdfs command is deprecated.Instead use the hdfs command for it.Allowing snaphot on /1daoyun succeeded(2)HDFS屬性配置可靠性管理 快照管理策略創(chuàng)建快照。rootmaster # hadoop fs -createSnapshot /1daoyun s0Created snapsho
30、t /1daoyun/.snapshot/s0創(chuàng)建完成后,創(chuàng)建一個(gè)恢復(fù)文件夾,使用cp命令可以恢復(fù)快照,如下:rootmaster # hadoop fs -ls /1daoyun/.snapshotFound 1 itemsdrwxrwxrwx - root hdfs 0 2017-06-22 07:17 /1daoyun/.snapshot/s0rootmaster # hadoop fs -mkdir /1daoyun/recoverrootmaster # hadoop fs -cp /1daoyun/.snapshot/s0/bigdata.txt /1daoyun/recoverr
31、ootmaster # hadoop fs -ls /1daoyun/recoverFound 1 items-rw-r-r- root hdfs 46 2017-06-22 07:22 /1daoyun/recover/bigdata.txt創(chuàng)建快照。(3)Shell上傳采集數(shù)據(jù)至HDFS利用命令行上傳采集的數(shù)據(jù)到/user/PC/dict_in目錄。$ hadoop fs put /data/Webmagic/* /user/PC/dict_in(4)配置案例開發(fā)環(huán)境運(yùn)行這個(gè)案例前,需要對(duì)大數(shù)據(jù)開發(fā)環(huán)境進(jìn)行配置,首先,需要在用于開發(fā)的PC機(jī)上安裝Hadoop 2.7.0,為了方便,解壓ha
32、doop-2.7.0.zip資源包。另外還需要將hadoop-2.7.0/bin目錄下的hadoop.dll文件拷貝到系統(tǒng)路徑C:WindowsSystem32下。(3)Shell上傳采集數(shù)據(jù)至HDFS利用命令行上傳采集的數(shù)替換拷貝完成后,將Hadoop安裝目錄添加到系統(tǒng)環(huán)境變量中,首先在用戶變量中添加HADOOP_HOME變量,如圖3-10所示。圖3-10 編輯HADOOP_HOME變量替換拷貝完成后,將Hadoop安裝目錄添加到系統(tǒng)環(huán)境變量中,隨后在系統(tǒng)變量的Path中添加Hadoop的bin目錄路徑,如圖3-11所示。圖3-11 編輯Path變量隨后在系統(tǒng)變量的Path中添加Hadoop
33、的bin目錄路徑添加完成后,需要配置Eclipse,將Eclipse的Hadoop插件hadoop-eclipse-kepler-plugin-2.2.0.jar文件拷貝到Eclipse的Plugin目錄下,如圖3-12所示。圖3-12 Eclipse的Plugin目錄添加完成后,需要配置Eclipse,將Eclipse的Ha 插件拷貝完成后,啟動(dòng)Eclipse,配置Hadoop插件。在主菜單欄中選擇“WindowPreferencesHadoop Map/Reduce”命令,在“Hadoop installation diretory”的文本框中輸入hadoop-2.7.0的目錄路徑,最后單
34、擊“OK”按鈕。如圖3-13所示。圖3-13 配置Hadoop安裝路徑 插件拷貝完成后,啟動(dòng)Eclipse,配置Hadoop插件 在Eclipse中能看到DFS Locations,如圖3-14所示。圖3-14 DFS Locations目錄 在Eclipse中能看到DFS Locations,如圖編輯HDFS的訪問地址以及端口,如圖3-15所示,編輯DFS Master下對(duì)應(yīng)的Host以及Port文本框,這樣Eclipse就能看到HDFS所對(duì)應(yīng)的文件。如圖3-15所示。圖3-15 編輯HDFS的訪問地址與端口編輯HDFS的訪問地址以及端口,如圖3-15所示,編輯DFS編寫程序上傳數(shù)據(jù)。導(dǎo)入項(xiàng)
35、目工程bigdatademo-hdfs,在HdfsClient類 中定義fs.defaultFS。定義HDFS的配置信息:conf = new Configuration();onf = new Confconf.set(fs.defaultFS, hdfs:/0:8020);實(shí)現(xiàn)上傳文件upload的方法:/* 上傳文件* param localfile:本地的文件路徑* param remotefile:上傳到hdfs上的文件路徑* throws Exception*/編寫程序上傳數(shù)據(jù)。public void upload(String localfile, String remotefi
36、le) throwsException InputStream in = new BufferedInputStream(newFileInputStream(localfile);OutputStream out = fs.create(new Path(remotefile), newProgressable() Overridepublic void progress() );IOUtils.copyBytes(in, out, 4096, true);public void upload(String loca啟動(dòng)主函數(shù),遍歷/data/Webmagic目錄下的文件,把文件上傳到HDF
37、S的/user/PC/dict_in目錄。public static void main(String args) throws Exception HdfsClient hdfsDB = new HdfsClient();File file = new File(/data/Webmagic);if (file.exists() File files = file.listFiles();for (File file2 : files) if (!file2.isDirectory() hdfsDB.upload(file2.getAbsolutePath(), /user/PC/dict_
38、in/+file2.getName();啟動(dòng)主函數(shù),遍歷/data/Webmagic目錄下的文件,把啟動(dòng)主函數(shù),遍歷/data/Webmagic目錄下的文件,把文件上傳到HDFS的/user/PC/dict_in目錄。public static void main(String args) throws Exception HdfsClient hdfsDB = new HdfsClient();File file = new File(/data/Webmagic);if (file.exists() File files = file.listFiles();for (File file2
39、 : files) if (!file2.isDirectory() hdfsDB.upload(file2.getAbsolutePath(), /user/PC/dict_in/+file2.getName();啟動(dòng)主函數(shù),遍歷/data/Webmagic目錄下的文件,把任務(wù)3.3使用Sqoop轉(zhuǎn)換MySQL中的學(xué)生成績數(shù)據(jù)到Hive中任務(wù)目標(biāo)1. 熟悉Sqoop工具的使用方法。2. 學(xué)會(huì)利用Navicat導(dǎo)入文件并創(chuàng)建表格的方法。3. 學(xué)會(huì)利用Sqoop工具將MySQL表格導(dǎo)入Hive中的方法。任務(wù)3.3使用Sqoop轉(zhuǎn)換MySQL中的學(xué)生成績數(shù)據(jù)到Hi任務(wù)實(shí)施(1)配置MySQL數(shù)據(jù)庫在Navicat中導(dǎo)入文件并創(chuàng)建表格。打開Navicat并連接上本地?cái)?shù)據(jù)庫,如圖3-16所示。圖3-16 利用Navicat連接本地?cái)?shù)據(jù)庫任務(wù)實(shí)施(1)配置MySQL數(shù)據(jù)庫在Navicat中導(dǎo)入在數(shù)據(jù)庫recomm中導(dǎo)入文件。在連接列表中選擇recomm數(shù)據(jù)庫,在快捷工具欄下,單擊“導(dǎo)入導(dǎo)出”按鈕,如圖3-17所示。圖3-17 在數(shù)據(jù)庫recomm中導(dǎo)入文件在數(shù)據(jù)庫recomm中導(dǎo)入文件。在連接列表中選擇recomm在彈出的窗口中選擇文件格式,這里為txt文件。在導(dǎo)入類型中選中“文字
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 育種基地融資方案
- 杭州橡膠塑膠跑道施工方案
- 2025版酒店水電維修合同范本(1000字)6篇
- 砂礫石施工方案
- 銅梁木紋地板施工方案
- 二零二五版?zhèn)€人房產(chǎn)抵押擔(dān)保合同示范文本
- 2025版環(huán)保設(shè)施驗(yàn)收委托第三方服務(wù)合同2篇
- 二零二五年度個(gè)人股權(quán)變更及收益分配協(xié)議3篇
- 二零二五年度家具清潔與保養(yǎng)委托服務(wù)協(xié)議3篇
- 青海噴泉工程施工方案
- 事業(yè)單位公開招聘工作人員考試題(公共基礎(chǔ)知識(shí)試題和答案)
- 2024年智能科技項(xiàng)目開發(fā)戰(zhàn)略合作框架協(xié)議
- 精神科健康宣教手冊(cè)-各種精神疾病宣教
- 甲狀腺的科普宣教
- 2024版新能源汽車充電樁建設(shè)與運(yùn)營合作框架協(xié)議3篇
- 掛靠免責(zé)協(xié)議書范本
- 四年級(jí)全一冊(cè)《勞動(dòng)與技術(shù)》第四單元 活動(dòng)4《飼養(yǎng)動(dòng)物的學(xué)問》課件
- 2024年考研英語(一)真題及參考答案
- 定制柜子保修合同協(xié)議書
- 2023年全國自學(xué)考試00054管理學(xué)原理試題答案
- GB/T 712-2011船舶及海洋工程用結(jié)構(gòu)鋼
評(píng)論
0/150
提交評(píng)論