学习大数据DAY57 新的接口配置

作业

 完成 API 接口和文件的接入, 并部署到生产调度平台, 每个任务最后至少
要有两条 不报错 的日志, 报错就驳回作业
 作业不需要复制日志
API = Appliation Program Interface 应用程序接口 => JSON 的地址
客户需求: 把
https://zhiyun.pub:9099/site/c-class?page=1 所有数据定 时同步到 Hive 数仓

分析 分页数据
https://zhiyun.pub:9099/site/c-class?page=1
https://zhiyun.pub:9099/site/c-class?page=2
...
https://zhiyun.pub:9099/site/c-class?page=20
技术: Python + requests 请求库
需要的依赖包
pip install requests hdfs
c_org_busi.py:

python 复制代码
#!/bin/python3
import requests
from hdfs import *
import os
# *客户需求: 把 https://zhiyun.pub:9099/site/c-class?page=1 所有
数据定时同步到 Hive 数仓
lines = []
page = 1
pages = 1
def get_data(page=1):
global pages
print(f"正在抽取第{page}页的数据")
url = f"https://zhiyun.pub:9099/site/c-class?page={page}"
r = requests.get(url)
data = r.json()
if data["status"] == 1:
page_data = data["data"]
# 更新页数
pages = data["pages"]
# print(f"pages: {pages}")
# print(page_data)
for item in page_data:
# {'id': '1', 'levels': '1', 'classcode': '01',
'classname': '中西成药', 'saletax': '0.00', 'createtime':
'1900-01-20 11:16:47', 'createuser': '1002', 'notes': 'null',
'stamp': '562664386'}
# 字典 => Hive 数据格式# A B C D ...
values = item.values()
# print(values)
# dict_values(['1', '1', '01', '中西成药', '0.00',
'1900-01-20 11:16:47', '1002', 'null', '562664386'])
# 把所有元素转换成字符串
str_list = []
for value in values:
str_list.append(f"{value}")
# print(str_list)
# ['1', '1', '01', '中西成药', '0.00', '1900-01-20
11:16:47', '1002', 'null', '562664386']
# 字符串的 join 方法, 把列表的所有元素拼接起来
line = "\t".join(str_list)
# print(line)
# 1
1
01
中西成
药
0.00
1900-01-20
11:16:47
1002
null
562664386
lines.append(line)
# print(lines)
def do_get_data():
global page, pages
while page <= pages:
# print(f"pages: {pages}")
get_data(page)
# print(f"pages: {pages}")
page = page + 1
# 写入到数据文件
with
open("/zhiyun/shihaihong/data/c_class.data","w",encoding="utf-
8") as f:
content = "\n".join(lines)
f.write(content)
print("文件写入成功")
# 上传到 HDFSdef upload_data_hdfs():
# 创建 HDFS 目录
client = Client("http://192.168.200.100:9870")
client.makedirs("/zhiyun/shihaihong/ods/c_class")
# 上传
# 注意再次上传会报已存在错误
client.upload("/zhiyun/shihaihong/ods/c_class",
"/zhiyun/shihaihong/data/c_class.data");
print("上传成功")
# Hive 建表
def craete_hive_table():
os.system('''
hive -e '
create database if not exists ods_shihaihong location
"/zhiyun/shihaihong/ods";
create external table if not exists ods_shihaihong.c_class(
id int,
levels int,
classcode string,
classname string,
saletax decimal(10,2),
createtime timestamp,
createuser string,
notes string,
stamp int
) row format delimited fields terminated by "\t"
lines terminated by "\n"
stored as textfile
location "/zhiyun/shihaihong/ods/c_class";
'
''')
# 验证数据
def check_data():
os.system('''
hive -e '
select count(1) from ods_shihaihong.c_class;
select * from ods_shihaihong.c_class limit 5;
'
''')# 爬取数据
do_get_data()
upload_data_hdfs()
craete_hive_table()
check_data()

运行后验证:

部署到调度平台:
执行前,要现在 hdfs 建立文件:
hadoop fs -mkdir -p /zhiyun/lijinquan/ods/c_class
把之前上传的数据清空,然后用任务调度再执行一遍。
执行一次,查看执行日志:


文件接入:
需求: 定时下载
https://zhiyun.pub:9099/设备清单.xlsx
, 然后上传到
HDFS 建表,更新
c_tools.py:

python 复制代码
#!/bin/python3
import requests
from hdfs import *
import os
import pandas
# *客户需求: 定时下载 https://zhiyun.pub:9099/设备清单.xlsx , 然后
上传到 HDFS 建表,更新
def get_data():
print(f"正在抽取数据")
url = f"https://zhiyun.pub:9099/设备清单.xlsx"
r = requests.get(url)
if r.status_code == 200:
with open("/zhiyun/shihaihong/data/download_设备清
单.xlsx","wb") as f:
f.write(r.content)
df=pandas.read_excel("/zhiyun/shihaihong/data/downl
oad_设备清单.xlsx")df.to_csv("/zhiyun/shihaihong/data/download_设备清
单.csv",index=False,header=False)
print("文件下载成功")
f.close()
else:
print("文件下载失败")
# 上传到 HDFS
def upload_data_hdfs():
# 创建 HDFS 目录
client = Client("http://192.168.200.100:9870")
client.makedirs("/zhiyun/shihaihong/ods/c_tools")
# 上传
# 注意再次上传会报已存在错误
client.upload("/zhiyun/shihaihong/ods/c_tools",
"/zhiyun/shihaihong/data/download_设备清单.csv");
print("上传成功")
# Hive 建表
def create_hive_table():
os.system('''
hive -e '
create database if not exists ods_shihaihong location
"/zhiyun/shihaihong/ods";
create external table if not exists ods_shihaihong.c_tools(
id int,
hospital string,
tool_name string,
manufacturer string,
produce_date string,
administrative_officer string,
picture string
) row format delimited fields terminated by ","
lines terminated by "\n"
stored as textfile
location "/zhiyun/shihaihong/ods/c_tools";
'
''')
# 验证数据
# def check_data():#
os.system('''
#
hive -e '
#
select count(1) from ods_shihaihong.c_class;
#
select * from ods_shihaihong.c_class limit 5;
# '
#
''')
# 爬取数据
get_data()
upload_data_hdfs()
create_hive_table()
# check_data()

运行结束后验证:
检查 HDFS 是否有上传文件:

检查 Hive 数据库中是否有此库:


任务定时调度:
登录老师的任务调度中心:

编辑 GLUE IDE
跟前面差不多,就是生产调度的 HDFS 路径需要注意修改
client = Client("http://cdh02:9870")

执行日志:


把上一个脚本的代码也写入生产调度中心:

相关推荐
瑞雪流年18 分钟前
conda 创建环境失败故障解决记录
开发语言·python·conda
山山而川粤24 分钟前
大连环保公益管理系统|Java|SSM|Vue| 前后端分离
java·开发语言·后端·学习·mysql
Who_Mr.Lin33 分钟前
【虚拟机】VMWare的CentOS虚拟机断电或强制关机出现问题
linux·运维·centos
codists41 分钟前
《Django 5 By Example》阅读笔记:p237-p338
python·django
小白也有IT梦1 小时前
Python 虚拟环境使用指南
python
我是唐青枫1 小时前
Linux nc 命令详解
linux·运维·服务器
南东山人1 小时前
关于内核编程的一些笔记
linux·笔记
ejinxian1 小时前
Windows 系统上构建 Linux 应用
linux·运维·服务器·red hat
yuwinter1 小时前
鸿蒙HarmonyOS学习笔记(1)
学习·华为·harmonyos
知识鱼丸1 小时前
【数据结构】一图介绍python数据结构
数据结构·python