作为我的家庭作业的一部分,我需要将大型数据文件加载到两个 MySQL 表中,使用 Python 解析,在我的 guest 计算机上通过 Vagrant SSH 调用。
然后我还需要在 2 个表中的一个上运行 Sqoop 作业,所以现在我已经成功加载了一个表并运行 Python 脚本来加载第二个表,它已经超过3 小时后仍在加载。
我想知道我是否可以在已经加载的表上完成我的 Sqoop 作业,而不是现在盯着黑屏将近 4 个小时。
我的问题是:
是否有任何其他方法可以在不执行 Vagrant reload 的情况下将 Vagrant SSH 连接到同一台机器(因为
--reload
最终会关闭我的虚拟机,从而终止我的 guest 上正在运行的所有当前作业).如果有,假设我打开一个并行窗口以像往常一样登录 guest 计算机并开始在已加载的第一个表上处理我的 Sqoop 作业;它会以任何方式影响我目前仍在加载的第二张表的工作吗?还是会丢失数据,因为我不能冒险重新做它,因为它非常大且非常耗时。
python 代码是这样的
~~ def 解析器():
以 open('1950-sample.txt', 'r', encoding='latin_1') 作为输入:
for line in input:
....
插入表格
定义插入():
if (tablename == '1950_psr'):
cursor.execute("INSERT INTO 1950_psr (usaf,wban,obs_da_dt,lati,longi,elev,win_dir,qc_wind_dir, sky,qc_sky,visib,qc_visib,air_temp,qc_air_temp,dew_temp,qc_dew_temp,atm_press,qc_atm_press)VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",(USAF,WBAN,obs_da_dt,lati,longi,elev,win_dir,qc_wind_dir, sky,qc_sky,visib,qc_visib,air_temp,qc_air_temp,dew_temp,qc_dew_temp,atm_press,qc_atm_press))
elif (tablename == '1986_psr'):
cursor.execute("INSERT INTO 1986_psr (usaf,wban,obs_da_dt,lati,longi,elev,win_dir,qc_wind_dir, sky,qc_sky,visib,qc_visib,air_temp,qc_air_temp,dew_temp,qc_dew_temp,atm_press,qc_atm_press)VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",(USAF,WBAN,obs_da_dt,lati,longi,elev,win_dir,qc_wind_dir, sky,qc_sky,visib,qc_visib,air_temp,qc_air_temp,dew_temp,qc_dew_temp,atm_press,qc_atm_press))
解析器()
保存&关闭
conn.commit()
conn.close()
最佳答案
我不知道你的登录脚本里有什么,我也不清楚 --reload 标志是什么,但一般来说你可以在同一台机器上有多个 ssh session 。只需打开另一个终端并通过 ssh 连接到 VM。
但是,对于您的情况,这可能不是一个好主意。我怀疑第二个表需要很长时间才能加载,因为您的数据库正在重建索引或正在等待释放锁。
除非您正在加载数百兆,否则我建议您首先检查锁并查看哪些查询正在等待处理。
即使您正在加载非常大的数据集,并且您的脚本所需的表没有任何限制,您也只会堆积在一台已经负担很重的机器上......
关于python - 我可以在并行窗口中为当前也正在运行作业的同一台 guest 计算机执行 vagrant ssh 吗?会影响现在的工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55307778/