วิธีการติดตั้ง Apache Spark ด้วย Cloudera VM


Apache Spark คือ Framework ในการเขียนโปรแกรมเพื่อประมวลผลแบบ MapReduce

ในบทความนี้จะกล่าวถึงการสร้าง environment สำหรับทดสอบโปรแกรม Spark โดยใช้ Cloudera Quickstart

Cloudera Quickstart คือ image ของ Virtual Machine โดยมีให้ทั้ง VirtualBox, VMWare และ Docker ในที่นี้จะแสดงการติดตั้งโดยใช้ Docker

ในขึ้นแรกคือการดึง docker image ของ quickstart เวอร์ชั่นล่าสุดลงมาก่อน

 

docker pull cloudera/quickstart:latest

 

ตรรวจสอบ ว่ามี image ที่ดึงลงมาหรือไม่

 

docker images

 

รันคำสั่ง docker run เพื่อสร้าง container

 

docker run --hostname=quickstart.cloudera --privileged=true -t -i \
-p 8888 -p 7180 -d cloudera/quickstart /usr/bin/docker-quickstart

 

-i -t เพื่อเปิด interactive ให้สามารถเข้า container จาก terminal ได้

–hostname และ -p เพื่อเปิด port ของ docker container ให้สามารถเข้าถึงจากภายนอกผ่าน browser ได้

-d เพื่อให้ container รันใน background ไม่ปิดตัวเองเมื่อปิดหน้า terminal แล้ว

เมื่อสร้าง container เสร็จแล้วใช้คำสั่ง docker ps เพิ่มดู container hash

 

docker ps

 

 

รัน docker attach เพิ่มเชื่อมต่อ terminal กับ container โดยใช้ container id ที่ดูจาก docker ps เมื่อกี้ นั่นคือ  3d2dadaeb9e6

 

docker attach 3d2dadaeb9e6

 

เมื่อ attach เสร็จ terminal จะกลายเป็น root@quickstart

 

 

ขั้นต่อไปคือเปิด cloudera manager

 

/home/cloudera/cloudera-manager --express --force

 

ใช้เวลาสักหน่อย

 

 

เมื่อเสร็จแล้วจะมี port ที่ใช้เข้า cloudera manager แล้ว login ขึ้นมา

แต่ยังเข้าไม่ได้ ต้อง forward port จาก docker มาก่อน

ใช้คำสั่ง docker port [container id] [port] โดยรันจาก terminal ในเครื่อง host ไม่ใช่จาก container

 

docker port 3d2dadaeb9e6 7180

 

ผลลัพธ์

นั่นคือเราสามารถเข้าไปที่  http://quickstart.cloudera:7180 ได้จาก 0.0.0.0:32771 ทาง browser

 

 

ใส่ login

 

 

ดูแถบด้านซ้าย จะบอกว่ามี service ไหนรันอยู่บ้าง และมีปัญหาอะไร อันแรกเลยคือ Hosts จะเห็นว่ามี error อยู่ 1 อัน

 

 

เมื่อกดเข้าไปดูจะพบว่าเป็น error Clock Offset

 

แก้ด้วยการติดตั้ง NTP server แล้ว sync นาฬิกาของ server ให้ตรงกัน

 

yum install ntp

chkconfig ntpd on

service ntpd start

ntpdate -u pool.ntp.org

hwclock --systohc

 

จากนั้นเพื่อใช้งาน spark จะเปิด service Hive, HDFS, YARN และ Spark โดยคลิดที่ลูกศรข้าง service แล้วกด start เพื่อเริ่มการทำงาน

 

เมื่อเปิด service ที่จำเป็นหมดแล้วก็สามารถเริ่มใช้ spark ได้

ในบทความนี้จะแสดงตัวอย่างโปรแกรม WordCount ซึ่งเป็นโปรแกรมพื้นฐานในการรัน MapReduce

 

ก่อนอื่น เตรียม input ที่จะเอามานับคำก่อน ซึ่งสามารถหาได้จากโปรแกรมสุ่มคำ ตัวอย่างเช่น

https://www.lipsum.com/

 

นำมาเก็บลงไฟล์ (ด้วย vi หรือ text editor อื่นๆ) ในที่นี้ใช้ชื่อ input.txt

 

Spark จะอ่านไฟล์จาก HDFS (Hadoop file system) ได้ โดย hdfs นี้จะเป็น file system ซึ่งสามารถมองเห็นได้จากทุก node ใน yarn

 

ใช้คำสั่ง hdfs เพื่อ copy ไฟล์ไปไว้ใน hdfs

 

hdfs dfs -put input.txt /tmp/input.txt

 

และตรวจสอบดูว่าใน hdfs มีไฟล์ถูกต้องหรือไม่

 

hdfs dfs -ls /tmp/

 

ใน image ของ cloudera นี้ ตัว spark จะถูกติดตั้งไว้ที่ /usr/lib/spark ซึ่งเราสามารถรัน spark-shell ได้จากที่นี่

 

/usr/lib/spark/bin/spark-shell

 

spark-shell จะใช้เวลาในการเริ่มทำงานสักพัก เมื่อพร้อมใช้งานแล้วจะขึ้นว่า scala>

Script ด้านล่างคือตัวอย่างโปรแกรม word count

 

val myfile = sc.textFile("hdfs://quickstart.cloudera:8020/tmp/input.txt")
val counts = myfile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)
counts.saveAsTextFile("hdfs://quickstart.cloudera:8020/tmp/out")

 

โดยโปรแกรมจะอ่านไฟล์อินพุตจาก hdfs /tmp/input.txt แล้ว split ด้วย space แล้ว map จาก word ที่ split มา

การ reduce คือการนับ word ที่เจอซ้ำๆในไฟล์ input นั่นเอง

บรรทัดสุดท้ายคือการบอกให้โปรแกรมเก็บ output ไว้ที่  /tmp/out/

เมื่อโปรแกรมรันเสร็จแล้ว ออกจาก spark shell ด้วยคำสั่ง exit

 

แล้ว ตรวจดู output ใน hdfs

 

hdfs dfs -ls  /tmp/out/

 

ผลลัพธ์จะอยู่ใน part-00000 และ part-00001 เปิดดูได้ด้วย -cat

 

hdfs dfs -cat /tmp/out/part-00000

ผลลัพธ์ในแต่ละบรรทัด คือคำที่เจอ , จำนวนที่นับได้

 

เมื่อทำงานเสร็จแล้ว หากต้องการออกจาก cloudera container โดยที่ยังปล่อย container รันไว้

ให้ออกด้วย ctrl+p ctrl+q terminal จะกลับมาที่เครื่องโดยที่ container ยังรันอยู่

แต่หากใช้คำสั่ง exit จะเป็นการปิด container ไปเลย

. . . . . . . . . . .

หากว่าคุณกำลังสนใจการสร้างโมเดลพยากรณ์ หรือทำงานอื่นๆ ที่เกี่ยวกับ Big Data, ทีม บานาน่าโคดดิ้ง ของเรา มีทีมงานผู้เชี่ยวชาญที่จะช่วยให้งานของคุณสำเร็จได้อย่างสมบูรณ์ สามารถดูรายอะเอียดได้ที่ BananaCoding.com/big-data