مطلب ۷ : آموزش نصب و راه اندازی هدوپ
نصب و اجرای هدوپ بروی یک ماشین به منظور تست و بررسی اولیه، کار بسیار ساده ای می باشد.
هدوپ به سه حالت نصب می شود:
• Standalone
در این حالت هیچ یک از Server Role ها (Daemons) نصب نمی شوند (در قسمت های بعدی به آنها خواهیم پرداخت) و تنها یک JVM وظیفه اجرا را به عهده می گیرد. این حالت برای تست و بررسی اولیه برنامه های نوشته شده در MapReduce کاربرد دارد.
• Pseudo-distributed
در این حالت تمامی Server Role ها (Daemons) بروی یک ماشین نصب می شوند، بنابراین امکان ایجاد یک کلاستر شبیه سازی شده در ابعاد کوچکتر را فراهم می سازد.
• Fully distributed
در این حالت تمامی Server Role ها (Daemons) بروی کلاستری از ماشین ها نصب می شوند. این حالت در محیط های عملیاتی مورد استفاده قرار می گیرد.
برای اجرای هدوپ در یکی از سه حالت ذکر شده می بایست به دو نکته دقت شود: Property های مورد نیاز هر حالت مقداردهی شوند، Server Role های (Daemons) هدوپ Start شوند. در حالت Standalone یا Local، فایل سیستم محلی و MapReduce محلی مورد استفاده قرار می گیرد، درمقابل برای دیگر حالت ها HDFS و Server Role های (Daemons) مربوط به MapReduce شروع به کار می کنند.
پیش نیاز ها:
هدوپ با زبان برنامه نویسی Java نوشته شده است، بنابراین یک نسخه (6 و یا بالاتر) از Java می بایست روی سیستم (های) مورد نظر نصب گردد.
هدوپ روی Unix و Windows نصب و اجرا می شود. Linux تنها بستری است که به منظور نصب و راه اندازی عملیاتی مورد استفاده قرار می گیرد، اما دیگر سیستم عامل های Unix (مانند Max OS X) تنها می توانند به منظور اجرای هدوپ در محیط Development مورد استفاده قرار گیرند. Windows هم امکان استفاده از هدوپ را تنها در محیط Development دارد، که برای این کار نیاز به نصب Cygwin می باشد.
سیستم عامل مورد نظر ما Linux می باشد.
مراحل نصب هدوپ (Standalone) :
ابتدا یک ترمینال در محیط Linux باز نموده و مراحل زیر را به ترتیب اجرا نمایید.
مرحله اول : نصب Java (نسخه 6 و یا بالاتر)
Linux command => sudo apt-get install openjdk-6-jdk
برای تست صحت نصب، فرمان زیر را وارد نمایید.
Linux command => java -version
خروجی :
"java version 1.6.0_33"
OpenJDK Runtime Environment (IcedTea6 1.13.5) (6b33-1.13.5-1ubuntu0.10.04)
OpenJDK Server VM (build 23.25-b01, mixed mode)
مرحله دوم : می بایست یک نسخه Stable از هدوپ را از Apache Hadoop release page دانلود نموده و Extract نماییم. بعد آن را به یک مکان دلخواه انتقال می دهیم.
Linux command => wget http://apache.claz.org/hadoop/common/stable/hadoop-2.6.0.tar.gz
Linux command => tar -zxvf hadoop-2.6.0.tar.gz
Linux command => sudo cp -r hadoop-2.6.0 /usr/local/hadoop
مرحله سوم : به منظور دسترسی آسانتر به دایرکتوری های Java و هدوپ، به ازای هر کدام یک متغیر محیطی تعریف می نماییم. لازم به ذکر است که متغیرهای محیطی در اینجا به گونه ای تعریف می شوند که درصورت بسته شدن ترمینال از بین خواهند رفت.
Linux command => export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk
Linux command => export HADOOP_PREFIX=/usr/local/hadoop
Linux command => export PATH=$PATH:$HADOOP_PREFIX/bin
مرحله چهارم: اجرا و تست هدوپ
Linux command => hadoop version
خروجی:
Hadoop 2.6.0
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r e3496499ecb8d220fba99dc5ed4c99c8f9e33bb1
Compiled by jenkins on 2014-11-13T21:10Z
Compiled with protoc 2.5.0
From source with checksum 18e43357c8f927c0695f1e9522859d6a
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-2.6.0.jar
حال می توان مثال آورده شده در مطلب شماره 6 را با یک مجموعه داده کوچک اجرا و تست نمود. برای این کار ابتدا کدهای نوشته شده در آن مطلب را با استفاده از یکی از محیط های برنامه نویسی جاوا تبدیل به یک JAR فایل می کنیم.
سپس مراحل زیر را به ترتیب انجام می دهیم:
Linux command => export HADOOP_CLASSPATH=MaxTemperature.jar
Linux command => hadoop MaxTemperature Sample.txt output
خروجی :
….
14/12/09 13:00:15 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_local223793241_0001
….
14/12/09 13:00:16 INFO mapred.LocalJobRunner: Starting task: attempt_local223793241_0001_m_000000_0
….
14/12/09 13:00:16 INFO mapred.LocalJobRunner: Starting task: attempt_local223793241_0001_r_000000_0
….
File System Counters
FILE: Number of bytes read=14990
FILE: Number of bytes written=510737
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
….
وقتی فرمان هدوپ با استفاده از نام یک کلاس MaxTemperature به عنوان اولین پارامتر فراخوانی می شود، باعث بالا آمدن JVM به منظور اجرای آن کلاس می شود. بعد با استفاده از JAR فایل معرفی شده در متغیر محیطی HADOOP_CLASSPATH کلاس های مربوط به Map و Reduce استخراج می شوند. Sample.txt به عنوان ورودی معرفی می شود که مسیر آن دایرکتوری جاری است. output به عنوان دایرکتوری خروجی معرفی می شود که مسیر آن نیز دایرکتوری جاری خواهد بود. نکته مهم این که در هر بار اجرا می بایست دایرکتوری output حذف شده در غیر اینصورت هدوپ به منظور جلوگیری از Data Loss از اجرای مجدد جلوگیری می نماید.
خروجی بدست آمده از اجرای یک Job حاوی اطلاعات مفیدی می باشد. برای مثال، می توان دید که به Job یک شناسه (ID: job_local223793241_0001) تخصیص داده شده است، و یک map task و یک reduce task اجرا شده است (با ID های attempt_local223793241_0001_m_000000_0 و attempt_local223793241_0001_r_000000_0). دانستن این اطلاعات در زمانی که نیاز به دیباگ Job های MapRedcue می باشد بسیار مهم خواهد بود.
قسمت آخر خروجی که با عنوان "Counters" مشخص شده است، آمار و ارقامی است که هدوپ به ازای هر Job در حال اجرا تولید می نماید. آنها اطلاعاتی مفیدی هستند که به واسطه آن میتوان تشخیص داد که میزان داده پردازش شده همان مقداری است که شما انتظار داشتهاید یا خیر. برای مثال، میتوان تعداد رکوردهایی که وارد سیستم میشوند را دنبال نمود: تعداد رکوردهایی که به map ها و یا reducer ها وارد و یا از آنها خارج میشوند در اینجا قابل بررسی می باشند.
در دایرکتوری output به ازای هر reducer یک فایل output به وجود می آید. از آنجایی که Job اجرا شده تنها یک reducer دارد، لذا ما یک فایل خروجی با نامpart-r-00000 خواهیم داشت.
Linux command => cat output/part-r-00000
خروجی :
1950 138
1951 138
1952 138
1953 138
1954 138
Hadoop: The Definitive Guide by Tom White