Hadoop大数据平台构建与应用课件项目3就业岗位数据采集和存储.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Hadoop大数据平台构建与应用课件项目3就业岗位数据采集和存储.pptx》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hadoop 数据 平台 构建 应用 课件 项目 就业 岗位 采集 存储
- 资源描述:
-
1、Hadoop大数据平台构建与应用课件项目3就业岗位数据采集和存储项目3 就业岗位数据采集和存储ABC项目描述任务3.1【知识目标】识记WebMagic的流程架构和HDFS的基础架构以及Hive的基本概念和特点。领会网络爬虫的编程实现的步骤和方法。【技能目标】学会使用WebMagic开发网络爬虫的步骤和方法 学会HDFS服务进程管理。学会HDFS属性配置管理。学会HDFS上传文件的方法。学会Sqoop上传文件至Hive中的方法。知识准备webmagic-scriptswebmagic-seleniumwebmagic-saxonwebmagic-samplesWebMagic项目里还有几个包,这
2、些项目里还有几个包,这些都是一些实验性的功能,目的只是都是一些实验性的功能,目的只是提供一些与外围工具整合的样例。提供一些与外围工具整合的样例。webmagic-avalon13524WebMagic的是一个无须配置、便于二次开发的爬虫框架,它提供简单灵活的API,只需少量代码即可实现一个爬虫。其架构流程如图3-1所示。3-1 WebMagic架构图任务实施(1)解析岗位列表页源代码岗位信息页后续列表分页图3-2 岗位列表页结构这是在WebMagic框架中的PageProcessor组件中定制实现的,首先要做的是设置抓取的基本配置,包括编码、抓取间隔、重试次数,代码如下:private Sit
3、e site=Site.me().setRetryTimes(3).setSleepTime(10).setCharset(gbk);这里选择重试次数为3次,抓取间隔为10毫秒,编码根据为51job网页源代码可以查看得到,如下所示:【云计算招聘,求职】-前程无忧该招聘网站的编码为gbk。接下来,判断当前分析的页面是否为岗位列表页。不难发现,列表页的URL中都含有字符段,可以通过简单的if语句判断:if(page.getUrl().toString().contains()下面分析岗位信息页链接的HTML源代码,并用Xpath语法解析出,添加至抓取队列。检查某个链接源代码的方法,在岗位列表中右击
4、一项,在弹出的下拉菜单中选择“Inspect”命令,如图3-3所示。图3-3 选择Inspect命令右击并选择检查(Inspect)后,出现了该链接的HTML源码,如图3-4所示。图3-4 查看HTML源代码可以发现,所需要的URL地址是一个标签下的唯一的超链接,该标签的class名为t1。同理,这个岗位列表页下的所有岗位信息页的URL都有着相同的格式。因此可以使用Xpath全部识别,并添加至抓取队列,代码实现如下:select=page.getHtml().xpath(/pclass=t1);urls=select.links().all();page.addTargetRequests(u
5、rls);添加后续分页的链接也是如上一样的方法,在此省去分析HTML源码的截图,直接贴上代码:select=page.getHtml().xpath(/divclass=dw_page);urls=select.links().all();这里需要注意的是,要防止添加空白搜索结果页的链接,不然将会把整个51job的岗位全都抓取下来。尽管按照定制的抓取逻辑,这种意外不会出现,但还是添加了踢出队列的保护机制,代码如下:Iterator it=urls.iterator();while(it.hasNext()String x=it.next();if(x.equals(http:/ if(page
6、.getUrl().toString().startsWith(http:/ page.putField(content,page.getHtml().xpath(/divclass=bmsg job_msg inbox/html().toString();/其他可选项 page.putField(salary,page.getHtml().xpath(/divclass=cn/strong/text().toString();page.putField(location,page.getHtml().xpath(/spanclass=lname/text().toString();page.
7、putField(company,page.getHtml().xpath(/pclass=cname/a/text().toString();page.putField(experience,page.getHtml().regex(+).toString();page.putField(education,page.getHtml().regex(+).toString();page.putField(number,page.getHtml().regex(+).toString();(3)根据条件保存抓取到的信息这里根据条件筛选岗位信息,比如已经列出了一些培训机构的“公司黑名单”,保存在
8、了Dictionary类中的Blacklist静态String数组中,那么可以用简单的if语句来判断:Boolean choose=true;/判断是否为培训公司发布的“垃圾”招聘信息for(String i:Dictionary.Blacklist)if(String)resultItems.get(company).contains(i)choose=false;对于发布日期,仅需要保留当天发布的招聘信息,判断代码如下:/判断是否为当天发布的招聘信息if(!(String)resultItems.get(createtime).contains(Today_Date)choose=fals
9、e;其中Today_Date是一个静态final型字符串:public static final String Today_Date=timeTostrMD(new Date();timeToStrMD是一个自定义获取当天月份和日期并返回诸如“05-05”形式字符串的方法。代码如下:public static String timeTostrMD(Date date)String strDate=;if(date!=null)SimpleDateFormat format=new SimpleDateFormat(MM-dd);strDate=format.format(date);retur
10、n strDate;在筛选完之后,便可以将抓取内容选择性地保存至本地的某个文件中,这里定制的保存格式为一个岗位保存一行,每行中的信息用制表符t分隔,最后保存在一个以日期命名的文本文件中,代码如下:try/定义存储路径,以每天为一个文件存储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+result
11、Items.get(company)+t+resultItems.get(salary)+t+resultItems.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);(4)运行代码程序WebMagic的核心组件为PageProcess
12、or与Pipeline,通过上述步骤的讲解,读者应该可以定制这两个组件了,而调用这两个核心组件是通过Spider类,简单的代码如下:Spider.create(new CrawlJob().addUrl(URL_START).addPipeline(new PipelineJob().thread(5).run();由于要将Java程序导出为jar文件,并且需要实现无参传递(使用默认保存路径)和有参传递(使用指定保存路径)两种形式,因此使用main方法的代码如下:public static void main(String args)throws Exception String URL_ST
13、ART=http:/ CrawlJob().addUrl(URL_START).addPipeline(new PipelineJob().thread(5).run();elseSpider.create(new CrawlJob().addUrl(URL_START).addPipeline(new PipelineJob(args0).thread(5).run();任务3.2 采集的数据上传到HDFS任务描述1.借助学习论坛、网络视频等网络资源和各种图书资源,学习HDFS文件系统的使用方法。2.将利用WebMagic爬取工具爬取的招聘岗位信息上传到HDFS文件系统中。任务目标1.熟悉H
14、DFS工作原理。2.学会文件系统的属性配置方法。3.学会通过多种方式上传文件至HDFS文件系统的方法。知识准备在HDFS体系结构采用Master/Slave的主从架构,如图3-6所示,其中Master节点运行NameNode进程,Slave节点运行DataNode进程。图3-6 HDFS体系结构磁盘有一个Block Size的概念,它是磁盘读/写数据的最小单位。文件系统的块一般为几千字节(byte),磁盘块一般为512字节(byte)。HDFS也有Block的概念,但它的块是一个很大的单元,是文件存储处理的逻辑单元。默认是64 MB。像硬盘中的文件系统一样,在HDFS中的文件将会按块大小进行分
15、解,并作为独立的单元进行存储。但和硬盘中的文件系统不一样的是,存储在块中的一个比块小的文件并不会占据一个块大小的物理空间(HDFS中一个块只存储一个文件的内容)。HDFS作为一个分布式文件系统,是设计用来处理大文件的,使用抽象的块会带来很多好处。一个好处是可以存储任意大的文件,而又不会受到网络中任一单个节点磁盘大小的限制。另外一个好处是使用抽象块作为操作的单元可简化存储子系统,不仅如此,块更有利于分布式文件系统中复制容错的实现。在HDFS中为了处理节点故障,默认将文件块副本数设定为3份,分别存储在集群的不同节点上。当一个块损坏时,系统会通过NameNode获取元数据信息,在另外的机器上读取一个
16、副本并进行存储,这个过程对用户来说都是透明的。当然,这里的文件块副本冗余可以通过文件进行配置,在HDFS中,可以通过终端命令直接获得文件和块信息,比如以下命令可以列出文件系统中组成各个文件的块:hadoop fsck/-files-blocks任务实施hadoop-daemon.sh脚本是启动和停止Hadoop后台程序,-config参数指定启动程序时用到的配置文件目录。大括号中的namenode和datenode是需要启动的进程,两者择其一。命令如下:#/usr/hdp/current/hadoop-client/sbin/hadoop-daemon.sh-config/usr/hdp/cu
17、rrent/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(2)HDFS属性配置 core-site.xml设置Hadoop默认文件系统。fs.defaultFS hdfs:/master:8020设置缓存的大小,这个参数要设置为系统页面大小的倍数,以byte为单位。io.file.buffer.size 131072设置H
展开阅读全文