0%

引言

在工作中我们经常会遇到这样的一些问题,例如公司服务器数据存放在公司内容,现在在外面出差无法通过资源浏览器直接访问,通常的做法是使用远程控制软件如to_desk、向日葵等等,这种方式虽然能够解决我们文件查找的问题,但是在进行传输的时候,第三方工具的传输速度太慢,并且这种方式也不太优雅;再比如,公司在做开发时,一般是很多人一起完成一个项目,每个人负责一部分代码,这个时候就设置到一个代码同步的问题,场景的做法就是在局域网中搭建gitlab,然后大家统一将代码上传到gitlab,但是有的时候由于一些原因有些工作需要回家完成,但是在家完成后又无法直接上传到公司的局域网gitlab,和其他同事之间就无法进行及时的同步进度~~~~。

这些问题在学习完本文的内容后都会得到解决。

安装前的准备工作

设备

我在这里演示的设备有3个:

  1. 服务端:阿里云服务器Centos7操作系统。【服务端一定要位于公网】
  2. 客户端1:本机Windows11操作系统。
  3. 客户端2:公司服务器Centos7操作系统
阅读全文 »

项目目录结构

例如,在此演示的发布库的项目结构如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
MinglogUtils
├─LICENSE
├─README.md
├─setup.py
├─CVUtils
│ ├─CVUtils.py
│ ├─test.py
│ ├─__init__.py
│ ├─files
│ │ ├─province.txt
│ │ └─WordAndNum.txt
│ └─__pycache__
│ ├─CVUtils.cpython-38.pyc
│ └─__init__.cpython-38.pyc
└─SpiderUtils
├─SpiderUtils.py
└─__init__.py
阅读全文 »

Hadoop集群规划

hadoop102 hadoop103 hadoop104
HDFS NameNode DataNode DataNode SecondaryNameNode DataNode
YARN NodeManager ResourceManager NodeManager NodeManager

这里的规划方式和前面我们讲到的一致。

相关IP配置如下所示:

宿主机网络信息:

IP192.168.128.66

GATEWAY192.168.128.2

DNS1192.168.128.2

集群网络配置:

hadoop102192.168.128.102

hadoop103192.168.128.103

hadoop104192.168.128.104

阅读全文 »

第一题

现有数据score_info.txt文件,文件内容如下所示:

1
2
3
4
5
6
7
8
9
1001    01 90
1001 02 90
1001 03 90
1002 01 85
1002 02 85
1002 03 70
1003 01 70
1003 02 70
1003 03 85

编写HiveQL代码,完成以下问题:

  1. 创建score_info表,字段名分别为uidsubject_idscore

    1
    2
    3
    4
    5
    6
    7
    8
    create table if not exists score_info(
    uid string,
    subject_id string,
    score int
    )
    row format delimited
    fields terminated by '\t'
    lines terminated by '\n';
  2. 将数据导入score_info表。

    1
    2
    3
    load data local 
    inpath '/opt/module/hive-3.1.2/datas/score_info.txt'
    overwrite into table score_info;
  3. 求出每门学科的平均成绩。

    1
    2
    3
    4
    5
    6
    select uid,
    score,
    subject_id,
    avg(score) over (partition by subject_id) avg_score
    from
    score_info
  4. 找出所有科目成绩都大于某个学科平均成绩的学生。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    select
    t2.uid
    from
    (
    select
    t1.uid,
    if(score > avg_score, 0, 1) flag
    from(
    select uid,
    score,
    subject_id,
    avg(score) over (partition by subject_id) avg_score
    from
    score_info
    ) t1
    ) t2
    group by uid
    having sum(t2.flag) = 0;

第二题

现有数据action.txt文件,文件内容如下所示:

1
2
3
4
5
6
7
8
u01 2017/1/21  5
u02 2017/1/23 6
u03 2017/1/22 8
u04 2017/1/20 3
u01 2017/1/23 6
u01 2017/2/21 8
u02 2017/1/23 6
u01 2017/2/22 4

编写HiveQL代码,完成以下问题:

  1. 创建action表,字段名分别为userIdvisitDatevisitCount

    1
    2
    3
    4
    5
    6
    7
    8
    create table if not exists action(
    userid string,
    visitDate string,
    visitCount int
    )
    row format delimited
    fields terminated by '\t'
    lines terminated by '\n';
  2. 将数据导入action表。

    1
    2
    3
    load data local 
    inpath '/opt/module/hive-3.1.2/datas/action.txt'
    into table action;
  3. 统计出每个用户的月累计访问次数。

    1
    2
    3
    4
    5
    select
    userid,
    substring(visitDate, 0, 6) visitMonth,
    sum(visitCount) over (partition by userid, month(visitDate)) sumCount
    from action;
  4. 统计出每个用户的逐月累计访问次数。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select
    userid,
    visitMonth,
    max(sumCount)
    from(
    select
    uid,
    substring(visitDate, 0, 6) visitMonth,
    sum(visitCount) over (partition by userid, month(visitDate) order by visitDate) sumCount
    from action) t1
    group by userid, visitMonth;

docker简介

什么是docker

Docker 最初是dotCloud公司创始人Solomon Hykes在法国期间发起的一个公司内部项目,它是基于 dotCloud公司多年云服务技术的一次革新,并于2013年3月Apache 2.0 授权协议开源,主要项目代码在 GitHub上进行维护。Docker 项目后来还加入了Linux基金会,并成立推动开放容器联盟(OCI)。

Docker使用 Google 公司推出的Go语言进行开发实现,基于Linux 内核的cgroupnamespace,以及OverlayFS 类的Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于LXC,从 0.7版本以后开始去除 LXC,转而使用自行开发的libcontainer,从 1.11开始,则进一步演进为使用runCcontainerd

Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

阅读全文 »

前言

不知道大家是否需要过这样的问题,自己有多台电脑,例如:一个在家,一个在公司。有的时候在家使用电脑时,需要用到公司电脑的文件,这个时候一般的做法是远程控制公司电脑,然后将文件拷贝过来。但是这样做有以下弊端:

  1. 想要远控公司电脑,必须保证公司电脑是开启且不休眠的状态。
  2. 对于小文件,少量文件这样做没有问题,但是对于大量小文件或者大文件而言,使用远程工具去拷贝对于网速的要求非常高,并且速度很慢。
阅读全文 »

分区表与分桶表

我们创建一个hive表时,此时在hdfs上就在默认路径下创建了一个以表的名字命名的文件夹。

image-20230809140220687

Hive表中的数据在hdfs上则是对应文件夹下的所有文件。在查询表中数据时,其实就是将文件夹下的所有文件进行读取,在海量数据的场景下,这无疑是非常耗时的,并且在实际生产环境中,往往会进行查询过滤。

阅读全文 »

基础语法及执行顺序

查询语句语法

1
2
3
4
5
6
7
SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[ORDER BY col_list]
[CLUSTER BY col_list| [DISTRIBUTE BY col_list] [SORT BY col_list]]
[LIMIT number]

书写次序和执行次序

顺序 书写次序 书写次序说明 执行次序 执行次序说明
1 select 查询 from 先执行表与表直接的关系
2 from 先执行表与表直接的关系 on
3 join on join
4 where where 过滤
5 group by 分组 group by 分组
6 having 分组后再过滤 having 分组后再过滤
7 distribute by
cluster by
4个by select 查询
8 sort by distinct 去重
9 order by distribute by
cluster by
4个by
10 limit 限制输出的行数 sort by
11 union/union all 合并 order by
12 limit 限制输出的行数
13 union /union all 合并
阅读全文 »

Hive数据类型

Hive种数据类型分为两种:

  1. 基本数据类型
  2. 集合数据类型

基本数据类型

Hive数据类型 Java数据类型 长度 例子
TINYINT byte 1byte有符号整数 20
SMALINT short 2byte有符号整数 20
INT int 4byte有符号整数 20
BIGINT long 8byte有符号整数 20
BOOLEAN boolean 布尔类型,true或者false TRUE FALSE
FLOAT float 单精度浮点数 3.14159
DOUBLE double 双精度浮点数 3.14159
STRING string 字符系列。可以指定字符集。
可以使用单引号或者双引号。
Hello world!
TIMESTAMP 时间类型
BINARY 字节数组

对于HiveString类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB的字符数。

阅读全文 »