欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

大数据实训项目

发布时间:2023/12/20 69 豆豆
生活随笔 收集整理的这篇文章主要介绍了 大数据实训项目 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

  • 一、项目概况
    • 1、项目介绍
    • 2、项目要求
    • 3、爬取字段
    • 4、数据存储
    • 5、数据分析、转化、演示
  • 二、环境配置
    • 1、JDK
    • 2、Hadoop集群
    • 3、zookeeper
    • 4、hive
    • 5、sqoop
    • 6、flume
  • 三、爬取数据
    • 1、创建项目
    • 2、编写主程序进行数据爬取
    • 3、编写pipelines,进行数据保存
    • 4、编写settings,进行相关配置
    • 5、编写items,进行字典定义
    • 6、爬取数据
  • 四、数据分析
    • 1、Flume收集日志
    • 2、数据存储到hdfs
    • 3、数据分析
    • 4、sqoop数据转存
    • 项目源码:

一、项目概况

1、项目介绍

利用python编写爬虫程序,从招聘网站上爬取数据,将数据存入到MongoDB数据库中,将存入的数据作一定的数据清洗后做数据分析,最后将分析的结果做数据可视化。

2、项目要求

1、具体要求:招聘网站上的数据,选择两个招聘网站。招聘网站包括:智联招聘、前程无忧、应届生求职、拉勾、中华英才网。
2、评分标准:选取网站总分5分,若只选取一个网站爬取数据得3分。

3、爬取字段

1)、具体要求:职位名称、薪资水平、招聘单位、工作地点、工作经验、学历要求、工作内容(岗位职责)、任职要求(技能要求)。
2)、评分标准:
(1)搭建爬虫框架并运行:5分;
(2)选择合适格式保存数据:5分;
(3)爬取部分字段:5分;
(4)爬取全部字段:10分。

4、数据存储

1)、具体要求:将爬取的数据存储到hdfs上。利用flume收集日志。若整个过程利用mangdb转hdfs则为15分。
2)、评分标准:
(1)正确搭建hadoop平台:10分;
(2)正确选择flume协议传输形式:10分,若部分正确则5分;
(3)能将数据存储到hdfs:10分。

5、数据分析、转化、演示

具体要求(要求:1、利用hive进行分析,2、将hive分析结果利用sqoop技术存储到mysql数据库中,并最后显示分析结果。):
(1)分析“数据分析”、“大数据开发工程师”、“数据采集”等岗位的平均工资、最高工资、最低工资,并作条形图将结果展示出来;
(2)分析“数据分析”、“大数据开发工程师”、“数据采集”等大数据相关岗位在成都、北京、上海、广州、深圳的岗位数,并做饼图将结果展示出来。
(3)分析大数据相关岗位1-3年工作经验的薪资水平(平均工资、最高工资、最低工资),并做出条形图展示出来;
(4)分析大数据相关岗位几年需求的走向趋势,并做出折线图展示出来。

二、环境配置

1、JDK

https://blog.csdn.net/lnxcw/article/details/106336186

2、Hadoop集群

https://blog.csdn.net/lnxcw/article/details/106337928

3、zookeeper

https://blog.csdn.net/lnxcw/article/details/106801692

4、hive

https://blog.csdn.net/lnxcw/article/details/106445419

5、sqoop

https://blog.csdn.net/lnxcw/article/details/106537791

6、flume

https://blog.csdn.net/lnxcw/article/details/106540916

三、爬取数据

1、创建项目

scrapy startproject job02 cd job02 scrapy genspider chinahr chinahr.com

2、编写主程序进行数据爬取

3、编写pipelines,进行数据保存

4、编写settings,进行相关配置

5、编写items,进行字典定义

6、爬取数据

数据量:389000

四、数据分析

1、Flume收集日志

编写conf文件,监听文件目录,并将监听数据存储到hdfs
我这里监听的目录是/opt/data
在目录有文件时,flume将监听到的数据上传到/Hadoop/flume里面,并自动创建了一个日期和时间的目录存放日志

2、数据存储到hdfs


3、数据分析

(1)、hive表创建

create table job_post(position varchar(100),salary varchar(100),company varchar(100),site varchar(100),experience varchar(100),education varchar(100),jobInfo varchar(1000) )row format delimited fields terminated by ','tblproperties("skip.header.line.count"="1"); create table table1(position varchar(100),max_list varchar(100),avg_list varchar(100),min_list varchar(100))row format delimited fields terminated by ','; create table table2(site varchar(100),number varchar(100))row format delimited fields terminated by ','; create table table3(experience varchar(100),max_list varchar(100),avg_list varchar(100),min_list varchar(100))row format delimited fields terminated by ','; create table table4(data varchar(100),number varchar(100))row format delimited fields terminated by ',' ; create table ex(position string,day string)row format delimited fields terminated by ',';

数据导入:

load data local inpath "/opt/data/data.csv" overwrite into table job_post; load data local inpath "/opt/data/数据岗位薪资水平.txt" overwrite into table table1; load data local inpath "/opt/data/数据分析岗位分布.txt" overwrite into table table2; load data local inpath "/opt/data/大数据经验薪资水平.txt" overwrite into table table3; load data local inpath "/opt/data/大数据相关岗位需求.txt" overwrite into table table4; load data local inpath "/opt/data/data1.csv" overwrite into table ex;

(2)、mysql表创建

# -*- coding: utf-8 -*- # mysql创建表import pymysqldef Create_table_mysql(self):print("连接MySQL数据库创建hive对应表")# 连接数据库conn = pymysql.connect(host='192.168.1.101', # 主机名port=3306, # 端口号(默认的)user='root', # 用户名passwd='1', # 密码db='job_post', # 数据库名charset='utf8', # 这里设置编码是为了输出中文)cursor = conn.cursor()def table1():sql1 = '''create table table1(position varchar(100),max_list varchar(100),avg_list varchar(100),min_list varchar(100))'''cursor.execute(sql1)print("表1创建成功!")def table2():sql2 = '''create table table2(site varchar(100),number varchar(100))'''cursor.execute(sql2)print("表2创建成功!")def table3():sql3 = '''create table table3(experience varchar(100),max_pay_level varchar(100),average_pay_level varchar(100),min_pay_level varchar(100))'''cursor.execute(sql3)print("表3创建成功!")def table4():sql4 = '''create table table4(data varchar(100),number varchar(100))'''cursor.execute(sql4)print("表4创建成功!")# commit 修改table1()table2()table3()table4()conn.commit()# 关闭游标cursor.close()print("创建成功!")

(3)、数据行业薪资
连接数据库,将所需数据查询出来存放到列表,并对数据进行清洗后进行数据分析,将分析结果绘制图表。

# -*- coding: utf-8 -*- # 数据行业薪资 import re from impala.dbapi import connect from numpy import * from pyecharts.charts import Bar from pyecharts import options as optsdef shuju():conn = connect(host='192.168.1.101',port=10000,auth_mechanism='LDAP',user='root',password='1',database='mongodb')cursor = conn.cursor()# 最低工资all_min_salary_list = []# 最高工资all_max_salary_list = []# 平均工资all_average_salary_list = []# 岗位all_addr_list = []# 求出数据分析相关岗位的最值def shujufenxi():# 最低工资min_salary_list = []# 最高工资max_salary_list = []# 平均工资average_salary_list = []sql01 = "select salary from job_post where position like '%数据分析%' and salary like '%/%'" cursor.execute(sql01)results = cursor.fetchall()# 数据清洗for i in results:if "万/月" in i[0]:wan_yue = re.findall(r"(.*)万/月", i[0])[0]num_list = wan_yue.split("-")num_1 = eval(num_list[0]) * 10num_2 = eval(num_list[1]) * 10i = str(num_1) + "-" + str(num_2) + "千/月"elif "万/年" in i[0]:wan_yue = re.findall(r"(.*)万/年", i[0])[0]num_list = wan_yue.split("-")num_1 = eval(num_list[0]) * 10 / 12num_2 = eval(num_list[1]) * 10 / 12i = str(int(num_1)) + "-" + str(int(num_2)) + "千/月"elif "千/月" in i[0]:wan_yue = re.findall(r"(.*)千/月", i[0])[0]num_list = wan_yue.split("-")num_1 = eval(num_list[0])num_2 = eval(num_list[1])i = str(num_1) + "-" + str(num_2) + "千/月"else:continuemin_salary = i.split("-")[0]max_salary = re.findall(r'([\d+\.]+)', (i.split("-")[1]))[0]average_salary = "{:.1f}".format((float(min_salary) + float(max_salary)) / 2)# 将获取的数据分别写入min_salary_list.append(eval(min_salary))max_salary_list.append(eval(max_salary))average_salary_list.append(eval(average_salary))listjob = '数据分析'listmin = min(min_salary_list)listmax = max(max_salary_list)listaverage = int(mean(average_salary_list))all_min_salary_list.append(listmin)all_max_salary_list.append(listmax)all_average_salary_list.append(listaverage)all_addr_list.append(listjob)print(listjob, listmin, listaverage, listmax)file = open('数据岗位薪资水平.txt', 'w', encoding='utf-8')file.write('{},{},{},{}'.format(listjob, listmax, listaverage, listmin))file.write('\n')file.close()# 关闭游标conn.commit()# 求出大数据开发工程师相关岗位的最值def bigdata():# 最低工资min_salary_list = []# 最高工资max_salary_list = []# 平均工资average_salary_list = []sql = "select salary from job_post where position like '%大数据开发工程师%' and salary like '%/%'"cursor.execute(sql)results = cursor.fetchall()for i in results:if "万/月" in i[0]:wan_yue = re.findall(r"(.*)万/月", i[0])[0]num_list = wan_yue.split("-")num_1 = eval(num_list[0]) * 10num_2 = eval(num_list[1]) * 10i = str(num_1) + "-" + str(num_2) + "千/月"elif "万/年" in i[0]:wan_yue = re.findall(r"(.*)万/年", i[0])[0]num_list = wan_yue.split("-")num_1 = eval(num_list[0]) * 10 / 12num_2 = eval(num_list[1]) * 10 / 12i = str(int(num_1)) + "-" + str(int(num_2)) + "千/月"elif "千/月" in i[0]:wan_yue = re.findall(r"(.*)千/月", i[0])[0]num_list = wan_yue.split("-")num_1 = eval(num_list[0])num_2 = eval(num_list[1])i = str(num_1) + "-" + str(num_2) + "千/月"else:continuemin_salary = i.split("-")[0]max_salary = re.findall(r'([\d+\.]+)', (i.split("-")[1]))[0]average_salary = "{:.1f}".format((float(min_salary) + float(max_salary)) / 2)# 将获取的数据分别写入min_salary_list.append(eval(min_salary))max_salary_list.append(eval(max_salary))average_salary_list.append(eval(average_salary))listjob = '大数据开发工程师'listmin = min(min_salary_list)listmax = max(max_salary_list)listaverage = int(mean(average_salary_list))all_min_salary_list.append(listmin)all_max_salary_list.append(listmax)all_average_salary_list.append(listaverage)all_addr_list.append(listjob)print(listjob, listmin, listaverage, listmax)file = open('数据岗位薪资水平.txt', 'a+', encoding='utf-8')file.write('{},{},{},{}'.format(listjob, listmax, listaverage, listmin))file.write('\n')file.close()conn.commit()# 求出数据采集相关岗位最值def shujucaiji():# 最低工资min_salary_list = []# 最高工资max_salary_list = []# 平均工资average_salary_list = []sql = "select salary from job_post where position like '%数据采集%' and salary like '%/%'" # .format(Job)cursor.execute(sql)results = cursor.fetchall()for i in results:if "万/月" in i[0]:wan_yue = re.findall(r"(.*)万/月", i[0])[0]num_list = wan_yue.split("-")num_1 = eval(num_list[0]) * 10num_2 = eval(num_list[1]) * 10i = str(num_1) + "-" + str(num_2) + "千/月"elif "万/年" in i[0]:wan_yue = re.findall(r"(.*)万/年", i[0])[0]num_list = wan_yue.split("-")num_1 = eval(num_list[0]) * 10 / 12num_2 = eval(num_list[1]) * 10 / 12i = str(int(num_1)) + "-" + str(int(num_2)) + "千/月"elif "千/月" in i[0]:wan_yue = re.findall(r"(.*)千/月", i[0])[0]num_list = wan_yue.split("-")num_1 = eval(num_list[0])num_2 = eval(num_list[1])i = str(num_1) + "-" + str(num_2) + "千/月"else:continuemin_salary = i.split("-")[0]max_salary = re.findall(r'([\d+\.]+)', (i.split("-")[1]))[0]average_salary = "{:.1f}".format((float(min_salary) + float(max_salary)) / 2)# 将获取的数据分别写入min_salary_list.append(eval(min_salary))max_salary_list.append(eval(max_salary))average_salary_list.append(eval(average_salary))listjob = '数据采集'listmin = min(min_salary_list)listmax = max(max_salary_list)listaverage = int(mean(average_salary_list))all_min_salary_list.append(listmin)all_max_salary_list.append(listmax)all_average_salary_list.append(listaverage)all_addr_list.append(listjob)print(listjob, listmin, listaverage, listmax)file = open('数据岗位薪资水平.txt', 'a+', encoding='utf-8')file.write('{},{},{},{}'.format(listjob, listmax, listaverage, listmin))file.write('\n')file.close()conn.commit()shujufenxi()bigdata()shujucaiji()# 关闭游标cursor.close()conn.commit()print(all_addr_list)print(all_min_salary_list)print(all_average_salary_list)print(all_max_salary_list)bar = Bar(init_opts=opts.InitOpts(width="1000px", height="800px"),)bar.set_global_opts(title_opts=opts.TitleOpts(title="数据行业薪资水平", subtitle="单位 千/月"),xaxis_opts=opts.AxisOpts(axislabel_opts={"rotate": 45}),)bar.add_xaxis(all_addr_list)bar.add_yaxis("最高薪资", all_max_salary_list)bar.add_yaxis("最低薪资", all_min_salary_list)bar.add_yaxis("平均薪资", all_average_salary_list)bar.render("数据行业薪资水平.html")print("数据行业薪资水平.html文件")if __name__ == "__main__":shuju()

(4)大数据行业占地区比重
连接数据库,将所需数据查询出来存放到列表,并对数据进行清洗后进行数据分析,将分析结果绘制图表。


(5)大数据经验薪资图
连接数据库,将所需数据查询出来存放到列表,并对数据进行清洗后进行数据分析,将分析结果绘制图表。


(6)大数据近日需求
连接数据库,将所需数据查询出来存放到列表,并对数据进行清洗后进行数据分析,将分析结果绘制图表。

4、sqoop数据转存

将hive数据库里面的内容导出到mysql

sh sqoop export --connect jdbc:mysql://192.168.1.101:3306/job_post?characterEncoding=UTF-8 --username root --password 1 --table table2 --export-dir /home/apache-hive-2.3.6-bin/warehouse/mongodb.db/table2 --input-fields-terminated-by ','

项目源码:

链接:https://pan.baidu.com/s/1R-Nwf4QoC5KcFUokF_4pFw
提取码:36i6

总结

以上是生活随笔为你收集整理的大数据实训项目的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。