datahub读取数据的位置
datahub全部启动正常后有9个项目,在datahub-actions中是做数据读取等一系列操作的
在读取数据时候这个镜像内部有python3.9.9所以个人建议在使用python时候版本最好是3.9.9以上
开始正文actions容器内部查看
1.python位置
/usr/local/lib/python3.9/site-packages/datahub
注意看这些包你就会发现和你的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内
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 <task-id> <datahub-version> <plugins-required> <tmp-dir> <recipe_file> <report_file>
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环境一个更新,修改方式可以和我上面的一样