Spark基础

定义Apache Spark是用于大规模数据处理的统一分析引擎。其核心数据结构:弹性分布式数据集(RDD)能够在大规模集群中做内存运算,且具有一定容错方式。

Spark框架

组成

· Spark Core:以RDD为数据抽象,提供Python、Java、Scala、R语言的API和Spark的核心功能,是Spark运行的基础;

· SparkSQL:基于SparkCore,提供机构化数据处理模块,支持以SQL语言对数据进行处理;同时可以作为StructuredStreaming模块的基础,进行数据流式计算;

· SparkStreaming:基于SparkCore,提供数据流式计算;

· MLlib:基于SparkCore,内置大量机器学习库和算法API,进行机器学习计算;

· GraphX:基于SparkCore,提供了大量图计算API,用于分布式图计算

运行模式

· 本地模式(单机/local):以一个独立进程,通过内部的多线程模拟Spark运行环境

· Standalone模式(集群):Spark的各个角色以独立进程形式存在,组成集群环境

· Hadoop YARN模式(集群):Spark的各个角色运行在YARN容器内部,组成集群环境

· Kubernetes模式(容器集群):Spark的各个角色运行在Kubernetes容器内部,组成集群环境

· 云服务模式

角色

  • 资源

· Master角色:集群资源管理

· Worker角色:单机资源管理(所在服务器资源管理)

  • 任务

· Driver角色:单个任务管理

· Executor角色:单个任务计算

Read More

Nebula-全文检索

连接ES

添加Nebula全文索引模板文件

http://localhost:5601/app/dev_tools#/console

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
curl -H "Content-Type: application/json; charset=utf-8" -XPUT http://localhost:9200/_template/nebula_index_template -d '
{
"template": "nebula*",
"settings": {
"index": {
"number_of_shards": 3,
"number_of_replicas": 1
}
},
"mappings": {
"properties" : {
"tag_id" : { "type" : "long" },
"column_id" : { "type" : "text" },
"value" :{ "type" : "keyword"}
}
}
}'

登录ES客户端

SIGN IN TEXT SERVICE (localhost:9200,"admin","123456")

查看ES客户端详情

SHOW TEXT SEARCH CLIENTS;

退出ES客户端

SIGN OUT TEXT SERVICE

配置Nebula

安装storage服务

进入/usr/local/nebula根目录下,进入/etc子目录,找到nebula-storaged-listener.conf.production文件,复制一份并去除.production后缀。将文件中的listenr地址改为真实地址。

随后启动listener:./bin/nebula-storaged --flagfile etc/nebula-storaged-listener.conf

添加listener

ADD LISTENER ELASTICSEARCH 192.168.100.1:9789,192.168.100.2:9789;(注:如果有多台图库集群,都要配置)

进入nebula-console,执行SHOW LISTENER可以查看图空间的所有listener。

要删除所有listener,执行:REMOVE LISTENER ELASTICSEARCH(注:一个图空间仅可执行一次)

Read More

Docker

CentOS Docker安装

CentOS7要求64位,且内核版本高于3.10

查看CentOS内核版本:uname -r

· 安装Docker:卸载旧版本

1
2
3
4
5
6
7
8
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

· 安装所需软件包

1
2
3
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

· 设置Docker仓库(清华源)

1
2
3
$ sudo yum-config-manager \
--add-repo \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

· 安装Docker Engine-Community

1
$ sudo yum install docker-ce docker-ce-cli containerd.io

Read More

Nebula-fastapi接口维护文档

普通接口

1.导入fastapi、连接nebula连接池

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from fastapi import FastAPI
from nebula2.gclient.net import ConnectionPool
from nebula2.Config import Config


# 关闭在线文档,防止攻击
app_router = FastAPI(docs_url=None, redoc_url=None)

config = Config()
config.max_connection_pool_size = 10
# 连接超时时间
config.timeout = 60000
# 关闭空闲连接时间
config.idle_time = 0
# 检查空闲连接时间间隔
config.interval_check = -1
# 初始化连接池
connection_pool = ConnectionPool()
# 如果给定的服务器正常,则返回true,否则返回false
ok = connection_pool.init([('host', 9669)], config)

if __name__ == "__main__":
import uvicorn
uvicorn.run(app="nebula_api:app_router", reload=True, debug=True, host=host, port=port)

2.CORS跨域访问设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from fastapi.middleware.cors import CORSMiddleware


# CORS
origins = [
"*"
]

app_router.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"]
)

Read More

PaddleOCR表格识别

PaddleOCR2.5根目录下的ppstructure文件模块是PaddleOCR提供的一个可用于复杂文档结构分析处理的OCR工具包
github文档页面:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.5/ppstructure/README_ch.md

安装依赖

· 安装paddleocr version>=2.5

1
pip install "paddleocr>=2.5"

· 安装版面分析依赖包layoutparser

1
pip install -U https://paddleocr.bj.bcebos.com/whl/layoutparser-0.0.0-py3-none-any.whl

· 安装DocVQA依赖包paddlenlp(DocVQA功能,选装)

1
pip install paddlenlp

快速开始

在PaddleOCR/ppstructure目录下进入CMD命令行,或者创建python脚本启动
· 表格识别

1
paddleocr --image_dir=docs/table/table.jpg --type=structure --layout=false

python脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import os
import cv2
from paddleocr import PPStructure,save_structure_res

table_engine = PPStructure(layout=False, show_log=True)

save_folder = './output'
img_path = 'PaddleOCR/ppstructure/docs/table/table.jpg'
img = cv2.imread(img_path)
result = table_engine(img)
save_structure_res(result, save_folder, os.path.basename(img_path).split('.')[0])

for line in result:
line.pop('img')
print(line)

· 版面分析

1
paddleocr --image_dir=docs/table/1.png --type=structure --table=false --ocr=false

python脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import os
import cv2
from paddleocr import PPStructure,save_structure_res

table_engine = PPStructure(table=False, ocr=False, show_log=True)

save_folder = './output'
img_path = 'PaddleOCR/ppstructure/docs/table/1.png'
img = cv2.imread(img_path)
result = table_engine(img)
save_structure_res(result, save_folder, os.path.basename(img_path).split('.')[0])

for line in result:
line.pop('img')
print(line)

· 版面分析+表格识别

1
paddleocr --image_dir=docs/table/1.png --type=structure

python脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import os
import cv2
from paddleocr import PPStructure, draw_structure_result, save_structure_res
from PIL import Image

table_engine = PPStructure(show_log=True)

save_folder = './output'
img_path = './ppstructure/docs/table/table.jpg'
img = cv2.imread(img_path)
result = table_engine(img)
save_structure_res(result, save_folder, os.path.basename(img_path).split('.')[0])

for line in result:
line.pop('img')
print(line)


font_path = './doc/fonts/simfang.ttf'
image = Image.open(img_path).convert('RGB')
im_show = draw_structure_result(image, result, font_path=font_path)
im_show = Image.fromarray(im_show)
im_show.save('result.jpg')

Read More

PaddleOCR

安装

进入PaddleOCR的github页面(https://github.com/PaddlePaddle/PaddleOCR),进行下载和解压

使用pip进行安装,这里因为速度很慢推荐使用百度源

1
pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

安装shapely(https://www.lfd.uci.edu/~gohlke/pythonlibs/),下载shapely对应python和系统版本的安装包(我使用的是py39,windows_64),python版本目前不能超过3.9

将下载好的Shapely-1.8.2-cp39-cp39-win_amd64.whl放进python根目录下的libs文件夹内,通过cmd或pycharm终端使用pip执行安装

1
pip install Shapely-1.8.2-cp39-cp39-win_amd64.whl

完成以后接着来到PaddleOCR目录下,通过终端安装依赖,这里同样推荐使用百度源

1
pip install -r requirements.txt -i https://mirror.baidu.com/pypi/simple

到这里,PaddleOCR的安装完成了

如果再执行pip install -r requirements.txt -i https://mirror.baidu.com/pypi/simple到安装opencv4.4.0.46包时报错:

error: subprocess-exited-with-error

说明python的版本可能存在问题,需要切换虚拟环境或回退python版本,因为opencv-python目前仅支持py3.6-3.9版本

opencv-python镜像:https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/opencv-python/

Read More

ClickHouse

本文参考CK中文官方文档:https://clickhouse.com/docs/zh/
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)

在传统的行式数据库系统中,数据按如下顺序存储:

ROW Title Code Note Datetime
#0 Database 0 数据库 2022-07-07 16:03:00
#1 MySQL 1 关系型数据库 2022-07-07 16:03:10
#2 Nebula 1 图数据库 2022-07-07 16:03:20
#3 ClickHouse 1 列式数据库 2022-07-07 16:03:30
#N 1

处于同一行中的数据总是被物理的存储在一起。常见的行式数据库系统有:MySQLPostgresMS SQL Server

而在列式数据库系统中,数据则按如下顺序存储

ROW #0 #1 #2 #3 #4
Title Database MySQL Nebula ClickHouse
Code 0 1 1 1 1
Note 数据库 关系型数据库 图数据库 列式数据库
Datetime 2022-0707 16:03:00 2022-0707 16:03:10 2022-0707 16:03:20 2022-07-07 16:03:30

这些示例只显示了数据的排列顺序,来自不同列的值被单独存储,来自同一列的数据被存储在一起。常见的列式数据库系统有:VerticaParaccel(Actian Matrix, Amazon Redshift)、Sybase IQExasolInfobrightInfiniDBMonetDB(VectorWise, Actian Vector)、LucidDBSAP HANAGoogle DremelGoogle PowerDrillDruidkdb+

不同的数据存储方式适用不同的业务场景,数据访问的场景包括:进行了何种查询、多久查询一次以及各类查询的比例;每种类型的查询(行、列和字节)读取多少数据;读取数据和更新之间的关系;使用的数据集大小以及如何使用本地的数据集;是否使用事务,以及它们是如何进行隔离的;数据的复制机制与数据的完整性要求;每种类型的查询要求的延迟与吞吐量等等

系统负载越高,依据使用场景进行定制化就越重要,并且定制将会变的越精细。没有一个系统能够同时适用所有不同的业务场景。如果系统适用于广泛的场景,在负载高的情况下,要兼顾所有的场景,那么将不得不做出选择:平衡 OR 效率

联机分析(OLAP)场景的关键特征

· 绝大多数是读请求

· 数据以相当大的批次(> 1000行)更新,而不是单行更新;或者根本没有更新。

· 已添加到数据库的数据不能修改。

· 对于读取,从数据库中提取相当多的行,但只提取列的一小部分。

· 宽表,即每个表包含着大量的列

· 查询相对较少(通常每台服务器每秒查询数百次或更少)

· 对于简单查询,允许延迟大约50毫秒

· 列中的数据相对较小:数字和短字符串(例如,每个URL 60个字节)

· 处理单个查询时需要高吞吐量(每台服务器每秒可达数十亿行)

· 事务不是必须的

· 对数据一致性要求低

· 每个查询有一个大表。除了他以外,其他的都很小。

· 查询结果明显小于源数据。换句话说,数据经过过滤或聚合,因此结果适合于单个服务器的RAM中

很容易可以看出,OLAP场景与其他通常业务场景(例如,OLTP或K/V)有很大的不同, 因此想要使用OLTP或Key-Value数据库去高效的处理分析查询场景,并不是非常完美的适用方案。例如,使用OLAP数据库去处理分析请求通常要优于使用MongoDB或Redis去处理分析请求。

Read More

Nebula-CentOS安装与部署

本文参考、提取自Nebula Graph Database官方文档(https://docs.nebula-graph.com.cn/2.6.0)

1.前期准备

环境

· nebula版本:2.6.0
· 主机:CentOS7 64位
· 内存:8GB
· 处理器数量:4
· 处理器内核数:4
· 处理器内核总数:16
· 硬盘:30GB,SSD

硬件要求

· CPU架构:x86_64
· 内存:4GB
· 硬盘:10GB,SSD

软件

软件名称 版本 备注
glibc 2.17及以上 执行ldd --version检查版本
make 任意稳定版本 -
m4 任意稳定版本 -
git 任意稳定版本 -
wget 任意稳定版本 -
unzip 任意稳定版本 -
xz 任意稳定版本 -
redline-devel 任意稳定版本 -
ncurses-devel 任意稳定版本 -
zlib-devel 任意稳定版本 -
gcc 7.5.0及以上 执行命令gcc -v检查版本
gcc-c++ 任意稳定版本 -
cmake 3.9.0及以上 执行命令cmake --version检查版本
gettext 任意稳定版本 -
curl 任意稳定版本 -
redhat-lsb-core 任意稳定版本 -
libstdc++-static 任意稳定版本 仅在CentOS 8+、RedHat 8+、Fedora中需要
libasan 任意稳定版本 仅在CentOS 8+、RedHat 8+、Fedora中需要
bzip2 任意稳定版本 -

需要保证gcccmake的版本足够高,其他第三方软件将在安装(cmake)阶段自动下载并安装到build目录中

Read More

FastApi

FastAPI 是一个基于Python3.6+版本用于构建API的高性能web框架

官方文档链接:https://fastapi.tiangolo.com

安装

执行pip install fastapi[all]来安装fastapi所需要的全部python包和模块

也可以分开来安装来将应用程序部署到成产环境,其中uvicorn可以用作运行代码的服务器

1
2
pip install fastapi
pip install uvicorn[standard]

Read More

Scrapy:爬取steam热门游戏资料

有段时间没有做爬虫程序了,正好想起来还没有写过scrapy框架的博客,写个scrapy爬虫进行总结和回顾。本文代码已上传至github:https://github.com/elbadaernU404/steamgames

1.Scrapy简介

搜索scrapy,可以很轻松的找到Scrapy的官方网站,正如其首页所描述的那样,scrapy是一款快速且强力的多线程异步爬虫框架,适合对静态页面(不配置中间件的情况下)的信息进行高速且大面积、高层次的抓取,避免了传统爬虫并发爬取网站数据的局限性,仅需要少量的代码即可完成爬虫工作,是一项高效率的主流爬虫工具。

Scrapy

2.Scrapy框架原理

进入scrapy官网,可以找到官方文档中对框架最新的描述如下:

Scrapy运行结构
官方文档

总结后就是:
scrapy框架中共包括了引擎(Scrapy Engine)、Item 字段、调度器(Scheduler)、调度中间件(Scheduler Middewares)、下载器(Downloader)、下载器中间件(Downloader Middlewares)、爬虫程序(Spiders)、爬虫中间件(Spider Middlewares)管道(Pipeline)

1.scrapy引擎会从爬虫程序中获取初始请求;
2.scrapy引擎通过调度器(Scheduler)调度Requests并要求获取下一个Requests;
3.调度器将下一个请求返回至scrapy引擎;
4.scrapy引擎通过下载中间件将请求发送到下载器(Downloader)当中,完成一次下载后下载器会生成Response并发送给scrapy引擎;
5.scrapy引擎接受下载器的Response交给爬虫程序。爬虫完成对Response的处理后,将抓取的数据和新的Requests返回给scrapy引擎,scrapy引擎将数据处理完毕后交给Item管道,再将处理的请求发送给调度器,执行下一轮工作;
6.重复上述步骤,直到不再有来自调度器的请求,爬虫程序结束。

Read More


Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2024 青域 All Rights Reserved.

UV : | PV :