Husky中文文档-PyHusky 架构

PyHusky Architecture

本节介绍husky的架构,其中包括前端和后端。

PyHusky 前端

在PyHusky前端,几乎所有的运算符如map,flat_map和reduce 等都属于DAG的节点,定义了对PyHuskyList中objects的转换。例如, b = a.map(func) 将从PyHuskyList a 返回一个新的PyHuskyList b。另外一些操作,如cache(),count(),collect()都只是对现有PyHuskyList操作,他们并不在DAG中创建新的节点。

例如,代码wc.py:

a = ["hello", "world", "hello", "husky"]
words = ph.env.parallelize(a)
wc = words.map(lambda x:(x,1)).reduce_by_key(lambda x,y:x+y).collect()

会创建如下的DAG:

   words  (parallelize_py)
     | 
    tmp1  (map_py)
     |
    tmp2  (reduce_by_key_py)
          (collect_py)

PyHusky采取lazy evaluation。,只有Actions才会真正触发计算。 Actions 包括 reduce(func)cache()uncache()write_to_hdfs(url)count() 和 collect()

所有的 Actions 调用在frontend/scheduler.py compute() 或者 compute_collect() 方法以触发计算。scheduler首先序列化DAG,然后发送DAG到master并等待结果。

PyHusky 后端

The Pyhusky backend consists of three parts: master who splits and distributes the DAG, C++ backend and python backend. Pyhusky后端由三部分组成:Master(分裂并分配DAG),C ++后端和Python后端。

Master

Master负责从PyHusky前端接收DAG,分裂DAG,并分配分裂后的DAG到不同机器的Daemon上。

  1. Master从PyHusky前端接收DAG,分裂DAG为多个任务,然后存储这些任务。

  2. Daemons向Master请求新任务。如果有待完成的任务,Master就会分配该任务给该Daemon。

  3. 当某个Daemon完成一个任务后,它就会通知Master。Master会收集结果并跟踪其进展。

Daemon

每台机器都运行一个Daemon进程。每一个Daemon进程有两层,即进程层和线程层。我们分别命名为DaemonDriver和WorkerDriver。

  1. DaemonDriver向Master请求任务。当它接收到一个新的会话时,它使用husky元进行全局的初始化,并生成线程(WorkerDrivers)。当它接收到一个任务时,它将任务分配到WorkerDrivers并等待WorkerDrivers返回的结果。

  2. WorkerDriver从DaemonDriver接收到任务。会话开始时,它会创建一个Python进程(每个WorkerDriver对应一个python进程)。它还指派任务给python进程,然后等待该进程的处理结果,并做相应的操作。

PyHusky 后端

PyHusky Backend is responsible for handling PyHusky operators (e.g. to execute lambda on tuples). It receives DAGs from WorkerDriver and traverses the DAGs. It mainly contains three parts invoking developer-defined functions PyHusky后端从WorkerDriver接收并遍历DAGs,负责处理PyHusky的操作(例如,根据lambda处理每个元组)。后端主要任务是调用开发者定义的三个函数(prefunc()func(),和postfunc())。

1.接收到一个DAG后,PyHusky后端会遍历该DAG,并给每个遍历到的操作运用prefunc()。 Prefunc()主要是做一些初始化的工作。例如,对于map_py操作,prefunc()需要反序列化其lambda以便后面的操作可使用这个lambda。

  1. 遍历DAG之后,对于各数据分片中的每个元组,PyHusky后端再次遍历DAG并运用func(),使得多个操作可以被同时执行(也就是pipeline,流水线处理)。例如,对于DAG load_py-> map_py-> flat_map_py-> count_py,PyHusky将各个数据分区的每个元组以流的形式通过DAG,以避免因缓存中间结果而占用大量内存。

  2. 处理完所有元组后,类似步骤1,PyHusky后端再一次遍历DAG,为每个操作运用postfunc(),做一些定稿工作。例如,对于write_to_hdfs_py操作,postfunc()实际上是发送输出到C++后端,然后C++后端将输出写入到HDFS。

回答: 当你在终端输入git commit -m "XXX"提交代码时,如果遇到husky > pre-commit的问题,这是由于pre-commit文件导致的提交失败。pre-commit文件是.git文件夹下的一个文件,它是pre-commit(客户端)钩子,会在Git键入提交信息前运行做代码风格检查。如果代码不符合相应规则,则会报错。解决这个问题有以下三种方案:\[1\]\[2\]\[3\] 1. 卸载husky。可以在项目的package.json文件中删除devDependencies节点下的husky库,然后重新运行npm i命令,或者直接在项目根目录下执行npm uninstall husky --save命令。 2. 找到项目中的.git文件夹,进入hooks文件夹,找到pre-commit文件,将其删除。这样就能成功提交代码了。 3. 使用souceTree等工具提交代码时,可以检查代码风格是否符合规则,如果不符合则进行相应的修改。 #### 引用[.reference_title] - *1* [git commit 提交的时候报错husky > pre-commit hook failed (add --no-verify to bypass)的原因和一些小...](https://blog.csdn.net/CJamenc/article/details/111316791)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Git提交代码报错husky 」 pre-commit](https://blog.csdn.net/qq_35695023/article/details/114022989)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [git commit提交时报错husky > pre-commit (node v14.19.3)](https://blog.csdn.net/qq_24518001/article/details/128162152)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值