Hadoop大数据平台构建与应用课件项目3就业岗位数据采集和存储.pptx

上传人(卖家):晟晟文业 文档编号:4104894 上传时间:2022-11-11 格式:PPTX 页数:58 大小:2.80MB
下载 相关 举报
Hadoop大数据平台构建与应用课件项目3就业岗位数据采集和存储.pptx_第1页
第1页 / 共58页
Hadoop大数据平台构建与应用课件项目3就业岗位数据采集和存储.pptx_第2页
第2页 / 共58页
Hadoop大数据平台构建与应用课件项目3就业岗位数据采集和存储.pptx_第3页
第3页 / 共58页
Hadoop大数据平台构建与应用课件项目3就业岗位数据采集和存储.pptx_第4页
第4页 / 共58页
Hadoop大数据平台构建与应用课件项目3就业岗位数据采集和存储.pptx_第5页
第5页 / 共58页
点击查看更多>>
资源描述

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

18、DFS的NameNode的格式化信息存储路径。hadoop.tmp.dir file:/home/hadoop/tmp Abase for other temporary directories.(2)HDFS属性配置hdfs-site.xml设置本地文件系统DFS NameNode存放Name Ttable的路径。dfs.namenode.name.dir file:/usr/hadoop/dfs/name设置本地文件系统DFS DataNode存放数据Block的目录。dfs.datanode.data.dir file:/usr/hadoop/dfs/data设置HDFS文件系统Bloc

19、k的复制份数。设置为的3时,HDFS就会按照设置将文件系统块复制为3份。如果采用的是伪分布配置,这里参数应设置为1,否则在单独一个数据节点上运行时,HDFS无法将块复制到3个数据节点上,所以会持续警告块的副本不够。dfs.replication 3(2)HDFS属性配置安全模式NameNode启动后会进入一个称为安全模式的特殊状态。处于安全模式下的文件系统只可读不可写。NameNode从所有的DataNode上接收心跳信号和块状态报告。当在进行系统维护或者集群维护时,不希望用户再去操作HDFS文件系统中的文件,这时候需要手动将NameNode设置成安全模式的状态。该操作需要HDFS管理用户来进

20、行实现,即hdfs用户。进入安全模式的命令如下:$hadoop dfsadmin-safemode enter$hadoop dfsadmin-safemode get执行结果如下:Safe mode is ON(2)HDFS属性配置文件安全下面简单介绍Hadoop是采用哪种机制来确保NameNode的安全的。第一种是备份NameNode上持久化存储的元数据文件,然后将其转储到其他文件系统中,这种转储是同步的、原子的操作。第二种是系统中同步运行一个Secondary NameNode(二级NameNode)。(2)HDFS属性配置可靠性管理为了保证HDFS文件系统的可靠性,可以采取以下策略:冗

21、余副本策略。第一种是通过Web界面,进入到HDFS配置中修改Block replication的参数值。如图3-8所示。图3-8 修改Block replication的参数值(2)HDFS属性配置可靠性管理第二种方式是在Shell命令行模式下,修改hdfs-site.xml配置文件,将dfs.replication的值设置为5,然后重启NameNode和DataNode进程。#vi/etc/hadoop/2.3.6.0-3796/0/hdfs-site.xml dfs.replication 5(2)HDFS属性配置可靠性管理 回收站策略。设置HDFS文件系统回收站中的文件彻底删除的时间间隔

22、为7天。进入到HDFS配置中修改fs.trash.interval的值为10,080(分钟)。如图3-9所示。注意:当该值为0时,表示禁用回收站的功能。图3-9 修改fs.trash.interval的值(2)HDFS属性配置可靠性管理 快照管理策略为HDFS文件系统中/1daoyun目录创建快照,首先需要设置该目录可进行快照功能,然后再进行创建快照。rootmaster#hadoop fs-ls/1daoyunFound 5 items-rw-r-r-3 root hdfs 46 2017-06-22 07:15/1daoyun/bigdata.txt首先允许/1daoyun目录以及子目录可

23、创建快照。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创建快照。rootmaster#hadoop fs-createSnapshot/1daoyun s0Created snapshot/1daoyun/.snapshot/s0创建完成后,创建一个恢复文件夹,使用

24、cp命令可以恢复快照,如下: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/recoverrootmaster#hadoop fs-ls/1daoyun/recoverFound 1 items-rw-r

25、-r-root hdfs 46 2017-06-22 07:22/1daoyun/recover/bigdata.txt(3)Shell上传采集数据至HDFS利用命令行上传采集的数据到/user/PC/dict_in目录。$hadoop fs put/data/Webmagic/*/user/PC/dict_in(4)配置案例开发环境运行这个案例前,需要对大数据开发环境进行配置,首先,需要在用于开发的PC机上安装Hadoop 2.7.0,为了方便,解压hadoop-2.7.0.zip资源包。另外还需要将hadoop-2.7.0/bin目录下的hadoop.dll文件拷贝到系统路径C:Windo

26、wsSystem32下。替换拷贝完成后,将Hadoop安装目录添加到系统环境变量中,首先在用户变量中添加HADOOP_HOME变量,如图3-10所示。图3-10 编辑HADOOP_HOME变量随后在系统变量的Path中添加Hadoop的bin目录路径,如图3-11所示。图3-11 编辑Path变量添加完成后,需要配置Eclipse,将Eclipse的Hadoop插件hadoop-eclipse-kepler-plugin-2.2.0.jar文件拷贝到Eclipse的Plugin目录下,如图3-12所示。图3-12 Eclipse的Plugin目录 插件拷贝完成后,启动Eclipse,配置Had

27、oop插件。在主菜单栏中选择“WindowPreferencesHadoop Map/Reduce”命令,在“Hadoop installation diretory”的文本框中输入hadoop-2.7.0的目录路径,最后单击“OK”按钮。如图3-13所示。图3-13 配置Hadoop安装路径 在Eclipse中能看到DFS Locations,如图3-14所示。图3-14 DFS Locations目录编辑HDFS的访问地址以及端口,如图3-15所示,编辑DFS Master下对应的Host以及Port文本框,这样Eclipse就能看到HDFS所对应的文件。如图3-15所示。图3-15 编辑

28、HDFS的访问地址与端口编写程序上传数据。导入项目工程bigdatademo-hdfs,在HdfsClient类 中定义fs.defaultFS。定义HDFS的配置信息:conf=new Configuration();onf=new Confconf.set(fs.defaultFS,hdfs:/10.0.3.70:8020);实现上传文件upload的方法:/*上传文件*param localfile:本地的文件路径*param remotefile:上传到hdfs上的文件路径*throws Exception*/public void upload(String localfile,St

29、ring remotefile)throwsException InputStream in=new BufferedInputStream(newFileInputStream(localfile);OutputStream out=fs.create(new Path(remotefile),newProgressable()Overridepublic void progress();IOUtils.copyBytes(in,out,4096,true);启动主函数,遍历/data/Webmagic目录下的文件,把文件上传到HDFS的/user/PC/dict_in目录。public s

30、tatic 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_in/+file2.getName();启动主函数,遍历/data/Webmagic目录下

31、的文件,把文件上传到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:files)if(!file2.isDirectory()hdfsDB.upload(file2.getAbsolutePath(),/user/PC/dict_in/

32、+file2.getName();任务3.3使用Sqoop转换MySQL中的学生成绩数据到Hive中任务目标1.熟悉Sqoop工具的使用方法。2.学会利用Navicat导入文件并创建表格的方法。3.学会利用Sqoop工具将MySQL表格导入Hive中的方法。任务实施(1)配置MySQL数据库在Navicat中导入文件并创建表格。打开Navicat并连接上本地数据库,如图3-16所示。图3-16 利用Navicat连接本地数据库在数据库recomm中导入文件。在连接列表中选择recomm数据库,在快捷工具栏下,单击“导入导出”按钮,如图3-17所示。图3-17 在数据库recomm中导入文件在弹

33、出的窗口中选择文件格式,这里为txt文件。在导入类型中选中“文字文件(*.txt)”单选按钮,最后单击“下一步”按钮,如图3-18所示。图3-18 选择文件格式 单击“导入从:”文本框旁“”按钮,选择文件保存的路径。单击“”按钮,在“编码”下拉菜单中选择“65001(UTF-8)”菜单命令,单击“下一步”按钮。如图3-19所示。图3-19 设置编码格式根据文件保存形式选择分隔符。选中“栏位定界符”下“逗号(,)”单选按钮,然后单击“下一步”按钮,如图3-20 所示。图3-20 配置分隔符默认情况下会将导入文本文档的第一行作为字段名称,这里设置从文本文档的第二行开始导入,导入到数据数据库第一栏中

34、。单击“下一步”按钮,如图3-21所示。图3-21 导入数据配置最后多次单击“下一步”按钮,使用默认配置,直到最后单击“开始”按钮,完成导入配置,如图3-22所示。图3-22 完成导入操作可以看到,该数据库下生成了名为gradstu的表格,打开后如图3-23所示。图3-22 完成导入操作(2)利用Sqoop将MySQL导入Hive中在Linux虚拟机上进入Hive,查看现有哪些表格。如图3-24所示。图3-24 查看Hive中的表图3-25 查看导入结果退出Hive,并使用sqoop命令行代码进行数据库导入,代码如下:sqoop import-connect jdbc:mysql:/192.1

35、68.0.134:3306/recomm-username root-P table gradstu-hive-import-m 1上图中的192.168.0.134即为数据库的IP地址,3306为端口,用户名为root,-P为手动输入密码。注意:如果数据库安装在了本地注意:如果数据库安装在了本地WindowsWindows系统中,需要关闭防火墙,才能系统中,需要关闭防火墙,才能使远程使远程LinuxLinux虚拟机与本地虚拟机与本地WindowsWindows系统相互系统相互pingping通通 。运行成功后再进入Hive,查看所有表格。图3-26 查询表中数据可以看到,已经有了gradstu这个表格,现在查看这个表格内容,运行如下代码:hive select*from gradstu;发现表格已经导入,至此功能完成!如图3-26所示。通过本项目,主要学习了数据采集的功能,其中分为网络爬虫与数据传输两部分。网络爬虫选用了WebMagic爬虫框架,其基于Java开发的特点与学情分析系统开发环境(Java EE)相吻合,同时通过网络爬虫的开发,帮助使用者熟悉HTML的基本结构以及解析网页内容的方法。在数据传输部分,主要实现了本地文件系统与HDFS文件系统的连接,以及MySQL数据库与Hive数据仓库的数据传输。项目小结

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(Hadoop大数据平台构建与应用课件项目3就业岗位数据采集和存储.pptx)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|