ابزار و کتابخانه هااخبارمعرفی سایت

مقدمه ای بر پیکان (Apache Arrow) : تحلیل درون حافظه داده های ستونی

پروژه متن باز پیکان ، علیرغم نوپا بودنش در اکو سیستم آپاچی، در حال تبدیل شدن به یک استاندارد در حوزه پردازش داده و ایجاد یک بستر مناسب برای تعامل بین فناوریهای مختلف کلان داده است.

توسعه گران ارشد ۱۳ پروژه متن باز اصلی دنیای کلان داده، یک تیم مشترک برای ایجاد و توسعه پیکان ، شکل داده اند و سایر شرکتها و پروژه ها هم در حال تطبیق دادن خود با آن هستند. این ۱۳ تا پروژه عبارتند از :

  • Calcite
  • Cassandra
  • Drill
  • Hadoop
  • HBase
  • Ibis
  • Impala
  • Kudu
  • Pandas
  • Parquet
  • Phoenix
  • Spark
  • Storm

تحلیل درون حافظه ای داده های ستونی

پروژه پیکان، برآمده از چهار گرایش و نیاز جدید مهندسی داده امروز دنیاست :

  • داده های ستونی : قبلاً در مقاله Kudu درباره مفهوم داده های ستونی توضیح داده شد اما به طور خلاصه ،امروزه فناوریهای کلان داده، ستونی شده اند. یعنی به جای ذخیره سطری داده ها ، آنها را به صورت ستونی ذخیره می کنند. با اینکار ، فیلترگذاری و جستجوی داده ها بسیار سریعتر و بهینه تر صورت میگیرد. مثال زیر گویای این مطلب است.

arrow1البته پروژه Apache Parquet که مخصوص این نوع از ذخیره سازی ، ابداع شده است به رشد این گرایش کمک بزرگی کرد.

  • پردازش درون حافظه ای : اسپارک محبوبیت و رواج امروز خود را مدیون پردازش های درون حافظه ایست که باعث افزایش کارآیی قابل ملاحظه سیستم های نوین اطلاعاتی امروزی شده است .
  • داده های پیچیده و ساختارهای پویا : داده های دنیای واقعی با ساختار سلسله مراتبی و تودرتو راحت نمایش داده می شوند که رشد قالب JSON و بانکهای اطلاعاتی سندگرا مانند مانگو دی بی، نشانگر این نیاز کسب و کار امروزی است . سیستم های مدرن تحلیلی معاصر باید بتواند این نوع از داده ها را به صورت پیش فرض پشتیبانی کند.
  • نیاز به تعامل و برقراری ارتباط بین فناوریهای مختلف حوزه کلان داده  : در حال حاضر، فناوریها و کتابخانه های مختلف حوزه کلان داده، هر کدام روشی را برای ذخیره و پردازش داده ها ابداع کرده اند و برای برقراری ارتباط بین آنها و استفاده از داده ها به صورت مشترک، نیاز به فرآیندهای مختلف تبدیل داده داریم که هم زمان بر است و هم توسعه سامانه ها را با مشکل مواجه می کند. Apache Parquet ، Apache Avro تلاشهایی برای رفع این مشکل و استاندارد سازی تبادل داده هاست .

اغلب سیستم های پردازش داده معاصر، یک یا حداکثر دو مورد از موارد سه گانه فوق را دارا هستندو پیکان ، تلاشی است برای ساخت سامانه هایی با پشتیبانی از تمام نیازهای نوین مورد اشاره به صورت استاندارد و متن باز.

مولفه های تشکیل دهنده پیکان

پیکان، مجموعه ای مولفه ها و فناوریهاییست که موتورهای اجرایی کلان داده (مانند اسپارک، توزیع و تجمیع) و کتابخانه های ذخیره ساز داده ها (مانند HDFS) از آنها به عنوان لایه های میانی خود استفاده خواهند کرد . این فناوریها و الگوریتم ها عبارتند از :

  • مجموعه ای از نوع داده های استاندارد شامل نوع داده های SQL و JSON مانند Decimal,Int,BigInt
  • ساختار داده ستونی برای نمایش درون حافظه رکوردهای اطلاعاتی که بر روی نوع داده های استاندارد بنا نهاده شده است.
  • ساختمان داده های رایج مورد نیاز برای کار با داده های ستونی مانند صفها و جداول درهم سازی به صورت بهینه و موثر با سی پی یو های امروزی.
  • IPC از طریق حافظه مشترک ، TCP/IP و RDMA
  • کتابخانه هایی برای خواندن و نوشتن داده های ستونی به زبانهای مختلف
  • الگوریتم های SIMD (یک دستور، چندین منبع داده) و مطابق با رهیافت خط تولید (PipeLine) برای عملیاتی مانند مرتب سازی ، جستجو ، تطبیق الگو و … که به صورت موثر از حافظه و سی پی یو استفاده کند .
  • تکنیکهای فشرده سازی داده های ستونی برای بهینه سازی حافظه .
  • ابزارهایی برای ذخیره موقت داده ها در حافظه های پایدار مانند HDD و SSD

البته نکته مهمی که باید مد نظر داشت این است که پیکان، به تنهایی نه یک موتور پردازش داده مانند اسپارک است و نه یک کتابخانه ذخیره و توزیع داده مانند HDFS بلکه طراحی شده است که به عنوان یک بستر مشترک و استاندارد برای موارد زیر به کار رود :

  1. موتورهای اجرای SQL مانند SparkSQL ، Drill و Impala
  2. سیستم های تحلیل و پردازش داده مانند Pandas و اسپارک
  3. سیستم های پردازش جریان و مدیریت صف مانند کافکا و استرم .
  4. سیستم های ذخیره ساز کلان داده مانند کاساندرا ، HBASE ، Kudu و Parquet

بنابراین پروژه پیکان ، در تقابل و رقابت با هیچ کدام از این سیستم های فوق نیست بلکه سرویس دهنده ای به آنهاست تا کارآیی و اشتراک داده به صورت استاندارد را برای آنها ممکن کند .

arrow2یک مثال عملی

برای آشنایی بیشتر با ماموریت پروژه پیکان، مثال زیر را در نظر بگیرید. اطلاعات تعدادی از کاربران به صورت زیر  در قالب جی سان ذخیره شده است :

people = [
{
name: ‘mary’, age: 30,
places_lived: [
{city: ‘Akron’, state: ‘OH’},
{city: ‘Bath’, state: OH’}
]
},
{
name: ‘mark’, age: 33,
places_lived: [
{city: ‘Lodi’, state: ‘OH’},
{city: ‘Ada’, state: ‘OH’},
{city: ‘Akron’, state: ‘OH}
]
}
]

فقط شهرهای سکونت این افراد را در نظر میگیریم . با ذخیره آرایه ای این مقادیر در پیکان ، فضای ذخیره سازی پشت صحنه ما به صورت زیر خواهد بود :

arrow-f2

با نگاه به ساختار فوق ، موارد زیر را می توانیم در رابطه با این داده ها نتیجه بگیریم :

  1. با توجه به سه آرایه فوق و جستجوی بهینه در آفست ها با مرتبه زمانی  تقریباً ۱ می توان به جستجوی یک شهر خاص پرداخت.
  2. داده های شهرها به صورت پیوسته و در یک آرایه ذخیره شده است . بنابراین برای مقاصد تحلیل و پردازش بسیار بهینه و مفید خواهد بود .

منابع :

  1. https://blog.cloudera.com/blog/2016/02/introducing-apache-arrow-a-fast-interoperable-in-memory-columnar-data-structure-standard/
  2. http://www.dremio.com/blog/apache-arrow/

مجتبی بنائی

دانشجوی دکترای نرم‌افزار دانشگاه تهران (yun.ir/smbanaie)، مدرس دانشگاه و فعال در حوزه توسعه نرم‌افزار و مهندسی داده که تمرکز کاری خود را در چند سال اخیر بر روی مطالعه و تحقیق در حوزه کلان‌داده و زیرساخت‌های پردازش داده و تولید محتوای تخصصی و کاربردی به زبان فارسی و انتشار آنها در سایت مهندسی داده گذاشته است. مدیریت پروژه‌های نرم‌افزاری و طراحی سامانه‌های مقیاس‌پذیر اطلاعاتی از دیگر فعالیتهای صورت گرفته ایشان در چند سال گذشته است.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

جای خالی در معادله زیر را با کی برد انگلیسی وارد کنید : * Time limit is exhausted. Please reload CAPTCHA.

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

دکمه بازگشت به بالا