یک ابزار مناسب برای انتقال دادهها از یک منبع به یک ذخیره ساز داده جهت نگهداری و پردازش جریان داده Apache Flume می باشد.
flume توانایی انتقال دادهها به صورت stream و log را از منابع مختلف مثل kafka , Local Disk , HTTP , SysLog و انواع دیگر منابع تولید دیتا را دارد.
اینجا یک مثال کاربردی و ساده برای انتقال event های تولید شده بر روی یک دیسک را به محیط HDFS را بررسی می کنیم.
ابتدا اجزای اصلی را تعیین می کنیم: منبع تولید داده (source) ، نوع ارتباط (channel) ، محل ذخیره سازی (sink)
agent.sources = iot-log
agent.sinks = hdfs-data
agent.channels = ch1
agent.channels.ch1.type = memory
سپس ارتباط مابین منبع و ذخیره ساز:
agent.sources.iot-log.channels = ch1
agent.sinks.hdfs-data.channel = ch1
مشخصات منبع. spooldir نام یکی از انواع source در flume است که فایلهای ایجاد شده در یک مسیر حاص را ارسال می کند. flieHeader برای اینکه مسیر اصلی فایل هم انتقال داده شود.
agent.sources.iot-log.type = spooldir
agent.sources.iot-log.spoolDir = /log/event/spool/
agent.sources.iot-log.fileHeader = true
پارامترهای محل انتقال و ذخیره داده ها. DataStream تغییری در نوع داده ایجاد نمیکند و فقط جریان داده دریافتی را ذخیره میکند.
agent.sinks.hdfs-data.type = hdfs
agent.sinks.hdfs-data.hdfs.fileType = DataStream
agent.sinks.hdfs-data.hdfs.path = /flume/event/iot/
هم اکنون این تنظیمات را در یک فایل مانند iot-data-stream.conf ذخیره و با دستور زیر بر روی سرور که flume نصب شده اجرا میکنیم
flume@hell:~# flume-ng agent -n agent -c conf -f /home/iot-data-stream.conf
هر فایل جدیدی که در مسیر /log/event/spool/ ایجاد گردد به محیط HDFS و در مسیر flume/event/iot/ منتقل میشود.
برای توضیحات کامل در مورد تمام پارامترها به http://flume.apache.org/FlumeUserGuide.html مراجعه کنید.