datahub数据source读取问题

datahub读取数据的位置

datahub全部启动正常后有9个项目,在datahub-actions中是做数据读取等一系列操作的
datahub数据source读取问题_第1张图片
在读取数据时候这个镜像内部有python3.9.9所以个人建议在使用python时候版本最好是3.9.9以上

开始正文actions容器内部查看

1.python位置

/usr/local/lib/python3.9/site-packages/datahub

datahub数据source读取问题_第2张图片
注意看这些包你就会发现和你的datahub源代码一样(版本要一致)那运行时候就走这些了吗?那就多想了

重点脚本

1,进入路径

/usr/local/bin

在这里插入图片描述
这些脚本来自acryl-executor
acryl-executor python链接
注意这里的版本0.0.3.1和0.0.2.5是不一样的脚本,但是意思一样,(在0.0.2版本是一直下载的,也就是离线也没啥用)可以下载后解压,脚本思想参考我的这个文章datahub代码关联下半部分的建议方式,思维模式是一样官网位置

脚本大致内容就是在tmp文件夹下建立了一个datahub的venv环境,注意自己版本在0.0.2.5时候这个建立venv环境用完就删除,在0.0.3的版本是不删除的,这时候你就明白为什么之前随便执行一下都是很长时间,但是最新版后面都相比第一次缩短了很多时间,同时这个venv环境运行也就解释了为什么你修改上面python位置下的datahub里面的代码为什么没有用,毕竟每次都建了新的环境

修改了datahub代码想要生效

1.手动创建venv环境到自己想要建立venv环境的目录并进入venv环境

python3 -m venv venv
source venv/bin/activate

2.基础的组件安装

pip install --upgrade pip wheel setuptools


在自己的datahub源码中修改代码并上传,只需要这个模块就行,修改代码很多也在source内
datahub数据source读取问题_第3张图片

3.模块代码拷贝进入容器

docker cp metadata-ingestion 容器:路径 

4.模块安装

进到你的metadata-ingestion的包下执行install命令注意这有点,这个时候你的metadata-ingestion 就安装了

pip install .

5.安装对应的source组件

这里的点代表当前,后面的加上你的需要的组件名称

#举例
pip install .[datahub-rest,datahub-kafka,mysql,hive]


安装好后修改上面圈出的两个脚本让再次来新的ingest注册数据源时候不在创建新的venv而是走你的这个

重点脚本修改

脚本路径 /usr/local/bin
run_ingest.sh修改这个是最简单的实用可以对照上面说的下载后和原版对照

#!/bin/bash
# usage: ./run_ingest.sh      

set -euo pipefail
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
cd "$DIR" || exit

# # source ingestion_common.sh

task_id="$1"
datahub_version="$2"
plugins="$3"
tmp_dir="$4"
recipe_file="$5"
report_file="$6"

# create_venv $task_id $datahub_version $plugins $tmp_dir
#这里修改成上面说的让你建立venv的环境路径
source /venv/bin/activate
#这里可注释可不注释,没啥用,我注释了
# if (datahub ingest run --help | grep report-to); then
#   echo "This version of datahub supports report-to functionality"
#   rm -f "$report_file"
#   report_option="--report-to ${report_file}"
# else
#   report_option=""
# fi


# Execute DataHub recipe, based on the recipe id. 
echo "datahub ingest run -c ${recipe_file}"
if (datahub ingest run -c "${recipe_file}"); then
  exit 0
else
  exit 1
fi

ingestion_common.sh可动可不动建议不在使用,你已经使用本地的了

#!/bin/bash

function create_venv {
    task_id=$1
    datahub_version="$2"
    plugin="$3"
    tmp_dir="$4"
    # we always install datahub-rest and datahub-kafka in addition to the plugin
    all_plugins="datahub-rest,datahub-kafka,${plugin}"

    venv_dir="$tmp_dir/venv-$plugin-${datahub_version}"
    SECONDS=0
    # Create tmp file to store requirements using provided recipe id. 
    req_file="$tmp_dir/requirements-${task_id}.txt"
    touch "$req_file"
    if [ "$datahub_version" == "latest" ]; then
        echo "Latest version will be installed"
        echo "acryl-datahub[${all_plugins}]" > "$req_file"
    else
        echo "acryl-datahub[${all_plugins}]==$datahub_version" > "$req_file"
    fi
    if [ ! -d "$venv_dir" ]; then
        echo "venv doesn't exist.. minting.."
        #注意这里,你就发现了是创建新的venv环境并使用,如果你想使用pip,这个source直接写成上面的venv你的路径 python3-m 这一行注释
        python3 -m venv $venv_dir
        source "$venv_dir/bin/activate"
        pip install --upgrade pip wheel setuptools
        pip install -r $req_file
    else
        source "$venv_dir/bin/activate"
        if [ "$datahub_version" == "latest" ]; then
            # in case we are installing latest, we want to always re-install in case latest has changed
            pip install --upgrade -r $req_file
        fi
    fi
    rm $req_file
    echo "Elapsed seconds = $SECONDS"
}

结语

上面脚本是基于acryl-executor-0.0.3.1和0.0.2版本不一样,但是脚本内容意思一样,也就是不删除venv环境一个更新,修改方式可以和我上面的一样

你可能感兴趣的:(datahub,python,bash)