در این فصل به بررسی ابزار آپاچی پیگ (Apache Pig) پرداخته شده است.  

Apache Pig سطح کیفیت پردازش مجموعه عظیم‌داده‌ها (big data) را افزایش می دهد. MapReduce به شما به عنوان برنامه نویس اجازه می‌دهد تا یک تابع نگاشت(Map) را به دنبال یک تابع کاهش(Reduce) مشخص کنید، اما این کار با نحوه جابجایی پردازش داده‌های خود در این الگو که غالباً به چندین مرحله MapReduce نیاز دارد، می‌تواند یک چالش باشد. در مورد Pig، ساختار داده‌ها بسیار غنی‌تر است و به طور معمول به صورت چند منظوره و تو در تو قرار دارند و تغییراتی که می‌توانید بر روی داده‌ها اعمال کنید بسیار قدرتمندتر هستند.

Pig از دو قسمت تشکیل شده است:

  • زبانی که برای بیان جریان داده‌ها به کار می‌رود که به آن Pig Latin گفته می‌شود.
  • محیط اجرا برای اجرای برنامه‌های Pig Latin که در حال حاضر دو محیط برای آن وجود دارد: اجرا محلی در یک JVM و اجرای توزیع‌شده در یک خوشه هدوپ.

یک برنامه Pig Latin از یک سری عملیات یا دگرگونی‌ها تشکیل شده است که برای تولید خروجی روی داده‌های ورودی اعمال می‌شود. به عنوان یک کل، عملیات، یک جریان داده را توصیف می‌کند، که محیط اجرای Pig را به یک نماینده قابل اجرا تبدیل کرده و سپس اجرا می‌کند. در زیر پوشش‌ها، Pig دگرگونی‌ها را به مجموعه‌ای از کارهای MapReduce تبدیل می‌کند، اما شما به عنوان یک برنامه‌نویس اکثراً از این امر آگاهی ندارید که این امکان به شما داده شده است تا بر روی داده‌ها تمرکز کنید تا ماهیت اجرای آن.

Pig یک زبان برنامه‌نویسی برای کاوش در مجموعه عظیم‌داده‌ها است. یک انتقاد از MapReduce این است که چرخه توسعه آن بسیار طولانی است. نوشتن مپ‌ها و ردیوس‌ها، گردآوری و بسته‌بندی کد، ارسال کارها و بازیابی نتایج کار زمانبری است و حتی با Streaming که مرحله کامپایل و بسته‌بندی را حذف می‌کند، تجربه بدست آمده همچنان بغرنج است. نقطه مهم Pig توانایی آن در پردازش ترابایت داده در پاسخ به خطوط دوازده خط Pig Latin است که از این کنسول صادر شده است. Pig از برنامه‌نویس در حال نوشتن کوئری بسیار پشتیبانی می‌کند، زیرا دستورات مختلفی را برای درون‌یابی ساختار داده‌ها در برنامه شما فراهم می‌کند. حتی در حالتی مفیدتر، می‌تواند نمونه‌ای را در زیرمجموعه نماینده داده‌های ورودی شما اجرا کند، بنابراین می‌توانید قبل از باز کردن آن در دیتابیس، وجود خطا در پردازش را مشاهده کنید.

نصب و اجرای Pig

Pig به صورت برنامه سمت کاربر اجرا می‌شود. حتی اگر شما بخواهید آن را بر روی کلاستر هدوپ اجرا کنید، نیاز به نصب هیچ برنامه اضافه‌ای نخواهید داشت: Pig کارها و تعامل با HDFS را بر روی محیط کار شما راه‌اندازی می‌کند. شما می‌توانید نسخه Pig را از سایت رسمی آپاچی به نشانی http://pig.apache.org/releases.html دریافت نمایید. شما همچنین به JAVA_HOME نیاز دارید. از طریق pig –help می‌توانید دستورالعمل نصب آن را دریافت نمایید.

 

نوع اجرا

Pig دو نوع اجرا دارد: حالت عمومی و حالت مپ‌ردیوس. در حالت عمومی Pig بر روی تک JVM اجرا می‌شود و دسترسی به فایل سیستم عمومی دارد. این حالت فقط برای مجموعه داده‌های کوچک قابل استفاده است. حالت مپ‌ردیوس Pig کوئری‌ها را در مپ‌رپدیوس ترجمه می‌کند و آن‌ها را بر روی کلاستر Hadoop اجرا می‌کند. این حالت برای مجموعه داده‌های بزرگ مورد استفاده قرار می‌گیرد. برای استفاده از حالت مپ‌ردیوس ابتدا باید از مطابقت نسخه Pig و Hadoop با یکدیگر مطمئن شد.

اجرای برنامه‌های Pig

سه راه برای اجرای برنامه‌های Pig وجود دارد که همه آنها هم در حالت عمومی و هم در حالت MapReduce کاربرد دارند.

  • Script

 Pigمی‌تواند یک فایل اسکریپ که شامل دستورهای Pig باشد را اجرا نماید.

  • Grunt

گرنت یک پوسته تعاملی برای اجرای دستورات Pig است.

  • Embedded

شما می‌توانید برنامه‌های Pig را با استفاده از کلاس PigServer با استفاده از جاوا اجرا کنید.

Pig Latin

این بخش به توضیح سیتتکس و سمنتیک زبان برنامه‌نویسی Pig Latin می‌پردازد. این به این معنی نیست که منبع کاملی را به شما ارائه دهد ولی فهم خوبی از ساختار Pig Latin به شما می‌دهد.

ساختار

یک برنامه Pig Latin شامل مجموعه‌ای از جملات می‌باشد. یک جمله می‌تواند به عنوان یک عملیات یا یک دستور به کار رفته شود. جمله‌ها معمولا با یک نقطه ویرگول خاتمه پیدا می‌کنند.

جملات

با اجرای هر برنامه Pig Latin هر جمله به نوبه خود اجرا و تجزیه می‌شود. اگر خطاهای سینتکس یا سایر مشکلات (سمنتیکی) وجود داشته باشد، مفسر برنامه Pig Latin متوقف شده و یک پیام خطا را نشان می‌دهد. مفسر یک برنامه منطقی برای هر عملیات رابطه‌ای می‌سازد که از هسته برنامه Pig Latin تشکیل می‌شود. سپس مفسر به جمله بعدی حرکت می‌کند.

حالات(عبارات)

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

نوع

Pig از نوع بولین و شش نوع عدد برخوردار است: int، long، float، double، biginteger و bigdecimal که با جاوا یکسان هستند. نوع datetime برای ذخیره یک تاریخ و زمان با دقت میلی ثانیه و شامل منطقه زمانی است.

طرح

یک رابطه در Pig ممکن است یک طرح همراه داشته باشد، که زمینه‌ها را در نام‌ها و انواع رابطه ارائه می‌دهد.

توابع

توابع Pig شامل چهار دسته می‌باشند:

Eval function

تابعی که یک یا چند عبارت را به خود اختصاص داده و عبارت دیگری را برگرداند.

Filter function

یک نوع خاص از eval function که یک نتیجه بولین منطقی را برمی‌گرداند.

Load function

تابعی که نحوه بارگذاری داده‌ها در رابطه از حافظه خارجی را مشخص می‌کند.

Store function

تابعی که نحوه ذخیره محتوای یک رابطه با حافظه خارجی را مشخص می‌کند. اغلب، عملکردهای بارگیری و ذخیره‌سازی با همان نوع اجرا می‌شوند.

Macros

Macros راهی برای بسته‌بندی قطعات قابل استفاده مجدد از کد Pig Latin را از درون Pig Latin فراهم می‌کند.