首页 > 解决方案 > 我可以在并行窗口中为当前也在运行作业的同一台客户机执行 vagrant ssh 吗?无论如何它会干扰当前的工作吗?

问题描述

作为我家庭作业的一部分,我需要将大型数据文件加载到两个 MySQL 表中,使用 Python 解析,在我的客户机上通过 Vagrant SSH 调用。

然后我还需要在两张表中的一张上运行 Sqoop 作业,所以现在我已经成功加载其中一张表并运行 Python 脚本来加载第二张表,这已经超过 3 小时了仍在加载。

我想知道我是否可以在已经加载的桌子上完成我的 Sqoop 工作,而不是现在盯着黑屏将近 4 个小时。

我的问题是:

  1. 有没有其他方法可以在不进行 Vagrant 重新加载的情况下将 Vagrant SSH 连接到同一台机器(因为--reload最终会关闭我的虚拟机,从而杀死所有当前在我的客人上运行的作业)。

  2. 如果有,那么假设我像往常一样打开一个并行窗口登录来宾机器并开始在已经加载的第一个表上处理我的 Sqoop 作业;它会以任何方式影响我目前仍在加载的第二张表的工作吗?或者它会丢失数据,因为我不能冒险重新做它,因为它非常大并且非常耗时。

  3. 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()

标签: pythonmysqllinuxvagrantsqoop

解决方案


我不知道您的登录脚本中有什么,也不清楚 --reload 标志是什么,但通常您可以在同一台机器上拥有多个 ssh 会话。只需打开另一个终端并 ssh 进入 VM。

但是,就您而言,这可能不是一个好主意。我怀疑第二个表需要很长时间才能加载,因为您的数据库正在重新索引或者它正在等待释放锁。

除非您正在加载数百兆,否则我建议您首先检查锁并查看哪些查询未决。

即使您正在加载非常大的数据集,并且您的脚本所需的表没有任何限制,您也只会堆积在一台已经非常繁重的机器上......


推荐阅读