Может ли gsutil создать записи psudeo-directory, необходимые для ускорения gcsfuse? - PullRequest
0 голосов
/ 10 января 2020

Хотя Google Cloud Storage является хранилищем плоских объектов, для которого не нужны записи каталога, добавление заполнителей каталога psuedo (пустые записи с именами, заканчивающимися на /) делает gcsfuse намного быстрее . Вы можете не указывать параметр gcsfuse --implicit-dirs и просматривать каталоги GCS с очень работоспособной производительностью, чего нельзя сказать о заполнителях.

Q. Есть ли способ выдать команду gsutil наподобие gsutil cp -r your_directory gs://your-bucket/, которая создаст заполнители каталогов при загрузке файлов?

Альтернативой является вызов API GCS, но gsutil имеет много полезных функций, включая параллельную загрузку и повторную обработку.

Пример

Создание локального дерева:

$ mkdir -p your_directory/subdir
$ echo hi > your_directory/hi.txt
$ echo there > your_directory/subdir/there.txt

$ ls -lR your_directory
total 8
-rw-r--r--  1 jerry  staff   3 Jan 21 17:24 hi.txt
drwxr-xr-x  3 jerry  staff  96 Jan 21 17:24 subdir/

your_directory/subdir:
total 8
-rw-r--r--  1 jerry  staff  6 Jan 21 17:24 there.txt

gsutil скопировать его в GCS :

$ gsutil cp -r your_directory gs://your-bucket/
Copying file://your_directory/hi.txt [Content-Type=text/plain]...
Copying file://your_directory/subdir/there.txt [Content-Type=text/plain]...
/ [2 files][    9.0 B/    9.0 B]
Operation completed over 2 objects/9.0 B.

$ gsutil ls -lr gs://your-bucket/your_directory
gs://your-bucket/your_directory/:
         3  2020-01-22T01:25:38Z  gs://your-bucket/your_directory/hi.txt

gs://your-bucket/your_directory/subdir/:
         6  2020-01-22T01:25:38Z  gs://your-bucket/your_directory/subdir/there.txt
TOTAL: 2 objects, 9 bytes (9 B)

Обратите внимание, что gsutil создал только 2 объекта (BLOB-объектов) - текстовые файлы. Он не создавал объекты-заполнители каталогов your_directory/ или your_directory/subdir/.

В gcsfuse your-bucket your-bucket mount:

$ find your_directory
find: your_directory: No such file or directory

В gcsfuse --implicit-dirs your-bucket your-bucket mount:

$ find your_directory
your_directory
your_directory/hi.txt
your_directory/subdir
your_directory/subdir/there.txt

медленно.

Возвращаясь к монтированию gcsfuse your-bucket your-bucket, мы можем сделать так, чтобы текстовые файлы отображались путем создания заполнителей каталога:

$ mkdir your_directory
$ ls your_directory
hi.txt

$ mkdir your_directory/subdir
$ ls your_directory
hi.txt  subdir/

$ ls your_directory/subdir/
there.txt

1 Ответ

0 голосов
/ 20 января 2020

Если я правильно понял, и вы хотите загружать файлы при создании файлов, которые кажутся пустыми (которые на заднем плане являются просто пустыми файлами с символом "/" в конце пути), gsutil cp -r your_directory gs://your-bucket/ добивается цели.

Для справки: как подкаталоги работают в GCS и команда gsutil cp

...