Airflow'da remote folder download edememe

Bazi birtakim workflow'lar icin remote bir makineden bir klasoru airflow'un calistigi makineye indirmem gerekiyor. Olaylar gelisiyor. 

Abi benim konuyla en ufak bir alakam yok.


Ilk hedef SFTPOperator, cunku bu operator ile verilen bir ssh connection ile istenilen dosya remote makineden kopyalanabiliniyor. ANCAK, ben dosalarla tek tek ugrasamam. Cunku cok dosya var ve bana recursive bir operasyon gerekiyor. AMA, arastirdigim kadari ile SFTPOperator'u recursive bir dosya islemini desteklemiyor. Yol ayrimina geliyoruz:

1. Remote makinedeki kopyalancak directory'deki tun dosyalari listeleyip ona gore bir loop icerisinde tek tek indirmek gerekiyor,

2. Remote makineden kopyalayacagim directory'i, host makineye mount etmek. Bu sayede kopyalamaya gerek kalmayacak ve buradaki dosyalari sanki local dosyaymis gibi isleyebilecegiz. 

Birinci yol cok killi yunlu, ic ice birsuru dosyalar var, bunlari manuel olarak recursive bir sekilde indirmek cok zor. Ikinci secenek su sekilde cozulebiliniyor:

echo '{password}' | sshfs -o password_stdin user@remote_makine:/remote_folder lokal_buraya_mount_et

Simdi oncelikle sshfs kurulmasi gerekiyor ama Ubuntu uzerinde bunu yapmak cok kolay.
Ikinci olarak da goruldugu uzere burada paroalyi da komut satirindan vermek durumundayiz ki bu da aslinda cok cok sevimli bir yontem degil ama ne yaparsin hayat boyle.

Cok kritik bir nokta
Eger ki bu mount edilen directory'i, docker container'e mount edecekseniz, yukaridaki yontem ise yaramaz. Buna ek olarak, baska bazi ayarlamalar yapmak gerekli ki, surada anlatilmis

Kisaca /etc/fuse.conf dosyasinda user_allow_other satirini uncomment edip, sshf ile mount ederken de ekstra olarak -o allow_other argumanini pass etmek gerekiyor. 

Hepsi bu.

echo '{password}' | sshfs -o allow_other -o password_stdin user@remote_makine:/remote_folder lokal_buraya_mount_et




Yorumlar

Bu blogdaki popüler yayınlar

Python'da Multithreading ve Multiprocessing

Threat Modeling 1

Encoding / Decoding