زمان تخمینی مطالعه:‌ 6 دقیقه

برنامه نویسی با RDD


به کمک یک مثال می خواهیم actions ها و transformations های RDD را پیاده سازی کنیم.

مثال:

یک مثال "تعداد کلمات" را در نظر بگیرید : به این صورت که هرکلمه ای که در داکیومنت اضافه می شود شمرده می شود.

فرض کنید متن زیر را به عنوان ورودی در home directory تحت نام input.txt ذخیره می کنیم.

Input.txt : input file.

People are not as beautiful as they look,
as they walk or as they talk.
They are only as beautiful as they love,
as they care as they share.

برای انجام این تمرین مراحل زیر را انجام دهید.

Open-Spark-Shell :

برای این که فضای پوسته اسپارک را باز کنیم از دستور استفاده می کنیم.

معمولا، اسپارک با اسکالا ساخته می شود، بنابراین برنامه اسپارک روی محیط اسکالا اجرا می شود.

$ spark-shell

اگر پوسته ( shell ) اسپارک به درستی باز شود، پیامی مانند پیام زیر مشاهده می کنید.

به خط آخر خروجی دقت کنید :

"Spark Context available as SC" به این معنی که محفظه ی اسپارک به طور خودکار شی context اسپارک را با نام SC می سازد. قبل از شروع مرحله اول برنامه، شی SparkContext باید ساخته شود.

خروجی

Spark assembly has been built with Hive, including Datanucleus jars on classpath
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
15/06/04 15:25:22 INFO SecurityManager: Changing view acls to: hadoop
15/06/04 15:25:22 INFO SecurityManager: Changing modify acls to: hadoop
15/06/04 15:25:22 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(hadoop); users with modify permissions: Set(hadoop)
15/06/04 15:25:22 INFO HttpServer: Starting HTTP Server
15/06/04 15:25:23 INFO Utils: Successfully started service 'HTTP class server' on port 43292.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 1.2.0
/_/
Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_71)
Type in expressions to have them evaluated.
Spark context available as sc
scala>

Create on RDD ( ساخت RDD ) :

قدم اول این است که باید با Spark-Scala API فایل ورودی را بخوانیم و RDD را بسازیم.

دستور زیر برای خواندن فایل از محل ( location ) گرفته شده به کار می رود.

دراین جا RDD جدید تحت نام inputfile ساخته می شود. رشته گرفته شده در آرگومان textFile(“”) یک absolute Path برای ورودی است. بنابراین وقتی فقط اسم یک فایل گرفته می شود یعنی فایل در همین مکان هست که اسکالا هست.

scala> val inputfile = sc.textFile("input.txt")

اجرای transformation برنامه "تعداد کلمات"

هدف ما نگهداشتن تعداد کلمات روی فایل است، اول یک flat map برای جدا کردن هر خط به کلمات نیاز داریم : (flatMap(line=>line.split(“”)))

بعد، هرکلمه را کلیدی حساب می کنیم که مقدار آن "1" است ( <key,value>= <word,1> )، با استفاده از تابع ( map(word=>(word,1)) )

در آخر، تعداد کلیدها را با تطبیق کلیدهای شبیه هم کاهش می دهیم ( reduceByKey(- + -) )

برای پیاده سازی منطق برنامه "تعداد کلمات" دستورات زیر را ببینید. بعد از اجرای این دستورات شما خروجی مشاهده نخواهید کرد، چون شما هیچ Actions ای را صدا نکرده اید بلکه یک transformation صدا کرده اید.

یا باید به RDD جدید اشاره کنید یا به اسپارک بگویید با داده جدید گرفته شده چکار کند؟

Scala > Val Counts = inputfile.flatMap(line=>line.split(“”)).map(word=>(word,1)).reduceByKey(- + -);

RDD جدید ( Current RDD ) :

اگر حین کار با RDD خواستید اطلاعات بیش تری از آن بدانید از دستور زیر استفاده نمایید، این دستور توضیحاتی درباره RDD می دهد همچنین اطلاعاتی درباره وابستگی هایش ( dependencies ) برای خطایابی به دست می آورید.

scala> counts.toDebugString

Caching The Transfrmations :

شما می توانید RDD را با استفاده از توابع Persist() یا Cache() ثابت( Persist ) کنید.

بار اول این به عنوان Action محاسبه می شود که می تواند نگه داشته شود در حافظه روی یک گره (node).

برای ذخیره نتایج میانی در حافظه از دستور زیر استفاده نمایید :

Scala > caunts.cashe()

Applying The Action :

اعمال یک Action، مثل ذخیره تمام نتایج transformations روی یک فایل است.آرگومان رشته ای برای تابع save AsTextFile(“”) یک مسیر مطلق ( absolute ) روی فولدر خروجی است.

برای ذخیره نتایج از دستور زیر استفاده کنید. در این مثال فولدر خروجی همین مکان فعلی است.

Scala > counts.saveAsTextFile(“output”)

چک کردن خروجی ( checking the output ) :

یک ترمینال دیگر باز کنید و به home directory بروید ( جایی که اسپارک در آن یک ترمینال اجرا می شود. )

از دستور زیر برای چک کردن خروجی استفاده کنید :

[ hadoop @localhost ~ ] $cd output/
[ hadoop @localhost output ]  $ls -1
part-00000
part-00001

برای دیدن خروجی part-00000 از دستور زیر استفاده کنید :

[hadoop@localhost output]$ cat part-00000

خروجی

(people,1)
(are,2)
(not,1)
(as,8)
(beautiful,2)
(they, 7)
(look,1)

از دستور زیر هم برای دیدن خروجی part-00001 استفاده می کنیم :

[hadoop@localhost output]$ cat part-00001

خروجی

( walk,1 )
( or , 1 )
( talk , 1 )
( only , 1 )
( love , 1 )
( care , 1 )
( share , 1 )

لطفا در راستای هرچه بهتر شدن کیفیت مطالب نظر خود را در رابطه با این سرفصل برای ما ارسال نمایید.