添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
力能扛鼎的咖啡  ·  AMD Customer Community·  2 周前    · 
绅士的莲藕  ·  ControlNet - BentoML·  1 月前    · 
还单身的消炎药  ·  Issue 11427: ctypes ...·  1 月前    · 

CppGamingDEV_PVZ_BASE_EASYX

🎮 从零开始进行 C++ 游戏开发

[TOC]

游戏场景概念

DataVisualization_USE_R_ECHARTS

📺 数据可视化基础(使用 R ECharts

本文会从 R ECharts 两个方面来展开数据可视化技术的一些使用方法。

[TOC]

📊 1. 数据可视化概述

SparkQuickIN

快速入门 Spark

[TOC]

⛳︎ 1. 开始 Spark

Spark官网 Apache Spark™ - Unified Engine for large-scale data analytics

1.1 什么是Spark

Spark官网的解释:Apache Spark™ is a unified analytics engine for large-scale data processing.

Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。 Spark 是加州大学伯克利分校的 AMP实验室 所开源的类 Hadoop MapReduce 的通用并行计算框架, Spark 拥有 Hadoop MapReduce 所具有的优点,但不同于 MapReduce 的是: Job 中间输出结果可以缓存在内存中,从而不再需要读写 HDFS ,减少磁盘数据交互,因此 spark 能更好地适用于数据挖掘与机器学习等需要迭代的算法。

Spark Scala 编写,方便快速编程。

其特点是 :高速、使用简单、通用、可以在多处运行。

1.2 总体技术栈讲解

Spark 提供了 Sparkcore RDD Spark SQL Spark Streaming Spark MLlib Spark GraphX 等技术组件,可以一站式的完成大数据领域的离线批处理、交互式查询、流式计算、机器学习、图计算等常见的任务。这就是 Spark 一站式开发的特点。

1.3 Spark MapReduce 的区别

1.3.1 MapReduce 的原理

MapReduce 在运算时需要多次进行磁盘 I/O。下面是一个简单的 MapReduce 过程:

视频链接: https://www.bilibili.com/video/BV1TB4y1i7kk/

在这个视频中,可以看出 MapReduce 过程中需要多次磁盘 I/O,落地到 HDFS 上。

1.3.2 Spark 是如何做的

可以看到, MapReduce 的多个 Job 之间相互独立,每个 Job 完成后的数据都需要存储到文件系统中。每个 Job 中也可能会存在大量的磁盘 I/O ,这样会使得 MapReduce 的速度很慢。相比于 MapReduce Spark 使用了 DAG 有向无环图。使多个任务串联起来,将结果存储在内存中(当然内存不够还是要将数据缓存在磁盘中)直接进行运算,避免了大量的磁盘I/O。

1.3.3 Spark MapReduce 的一些联系

Spark MapReduce 都是分布式计算框架, Spark 计算中间结果基于内存缓存, MapReduce 基于 HDFS 存储。也正因此, Spark 处理数据的能力一般是 MapReduce 的三到五倍以上, Spark 中除了基于内存计算这一个计算快的原因,还有 DAG(DAG Schedule) 有向无环图来切分任务的执行先后顺序。

1.4 Spark API

Spark API 有多种语言支持,分别包括: Scala Java Python R SQL 等。

1.5 Spark 的运行模式

QuickPassHBase

快速上手HBase

[TOC]

⚙ 1. HBase简介

1.1 HBase的定义

Apache HBase 是以 HDFS 为数据存储的,一种分布式、可扩展的 NoSQL 数据库。

HBase 的设计理念依据 Google 的 BigTable 论文,论文中对于数据模型的首句介绍。

BigTable是一个稀疏的、分布式的、持久的多维排序映射(Map)。该映射由行键、列键和时间戳索引作为键(Key),映射中的每个值(Value)都是一个未解释的字节数组。

HBase 使用与 BigTable 非常相似的数据模型。用户将数据行存储在带标签的表中。数据行具有可排序的键和任意数量的列。该表存储稀疏,因此如果用户喜欢,同一表中的行可以具有疯狂变化的列。

1.2 HBase的数据模型

1.2.1 HBase 的逻辑结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"row_key1": {
"personal_info": {
"name": "ZhangSan",
"city": "Beijing",
"phone": "156****0000"
},
"office_info": {
"tel": "010-1234567",
"address": "Shandong"
}
},
"row_key11": {
"personal_info": {
"city": "Shanghai",
"phone": "133****0000"
},
"office_info": {
"tel": "010-1234567",
}
},
"row_key2": {
...
}
}
personal_info office_info RowKey↓ phone address row_key1 ZhangSan Beijing 156****0000 010-1234567 Shandong row_key11 Shanghai 131****0000 010-1234567 row_key2

在上面的表格中:

  • personal_info office_info 称为 列族
  • name city phone tel address 称为
  • row_key1 row_key11 称为 行键
  • 将一整张大表按照 进行拆分,拆分为多个表,拆分后的每个表称为**块(Region)**,用于实现分布式结构。
  • 将一整张大表按照 列族 进行拆分,拆分为多个**存储(Store)**,用于在底层存储到不同的文件夹中,便于文件对应。
  • 存储数据 稀疏 ,数据存储 多维 ,不同的行具有不同的列。数据存储整体有序,按照RowKey的字典序排列,RowKey为一个Byte数组。

    1.2.2 HBase 的物理结构

    物理存储结构即为数据映射关系,而在概念视图的空单元格,底层实际根本不存储。

    在HDFS中划分好的存储Store如下:

    personal_info RowKey phone row_key1 ZhangSan Beijing 156****0000 row_key11 Shanghai 131****0000 row_key2

    其底层一定是以映射(Map)的方式进行存储的,格式为** (Key, Value) Value 一定是 “ZhangSan”**这种字段。那么 Key 是什么呢?

    为了确定 Value 值**”ZhangSan” ,我们需要用 Key 对应到 Value**,于是得到存储如下:

    Row Key Column Family Column Qualifier Timestamp Value row_key1 personal_info ZhangSan row_key1 personal_info Beijing row_key1 personal_info phone 156****0000 row_key1 personal_info phone 156****0001 row_key1 personal_info phone Delete 156****0001

    因为 HDFS 是无法修改数据的,而 HBase 需要修改数据,那么就需要解决这一问题,于是就有了**时间戳(Timestamp)**。不同版本(version)的数据根据 Timestamp 进行区分,读取数据默认读取最新的版本。

    在上面的表格中, t4 相对于 t3 来说就是进行了修改,将 t3 时的** phone 156****0000 修改为 t4 时的 156****0001 ,读取时默认读取 t4 时的 phone **值,通过这种方式完成了修改。

    同样的,我们也不好删除数据,因此我们只需要插入一条** Type **为 Delete 的数据即可。

    1.2.3 数据模型

    Better QT

    [TOC]

    Qt 的一些常用技巧

    快捷键

    IDEA 2022 搭建 Tomcat 环境

    [TOC]

    Tomcat 环境的搭建

    参考教程

    下载 Tomcat

    Tomcat官网地址
    Tomcat官网
    在 Tomcat 官网中下载指定版本的 Tomcat,左侧 Download 处有相应版本,这里推荐 Tomcat 9 版本(因为Tomcat 10 在配置时会出现一定的问题)。
    TomcatDownload
    下载后解压到指定位置即可。

    配置环境变量即可

    配置 Tomcat 环境变量前一定要配置好 Java 的环境变量,尤其是JAVA_HOME,这里我一开始并没有配置 JAVA_HOME ,我的环境变量是 JAVA_HOME_180=xxx ,这种方式Tomcat是找不到 JAVA_HOME 的,因此我又重新配置了 JAVA_HOME
    我的 JAVA_HOME 环境变量为:

    1
    JAVA_HOME=D:\JDK\jdk1.8.0_231

    下面是 Tomcat 的环境变量配置:
    新建 CATALINA_HOME 环境变量:

    1
    CATALINA_HOME=D:\tomcat\apache-tomcat-9.0.89

    修改 Path ,在 Path 后添加(新建)如下环境变量:

    1
    2
    3
    %CATALINA_HOME%\lib
    %CATALINA_HOME%\bin
    %CATALINA_HOME%\lib\servlet-api.jar

    验证是否配置成功

    在命令行中,执行命令: startup.bat ,若正常打印相关配置变量、且 Tomcat 进程被阻塞,即证明环境搭建成功。访问 localhost:8080 ,出现以下界面即证明成功搭建。
    TomcatSuccess
    使用 shutdown.bat 命令即可使阻塞的 Tomcat 进程被关闭,推荐使用这种方式关闭 Tomcat。

    可能会出现的问题

    1. 协议处理程序初始化失败: 参考教程
      这个问题有可能是由于8080端口被占用了,在Windows中可以使用如下命令查看端口的占用情况:
      1
      netstat -aon|findstr "8080"
      如果确实被占用了,可以使用如下命令杀死端口号为 <PIDNUM> 的进程。
      1
      taskkill -PID <PIDNUM> -F
    2. 闪退
      可能原因是:环境变量配置不正确,仔细检查环境变量的配置。
    3. 乱码
      问题描述:打开startup.bat后汉字乱码
      解决方法:在.\apache-tomcat-9.0.43\conf下打开logging.properties文件
      java.util.logging.ConsoleHandler.encoding = UTF-8 替换为 java.util.logging.ConsoleHandler.encoding = GBK
    4. 社区版 IDEA 如何配置 Tomcat

      CSDN 上大多数教程使用 Maven 创建 Tomcat 项目,但是这种方法实在是过于麻烦,社区版和专业版又有些不同,找不到很多东西。

      如何配置 IDEA 2022 社区版中的 Tomcat