فصل پانزدهم کتاب به معرفی ابزار آپاچی اسکوپ (Apache Sqoop) می‌پردازد.

یکی از نقاط قوت مهم پلتفرم هدوپ، قابلیت کار با فرم‌های مختلف داده می‌باشد. در بسیاری از موارد داده‌های باارزشی در سازمان در منابع داده ساختاریافته نظیر سیستم‌های مدیریت پایگاه داده رابطه‌ای (RDBMS) ذخیره شده است. آپاچی اسکوپ یک ابزار متن باز است که به کاربران اجازه استخراج داده‌ها از منبع داده ساختاریافته و وارد کردن آن به هدوپ جهت پردازش‌های بیشتر را می‌دهد. این پردازش می‌تواند توسط MapReduce یا ابزارهای سطح بالاتر دیگر نظیر Hive انجام بگیرد. حتی می‌توان با استفاده از اسکوپ داده‌ها را از پایگاه داده به HBase منتقل نمود. در نهایت و پس از در دسترس قرار گرفتن نتایج تحلیل، اسکوپ می‌تواند این نتایج را دوباره در پایگاه داده مورد نظر قرار دهد. این فصل از کتاب مروری بر نحوه کارکرد اسکوپ و چگونگی به کارگیری آن در جریان پردازش داده ارائه می‌نماید.

فایل و مستندات و دستورالعمل‌های مربوط به کامپایل پروژه در Apache Software Foundation  قابل دریافت می‌باشد.

sqoop 2 بازنویسی sqoop می‌باشد که هدف از آن فائق آمدن بر محدودیت‌های معماری موجود در sqoop 1 بوده است. اسکوپ به صورت مجموعه‌ای از ابزارها و دستورات سازماندهی شده است:

کانکتورهای اسکوپ:

اسکوپ یک چارچوب تعمیم‌یافته دارد که اجازه import و export کردن داده‌ها به هر سیستم ذخیره‌سازی خارجی که قابلیت‌های انتقال داده به صورت bulk را داشته باشد می‌دهد. یک کانکتور اسکوپ جزئی ماژولار است که از این چارچوب برای import و export کردن داده استفاده می‌نماید و با حوزه وسیعی از پایگاه‌های داده از جمله SQL Server ،PostgreSQL ،Oracle ،MySQL ،DB2 و Netezza کار می‌کند. همچنین یک کانکتور JDBC برای اتصال به هر پایگاه داده‌ای که از پروتکل JDBC جاوا پشتیبانی می‌کند وجود دارد. علاوه بر کانکتورهای built-in، کانکتورهای third party برای منابع داده از انبارداده سازمان تا پایگاه داده NoSQL وجود دارد که باید جداگانه دانلود و اضافه شود.

ابزار import در اسکوپ، یک MapReduce job را اجرا می‌کند که به طور مثال به پایگاه داده MySQL متصل می‌شود و جدول مورد نظر را می‌خواند. به طور پیش‌فرض از 4 تسک نگاشت به طور موازی برای افزایش سرعت فرآیند وارد کردن داده‌ها استفاده می‌شود. هر تسک نتایج وارد شده را در یک فایل جداگانه در یک دایرکتوری مشترک می‌نویسد. این Job با استفاده اسکوپ از InputFormat آغاز شده و می‌تواند بخش‌های مختلف جدول را از طریق JDBC بخواند.

فایل‌های با فرمت متن و باینری:

اسکوپ قابلیت وارد کردن داده‌ها به چند فرمت متفاوت را دارد. فایل‌های متنی یک بازنمایی خوانا و مستقل از پلتفرم را به ساده‌ترین ساختار ارائه می‌دهد.

ایجاد کد:

اسکوپ علاوه بر نوشتن محتوای جدول پایگاه داده در HDFS، همچنین فایل سورس کد جاوا (Widgets.java) را که در دایرکتوری محلی نوشته شده ارائه می‌دهد.

چگونگی وارد کردن داده‌ها:

شکل 1 چگونگی تعامل اسکوپ با پایگاه داده مبدأ و هدوپ را نشان می‌دهد. متدهای سریال کردن که اینترفیس DBWritable را شکل می‌دهند، تعامل میان کلاس Widget با JDBC را ممکن می‌سازند.

شکل 1- فرآیند وارد کردن داده توسط اسکوپ

از طریق API جاوا (Java Database Connectivity)، پیش از آنکه وارد کردن داده آغاز شود، اسکوپ به بررسی جدول مورد نظر می‌پردازد و لیستی از انواع داده (به طور مثال در SQL : VARCHAR، INTEGER و ...) را ارائه می‌دهد. سپس این انواع داده به انواع داده در جاوا (String، Integer و ...) که در اپلیکیشن‌های MapReduce مورد استفاده قرار می‌گیرند نگاشت می‌شوند. تولید کننده کد اسکوپ، این اطلاعات را برای ساخت یک کلاس مختص جدول جهت نگهداری رکورد استخراج شده استفاده می‌نماید.

خواندن جدول نوعاً از طریق یک کوئری ساده (SELECT col1 FROM tablename) انجام می‌گیرد، اما اغلب عملکرد بهتر از طریق تقسیم کوئری میان چندین نود به دست می‌آید که با استفاده از splitting column انجام می‌پذیرد.

همچنین اسکوپ می‌تواند یک زیرمجموعه از ستون‌های جدول را با شرط WHERE وارد نماید. سایر موارد مربوط به import کردن داده‌ها نظیر حفظ پیوستگی داده‌ها، وارد کردن افزایشی داده‌ها و سنکرون‌سازی HDFS با داده‌های ذخیره شده در پایگاه داده از دیگر مباحثی است که در این بخش مورد بررسی قرار گرفته است.

کار کردن با داده‌ی وارد شده در HDFS با استفاده از پردازش MapReduce و انجام تجزیه و تحلیل‌های مختلف با استفاده از سیستمی مانند Hive برای انجام عملیات رابطه‌ای در بخش‌های دیگر این فصل پوشش داده شده‌اند.

هایو و اسکوپ به همراه یکدیگر می‌توانند ابزاری قدرتمند برای تجزیه و تحلیل را شکل دهند.

وارد کردن اشیاء بزرگ (Large Objects):

اکثر پایگاه‌های داده قابلیت ذخیره مقادیر زیادی از داده را در یک فیلد دارند و بسته به اینکه داده‌ها به صورت باینری یا متنی باشد، با ستون CLOB یا BLOB در جدول آن را مشخص می‌نمایند. اغلب این جداول همانطور که در شکل 2 نشان داده شده است، بر روی دیسک قرار گرفته‌اند.

شکل 2- جداول به طور معمول آرایه‌ای از سطرها با تمامی ستون‌های ذخیره شده در آن سطر هستند

اسکن کردن سطرها برای تعیین تطابق با شرط یک کوئری مشخص، عموماً شامل خواندن همه ستون‌های یک سطر از دیسک می‌باشد که اگر اشیاء بزرگ به صورت inline ذخیره شده بودند، اثر منفی بر روی عملکرد می‌گذاشت. بنابراین این اشیاء اغلب به صورت خارج از سطرهای خود مطابق شکل 3 ذخیره می‌شوند و دسترسی به آن‌ها نیازمند “opening” آن از طریق رفرنس داخل سطر می‌باشد.

شکل 3- اشیاء بزرگ معمولاً در محیط مجزایی ذخیره می‌شوند و در سطر اصلی به آنها ارجاع می‌شود

 بنابراین دشواری کار با اشیاء بزرگ در پایگاه داده، دلیل مناسبی است که سیستمی مانند هدوپ که برای ذخیره‌سازی و پردازش اشیاء داده‌ای بزرگ و پیچیده بسیار مناسب‌تر است، مخزنی ایده‌آل برای این اطلاعات قرار بگیرد و اسکوپ می‌تواند آن‌ها را از جداول استخراج کرده و در HDFS ذخیره نماید.

Export کردن داده‌ها:

در export کردن، HDFS به عنوان مبدأ در نظر گرفته می‌شود و داده‌ها و نتایج حاصل از آنالیز انجام شده توسط هایو جهت به کارگیری توسط ابزارهای دیگر export می‌شوند. پیش از export کردن داده‌ها، لازم است به طور مثال در MySQL جدولی که ستون‌های هدف با همان ترتیب و انواع مناسب SQL را داشته باشد ایجاد گردد. شکل 4 چگونگی این فرآیند را نشان می‌دهد.

شکل 4- Export به صورت موازی و با استفاده از MapReduce انجام می‌شود

جهت مطالعه و اطلاعات بیشتر در خصوص اسکوپ می‌توانید به Apache Sqoop Cookbook مراجعه نمایید.