Как транслировать большой файл на кусочке KubernetesJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Как транслировать большой файл на кусочке Kubernetes

Сообщение Anonymous »

Я хочу создать большой файл (> 200 ГБ) и сохранить его в магазине min.io. Я развертываю свои попытки в веб-приложении на капсуле Kubernetes.
Одна попытка была с модифицированным измененным потоком и библиотекой CSV-WRITER с использованием метода PutObject. Что -то нравится это: < /p>

Код: Выделить всё

const { faker } = require('@faker-js/faker');
const { createObjectCsvStringifier: createCsvStringifier } = require('csv-writer');
const Minio = require('minio');
const { Readable } = require('stream');
const minioClient = new Minio.Client({...});

const csvStringifier = createCsvStringifier({
header: [
{ id: 'userId', title: 'userId' },
{ id: 'username', title: 'username' },
.... ]});
const generateRandomRow = () => ({
userId: faker.database.mongodbObjectId(),
username: faker.person.firstName(),
...});
class csvGenerator extends Readable {
#count = 0;
#headerPushed = false;
#numRows;

constructor(numRows, options) {
super(options);
this.#numRows = numRows;
}

_read(size) {
if (!this.#headerPushed) {
this.push(csvStringifier.getHeaderString());
this.#headerPushed = true;
}

this.push(csvStringifier.stringifyRecords([generateRandomRow()]));
if (++this.#count === this.#numRows) {
this.push(null);
}
}
}
router.options('/BigFileCreation', cors());
router.post('/BigFileCreation', cors(), async (request, response) => {
const NUM_ROWS = parseInt(request.body.numberOfRows, 10);
const NAME_FILE = request.body.nameOfFile;
const BUCKET = request.body.bucket;

response.status(202).json({"Request status": "Reached"});
try {
const requestFile = await minioClient.putObject(BUCKET, NAME_FILE, new csvGenerator(NUM_ROWS, { highWaterMark: 1 }), null, metaData);
console.log(requestFile);
} catch (error) {
console.error(error);
response.status(500).json(error.toString());
}
});

< /code>
Это обрабатывает файлы менее 1 ГБ без проблем, это займет менее 5 минут.  Для создания и загрузки, но когда я прошу файл 2 ГБ или больше моего стручка, просто останавливаюсь, я думаю, я просто получаю статус Oomkilld на своем стручке, и поэтому я не получаю никаких ошибок на журналах.const csvWriter = createCsvWriter({
path: 'StellarDB.csv',
header: [
{ id: 'userId', title: 'userId' },
{ id: 'username', title: 'username' },
{ id: 'lastName', title: 'lastName' },
{ id: 'email', title: 'Email' },
{ id: 'column', title: 'column' },
{ id: 'float', title: 'float' },
{ id: 'jobArea', title: 'jobArea' },
{ id: 'jobTitle', title: 'jobTitle' },
{ id: 'phone', title: 'phone' },
{ id: 'alpha', title: 'alpha' }
]
});
const writeLargeCsvFile = async (NUM_ROWS) => {
let batchSize = 500;
let batch = [];

for (let i = 0; i < NUM_ROWS; i++) {
batch.push(generateRandomRow());

if (batch.length === batchSize || i === NUM_ROWS - 1) {
await csvWriter.writeRecords(batch);
batch = [];
}
}
};

< /code>
После дальнейших исследований я заметил, что, вероятно, проблема была в библиотеке, которую я использовал для CSV, поэтому я перешел на Fast-CSV, и моя последняя попытка была примерно так: < /p>
const { format } = require('fast-csv');
async function generateAndUploadCSV(name, NUM_ROWS, bucketName) {
const pass = new PassThrough();

const uploadPromise = minioClient.putObject(bucketName, name, pass)
.catch(err => {
console.error('Error subiendo objeto:', err);
throw err;
});

const csvStream = format({ headers: [
'userId', 'username', 'lastName', 'email', 'column', 'float', 'jobArea', 'jobTitle', 'phone', 'alpha'
]});
csvStream.pipe(pass);

let i = 0;

function write() {
let ok = true;
while (i < NUM_ROWS && ok) {
i++;
const record = {
userId: i,
username: faker.person.firstName(),
lastName: faker.person.lastName(),
email: faker.internet.email(),
column: faker.database.column(),
float: faker.number.float(3),
jobArea: faker.person.jobArea(),
jobTitle: faker.person.jobTitle(),
phone: faker.phone.imei(),
alpha: faker.string.alpha({ length: { min: 5, max: 10 } }),
};
ok = csvStream.write(record);
if (i < NUM_ROWS) {
csvStream.once('drain', () => setImmediate(write));
} else {
csvStream.end();
}
}
csvStream.on('error', err => {
pass.destroy(err);
});
write();
const objInfo = await uploadPromise;
}
< /code>
Я также назначаю больше ресурсов на моем капсуле (память 8 ГБ и 4 ядра). Но все они ведут себя одинаково, только один файл 1 ГБ и не более. Вернуться, когда я собираюсь использовать его. Это может быть полезно для файлов CSV, но что, если я захочу использовать файлы JSON. Все они работают на капсулах Kubernetes.
Просто добавляя больше информации. Мой сервисный стручок обрабатывается Knatie с файлом YML, аналогичным этим: < /p>
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: transformTesting
spec:
template:
spec:
containers:
- image: .../...:transform-testing-SNAPSHOT
env:
- name: FORCE_NEW_REVISION
value: "true"
Желаю, чтобы кто -то мог указать мне на решение или концепцию, которую я игнорирую.

Подробнее здесь: https://stackoverflow.com/questions/796 ... rnetes-pod
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Сложность в понимании логики проблемы, основанной на кусочке вычислений
    Anonymous » » в форуме C++
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Сложность в понимании логики проблемы, основанной на кусочке вычислений
    Anonymous » » в форуме C++
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Сложность в понимании логики проблемы, основанной на кусочке вычислений
    Anonymous » » в форуме C++
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Поддерживаемые версии Kubernetes для каждой версии JAR клиента Kubernetes
    Anonymous » » в форуме JAVA
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Понимание Kubernetes Watch (kubernetes-client/java api)
    Anonymous » » в форуме JAVA
    0 Ответы
    42 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Javascript»