实训项目- 大数据
文章目录爬虫数据:拉勾和前程无忧前程无忧:拉勾:爬虫数据:拉勾和前程无忧前程无忧:爬取的数据字段有:职位名称、薪资水平、招聘单位、工作地点、工作经验、学历要求、工作内容(岗位职责)、任职要求(技能要求):**1.**编写爬虫程序,并获取相应字段的数据:**2.**在虚拟机中安装scrapy框架,并将项目传到虚拟机中:**3.**运行程序,并查看数据是否下载下来:拉勾:爬取的数据字段有:职位名称、薪
一.爬虫数据:拉勾和前程无忧
前程无忧:
爬取的数据字段有:职位名称、薪资水平、招聘单位、工作地点、工作经验、学历要求、工作内容(岗位职责)、任职要求(技能要求):
**1.**编写爬虫程序,并获取相应字段的数据:
**2.**在虚拟机中安装scrapy框架,并将项目传到虚拟机中:
**3.**运行程序,并查看数据是否下载下来:
拉勾:
爬取的数据字段有:职位名称、薪资水平、招聘单位、工作地点、工作经验、学历要求、工作内容(岗位职责)、任职要求(技能要求):
**1.**编写爬虫程序,并获取相应字段的数据,并保存在相应的文件夹下:
**2.**在虚拟机中安装scrapy框架,并将项目传到虚拟机中:
**3.**运行程序,并查看数据是否下载下来:
二.Flume收集日志到HDFS:
1.配置好hadoop平台,并启动相应HDFS节点:
2.安装好flume,并准备好爬取下来的数据:
3.在flume的conf页面中,创建配置文件:
# 配置Agent a1的组件
a1.sources=r1
a1.channels=c1
a1.sinks=s1
#配置a1的source
a1.sources.r1.type=spooldir
a1.sources.r1.spoolDir=/opt/other/qian/shuju
#a1.sources.r1.type = exec
#a1.sources.r1.command =tail -F /opt/other/qian/shuju/jobs.log
# 配置a1的sinks
a1.sinks.s1.type=HDFS
a1.sinks.s1.hdfs.path=hdfs://192.168.1.101:9000/job/%y-%m-%d/%H-%M
a1.sinks.s1.hdfs.fileType=DataStream
a1.sinks.s1.hdfs.useLocalTimeStamp=true
#a1.sinks.s1.hdfs.minBlockReplicas=1
#文件的滚动与 Event 数量无关
a1.sinks.s1.hdfs.rollCount=0
#配置不根据临时文件大小来滚动文件
a1.sinks.s1.hdfs.rollSize=1259072000
#配置采集多久在hdfs上创建一个文件
#a1.sinks.s1.hdfs.rollInterval=100
#a1.sinks.s1.hdfs.rollInterval=90
#a1.sinks.s1.hdfs.rollSize=0
#a1.sinks.s1.hdfs.hdfs.rollCount = 0
# 必要
#a1.sinks.s1.hdfs.idleTimeout=0
# 配置内存Channel
#a1.channels.c1.type=file
#a1.channels.c1.dataDirs=/data
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
# 配置channel绑定source和sink
a1.sources.r1.channels=c1
a1.sinks.s1.channel=c1
4.启动flume,可以在bin目录下,也可以conf目录下,我在conf页面:
../bin/flume-ng agent --conf -conf --conf-file shixun2.conf --name a1
5.查看HDFS页面的日志是否成功上传:
三.数据分析和可视化(hive,sqoop):
1.分析“数据分析”、“大数据开发工程师”、“数据采集”等岗位的平均工资、最高工资、最低工资,并作条形图将结果展示出来;
1.进入hive,创建相应的数据库和相应文件的表:
创建数据库:
创建表:
2.导入数据到表中:
3.分析数据,求出自己需要的最高工资,最低工资,平均工资:
创建一个表用于保存结果:
create table question1(jobname varchar(30),avg int,min int,max int);
查询语句:分别求出结果,并保存在上面的数据表中:
1. 大数据开发工程师的工资:
insert into table question1 select name,ceiling(avg(salaly)),min(salaly),max(salaly) from bidata where name like '大数据开发工程师' group by name;
2. 数据采集的工资:
insert into table question1 select name,ceiling(avg(salary)),min(salary),max(salary) from bidata where name like '数据采集' group by name;
3. 数据分析的工资:
insert into table question1 select name,ceiling(avg(salaly)),min(salaly),max(salaly) from bidata where name like '数据分析' group by name;
2.分析“数据分析”、“大数据开发工程师”、“数据采集”等大数据相关岗位在成都、北京、上海、广州、深圳的岗位数,并做饼图将结果展示出来。
1.创建保存数据的表:
create table question2(city string,number int);
2.分别求出结果,并保存在上面的数据表中:
1.成都的大数据相关的工作数量:
insert into table question2 select '成都',count(workplance) from bidata where name like '%数据%' and workplance like '%成都%';
2.北京的大数据相关的工作数量:
insert into table question2 select '北京',count(workplance) from bidata where name like '%数据%' and workplance like '%北京%';
3.上海的大数据相关的工作数量:
insert into table question2 select '上海',count(workplance) from bidata where name like '%数据%' and workplance like '%上海%';
4.广州的大数据相关的工作数量:
insert into table question2 select '广州',count(workplance) from bidata where name like '%数据%' and workplance like '%广州%';
5.深圳的大数据相关的工作数量:
insert into table question2 select '深圳',count(workplance) from bidata where name like '%数据%' and workplance like '%深圳%';
3.分析大数据相关岗位1-3年工作经验的薪资水平(平均工资、最高工资、最低工资),并做出条形图展示出来;
1.创建用来保存结果的表:
create table question3(name string,avg int,min int,max int);
2.分别求出结果,并保存在上面的数据表中:
insert into table question3 select '大数据相关',ceiling(avg(salaly)),min(salaly),max(salaly) from bidata where experience in ('1年经验','2年经验','3年经验','3-4年经验');
4.分析大数据相关岗位几年需求的走向趋势,并做出折线图展示出来;
1.创建用来保存结果的表:
create table questions4(data string,number int);
2.分别求出结果,并保存在上面的数据表中:
insert into table questions4 select data,count(name) from bidata group by data;
四.利用sqoop保存hive结果:
1. 进入mysql,创建数据库和创建对应接受数据的表:
注意:需要创建四个表用来接收hive中表对应的数据:
1.创建数据库:
create database shuju;
2.创建question1:
create table question1(name varchar(30),avg int,min int,max int);
3.创建question2:
create table question2(city varchar(30),number int);
4.创建question3:
create table question3(name varchar(30),avg int,min int,max int);
5.创建question4:
create table question4(data varchar(30),need int);
2.测试sqoop连接mysql:
注意:是在sqoop中bin目录下:
./sqoop list-databases --connect jdbc:mysql://192.168.1.101:3306/test --username root --password 123
3.sqoop将数据导入对应mysql数据库中:
1.题一:
./sqoop export --connect "jdbc:mysql://192.168.1.101:3306/shuju?useUnicode=true&characterEncoding=utf-8" --username root --password 123 --table question1 --export-dir '/shujus/question1' --fields-terminated-by '\t' -m 1
2.题二:
./sqoop export --connect "jdbc:mysql://192.168.1.101:3306/shuju?useUnicode=true&characterEncoding=utf-8" --username root --password 123 --table question2 --export-dir '/shujus/question2' --fields-terminated-by '\t' -m 1
3.题三:
./sqoop export --connect "jdbc:mysql://192.168.1.101:3306/shuju?useUnicode=true&characterEncoding=utf-8" --username root --password 123 --table question3 --export-dir '/shujus/question3' --fields-terminated-by '\t' -m 1
4.题四:
./sqoop export --connect "jdbc:mysql://192.168.1.101:3306/shuju?useUnicode=true&characterEncoding=utf-8" --username root --password 123 --table question4 --export-dir '/shujus/question4' --fields-terminated-by '\t' -m 1
五.数据可视化
1.“数据分析”、“大数据开发工程师”、“数据采集”等岗位的平均工资、最高工资、最低工资,并作条形图。
在pycharm中编写代码:
import pymysql
from pyecharts.charts import Bar
from pyecharts import options as opts
db = pymysql.connect(host="192.168.1.101",port=3306,database="shuju",user='root',password='123')
cursor = db.cursor()
sql = "select * from question1"
cursor.execute(sql)
data = cursor.fetchall()
print(data)
zhiwei = [data[0][0], data[1][0], data[2][0]]
print(zhiwei)
min_list = [data[0][2], data[1][2], data[2][2]]
max_list = [data[0][3], data[1][3], data[2][3]]
average_list = [data[0][1], data[1][1], data[2][1]]
bar = Bar()
bar.add_xaxis(xaxis_data=zhiwei)
bar.add_yaxis(series_name="最低工资", yaxis_data=min_list)
bar.add_yaxis(series_name="最高工资", yaxis_data=max_list)
bar.add_yaxis(series_name="平均工资", yaxis_data=average_list)
# 设置表的名称
bar.set_global_opts(title_opts=opts.TitleOpts(title='职位工资', subtitle='工资单位:万/月'), toolbox_opts=opts.ToolboxOpts(),
)
bar.render("工资图.html")
运行可视化图:
2.分析“数据分析”、“大数据开发工程师”、“数据采集”等大数据相关岗位在成都、北京、上海、广州、深圳的岗位数,并做饼图。
在pycharm中编写代码:
import pymysql
from pyecharts.charts import Pie
from pyecharts import options as opts
db = pymysql.connect(host="192.168.1.101",port=3306,database="shuju",user='root',password='123')
cursor = db.cursor()
sql = "select * from question2"
cursor.execute(sql)
data = cursor.fetchall()
print(data)
addr = ["成都","北京","上海","广州","深圳"]
num = [data[0][1],data[1][1],data[2][1],data[3][1],data[4][1]]
data_pair = [list(z) for z in zip(addr, num)]
data_pair.sort(key=lambda x: x[1])
# 画饼图
c = (
Pie()
.add("", [list(z) for z in zip(addr,num)])
.set_global_opts(title_opts=opts.TitleOpts(title="大数据等相关工作地区岗位数",subtitle='单位:个数'),toolbox_opts=opts.ToolboxOpts())
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
).render("大数据等相关工作地区岗位数.html")
运行可视化图:
3.分析大数据相关岗位1-3年工作经验的薪资水平(平均工资、最高工资、最低工资),并做出条形图;
在pycharm中编写代码:
import pymysql
from pyecharts.charts import Bar
from pyecharts import options as opts
db = pymysql.connect(host="192.168.1.101",port=3306,database="shuju",user='root',password='123')
cursor = db.cursor()
sql = "select * from question3"
cursor.execute(sql)
data = cursor.fetchall()
print(data)
zhiwei = [data[0][0]]
print(zhiwei)
min_list = [data[0][2]]
max_list = [data[0][3]]
average_list = [data[0][1]]
bar = Bar()
bar.add_xaxis(xaxis_data=zhiwei)
# 第一个参数是图例名称,第二个参数是y轴数据
bar.add_yaxis(series_name="最低工资", yaxis_data=min_list)
bar.add_yaxis(series_name="最高工资", yaxis_data=max_list)
bar.add_yaxis(series_name="平均工资", yaxis_data=average_list)
# 设置表的名称
bar.set_global_opts(title_opts=opts.TitleOpts(title='1-3年经验', subtitle='工资单位:万/月'), toolbox_opts=opts.ToolboxOpts(),
)
bar.render("第三题.html")
运行可视化图:
4.分析大数据相关岗位几年需求的走向趋势,并做出折线图;
在pycharm中编写代码:
import pymysql
from pyecharts.charts import Line
from pyecharts import options as opts
db = pymysql.connect(host="192.168.1.101",port=3306,database="shuju",user='root',password='123')
cursor = db.cursor()
sql = "select * from question4"
cursor.execute(sql)
data = cursor.fetchall()
time_list = []
renshu = []
for i in data:
time_list.append(str(i[0]))
renshu.append(str(i[1]))
print(time_list)
print(renshu)
data_pair = [list(z) for z in zip(time_list, renshu)]
data_pair.sort(key=lambda x: x[1])
(
Line(init_opts=opts.InitOpts(width="2000px", height="400px"))
.set_global_opts(
tooltip_opts=opts.TooltipOpts(is_show=False),
xaxis_opts=opts.AxisOpts(type_="category"),
yaxis_opts=opts.AxisOpts(
type_="value",
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True),
),
)
.add_xaxis(xaxis_data=time_list)
.add_yaxis(
series_name="大数据岗位需求变化趋势",
y_axis=renshu,
symbol="emptyCircle",
is_symbol_show=True,
label_opts=opts.LabelOpts(is_show=False),
)
.render("第四题.html")
)
运行可视化图:
更多推荐
所有评论(0)