Docker

Docker概念

Docker 是一个开源的应用容器引擎,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

Docker核心技术

  1. namespace
  2. cgroup

Docker网络模式

  1. Bridge:默认设置,此模式会为每一个容器分配Network Namespace、设置IP。
  2. Host:容器使用宿主机的IP和端口。
  3. container:和一个指定的容器共享IP、端口范围等。
  4. none:无网络。

Kubernetes (k8s)

K8S概念

Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用。目标是让部署容器化的应用简单而高效。

Minikube

Minikube 是一种轻量级的 Kubernetes 实现,可在本地计算机上创建 VM 并部署仅包含一个节点的简单集群。

kubectl

Kubernetes 命令行工具 kubectl,让你可以对 Kubernetes 集群运行命令。

Hive

Hive概念

Hive是基于Hadoop的一个数据仓库工具,可实现大规模分析的分布式容错数据仓库系统。底层数据存储于HDFS上,本质是将SQL语句转换为MapReduce任务运行。

k8s部署hive

  1. 创建Hive的Manifest文件,即创建hive.yaml。
  2. 使用kubectl apply命令将Manifest文件部署到k8s上。
  3. 使用kubectl get pods命令查看Hive集群的状态。
  4. 通过hive创建库表和添加数据等操作验证集群可用性。

Spark

Ray

Ray example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import ray
'''
Ray 初始化
ray.init() 不设置,默认 1 CPU
'''
ray.init(num_cpus=4)

'''
远程运行该函数
'''
@ray.remote
def f(x):
time.sleep(1)
return x * x

'''
使用.remote()来调用而不是直接调用
使用ray.get获取结果
结果为:[0, 1, 4, 9]
因为使用了4个CPU,所以预估会有4倍的性能提升。
'''
futures = [f.remote(i) for i in range(4)]
print(ray.get(futures))

Ray和Spark的区别与联系

  1. 共同点
    • Apache Ray 和 Apache Spark 都是为了处理大规模数据和加速机器学习训练等任务而设计的。
  2. 区别
    • Apache Spark 使用Scala或Java的函数式编程模式,对Python等其他语言支持较为有限;Apache Ray提供Python的原生支持。
    • Apache Ray适用于实时计算和低延迟的场景;Apache Spark适用于大规模批处理和离线计算的场景。
    • 在Spark系统中,只有唯一一个启动任务的master节点;Ray则不同,一个任务可以启动其他任务或者启动actor,并且可以互相通信。
  3. 联系
    • Ray和Spark并不是冲突的,事实上二者可以集成共同使用。使用Raydp(不推荐)或者直接使用pyspark和Ray。

hive + spark + ray

  1. hive,spark,ray都部署在k8s上;
  2. 数据存储在hive中;
  3. 在数据处理部分,使用pyspark;
  4. 在程序的算法训练部分,使用ray。