实训项目- 大数据

文章目录

一.爬虫数据:拉勾和前程无忧

前程无忧:

爬取的数据字段有:职位名称、薪资水平、招聘单位、工作地点、工作经验、学历要求、工作内容(岗位职责)、任职要求(技能要求):
**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")
)

在这里插入图片描述

运行可视化图:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值