ورود

View Full Version : SequenceFile



starparham
جمعه 05 خرداد 1396, 18:25 عصر
سلام معنی دقیق SequenceFile را کسی میدونه ؟ و این که چ کاربردهای داره؟؟

vahid-p
شنبه 06 خرداد 1396, 00:57 صبح
تو جاوا استاندارد همچین چیزی نشنیدم

-سیّد-
دوشنبه 08 خرداد 1396, 23:59 عصر
سلام معنی دقیق SequenceFile را کسی میدونه ؟ و این که چ کاربردهای داره؟؟

SequenceFile یک ساختار ذخیره‌سازی داده توی فایل هست که متعلق به hadoop هست (برای همین اون برادرمون چیزی درباره‌اش توی جاوا استاندارد نشنیده! چون مال Java SE نیست، بلکه مال یه کتابخونهٔ شخص ثالث هست).
خیلی هم چیز پیچیده‌ای نیست، توش یه تعداد (معمولاً تعداد زیاد) از کلید-مقدار (Key-Value) ذخیره می‌شه. اولش یه header داره که توش مشخص می‌کنه نوع کلید و مقدارش چیه، و از چه فشرده‌سازی‌ای استفاده می‌کنه. بعدش هم همینجوری پشت سر هم دوتایی‌های کلید-مقدار رو ردیف می‌کنه.
کاربرد اصلیش هم توی خود چارچوب hadoop هست. مثلاً وقتی می‌خواین از یه map-reduce خروجی توی فایل بگیرین، یه گزینه اینه که از TextOutputFormat استفاده کنین که در نتیجه خروجی به صورت خط به خط توی فایل نوشته می‌شه. این روش خیلی ساده هست، فقط مشکلش اینه که همه جور داده‌ای رو نمی‌شه باهاش خروجی گرفت. مثلاً اگه توی دادهٔ شما کاراکتر newline (یعنی n\) وجود داشته باشه، کارتون خراب می‌شه، چون توی TextOutputFormat فرض بر اینه که هر رکورد توی یه خط قرار می‌گیره، ولی اینجا یه رکورد شما توی ۲ خط قرار گرفته. یا مثلاً فرض توی TextOutputFormat بر اینه که دادهٔ شما متنی هست، بنابراین اگه دادهٔ binary بخواین خروجی بگیرین دیگه نمی‌تونین از TextOutputFormat استفاده کنین. راه حل جایگزینش چیه؟ احسنتم! استفاده از SequenceFileOutputFormat. توی این نوع ذخیره‌سازی، هر جور داده‌ای که دلتون بخواد رو می‌تونین ذخیره کنین، و کاملاً دادهٔ binary رو پشتیبانی می‌کنه. تازه! نون اضافه هم بهتون می‌ده! می‌تونین علاوه بر این که یه مشت مقدار (value) رو پشت هم ذخیره کنین، به هر کدوم یه کلید (key) هم اختصاص بدین. مثلاً کاربردش چیه؟ وقتی که شما از یه جدول HBase می‌خواین export بگیرین، خروجی رو در قالب SequenceFile ذخیره می‌کنه، که کلیدش هست row key شما (در قالب ImmutableBytesWritable که در واقع همون []byte خودمون هست، به یه زبون دیگه!)، و مقدارش هست دادهٔ توی اون سطر (در قالب Result). اگه دوست داشته باشین براتون فشرده هم می‌کنه (مثلاً با GZip یا Snappy یا Lz4 که شناخته‌شده‌ترین قالب‌های فشرده‌سازی توی hadoop هستن).

در نهایت هم بگم که سؤالی که پرسیدین متعلق به دنیای big data هست و جاش اینجا نیست! خوب بود توی انجمن مربوطه می‌پرسیدید.

starparham
سه شنبه 09 خرداد 1396, 18:15 عصر
ممنون از پاسختون

starparham
سه شنبه 09 خرداد 1396, 18:17 عصر
SequenceFile یک ساختار ذخیره‌سازی داده توی فایل هست که متعلق به hadoop هست (برای همین اون برادرمون چیزی درباره‌اش توی جاوا استاندارد نشنیده! چون مال Java SE نیست، بلکه مال یه کتابخونهٔ شخص ثالث هست).
خیلی هم چیز پیچیده‌ای نیست، توش یه تعداد (معمولاً تعداد زیاد) از کلید-مقدار (Key-Value) ذخیره می‌شه. اولش یه header داره که توش مشخص می‌کنه نوع کلید و مقدارش چیه، و از چه فشرده‌سازی‌ای استفاده می‌کنه. بعدش هم همینجوری پشت سر هم دوتایی‌های کلید-مقدار رو ردیف می‌کنه.
کاربرد اصلیش هم توی خود چارچوب hadoop هست. مثلاً وقتی می‌خواین از یه map-reduce خروجی توی فایل بگیرین، یه گزینه اینه که از TextOutputFormat استفاده کنین که در نتیجه خروجی به صورت خط به خط توی فایل نوشته می‌شه. این روش خیلی ساده هست، فقط مشکلش اینه که همه جور داده‌ای رو نمی‌شه باهاش خروجی گرفت. مثلاً اگه توی دادهٔ شما کاراکتر newline (یعنی n\) وجود داشته باشه، کارتون خراب می‌شه، چون توی TextOutputFormat فرض بر اینه که هر رکورد توی یه خط قرار می‌گیره، ولی اینجا یه رکورد شما توی ۲ خط قرار گرفته. یا مثلاً فرض توی TextOutputFormat بر اینه که دادهٔ شما متنی هست، بنابراین اگه دادهٔ binary بخواین خروجی بگیرین دیگه نمی‌تونین از TextOutputFormat استفاده کنین. راه حل جایگزینش چیه؟ احسنتم! استفاده از SequenceFileOutputFormat. توی این نوع ذخیره‌سازی، هر جور داده‌ای که دلتون بخواد رو می‌تونین ذخیره کنین، و کاملاً دادهٔ binary رو پشتیبانی می‌کنه. تازه! نون اضافه هم بهتون می‌ده! می‌تونین علاوه بر این که یه مشت مقدار (value) رو پشت هم ذخیره کنین، به هر کدوم یه کلید (key) هم اختصاص بدین. مثلاً کاربردش چیه؟ وقتی که شما از یه جدول HBase می‌خواین export بگیرین، خروجی رو در قالب SequenceFile ذخیره می‌کنه، که کلیدش هست row key شما (در قالب ImmutableBytesWritable که در واقع همون []byte خودمون هست، به یه زبون دیگه!)، و مقدارش هست دادهٔ توی اون سطر (در قالب Result). اگه دوست داشته باشین براتون فشرده هم می‌کنه (مثلاً با GZip یا Snappy یا Lz4 که شناخته‌شده‌ترین قالب‌های فشرده‌سازی توی hadoop هستن).

در نهایت هم بگم که سؤالی که پرسیدین متعلق به دنیای big data هست و جاش اینجا نیست! خوب بود توی انجمن مربوطه می‌پرسیدید.



ممنون از پاسختون