Tôi là Duyệt

BigData - Cài đặt Apache Spark trên Ubuntu 14.04

Trong lúc tìm hiểu vài thứ về BigData cho một số dự án, mình quyết định chọn Apache Spark thay cho Hadoop. Theo như giới thiệu từ trang chủ của Apache Spark, thì tốc độ của nó cao hơn 100x so với Hadoop MapReduce khi chạy trên bộ nhớ, và nhanh hơn 10x lần khi chạy trên đĩa, tương thích hầu hết các CSDL phân tán (HDFS, HBase, Cassandra, …). Ta có thể sử dụng Java, Scala hoặc Python để triển khai các thuật toán trên Spark.

Chú ý: Đây là bài viết hướng dẫn cách cài đặt từ Source. Bạn có thể cài bản standalone thông qua bản pre-built. Xem bài viết hướng dẫn tại đây.

Spark có nhiều phiên bản khác nhau, tương thích với Hadoop và hầu hết các loại CSDL mà Hadoop hỗ trợ. Bạn có thể truy cập vào trang Downloads của Spark để chọn download phiên bản tương ứng.

Sau đây mình sẽ hướng dẫn về các bước cần thiết để biên dịch, cài đặt và cấu hình Spark từ Source.

Cài đặt Java

Để có thể chạy Spark trên ubuntu, cần phải có Java. Nếu chưa có thì cài đặt như sau, chạy các lệnh:

$ sudo apt-add-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer

Kiểm tra lại đã cài đặt thành công hay chưa

$ java -version

Bạn sẽ thấy

java version "1.7.0_76" Java(TM) SE Runtime Environment (build 1.7.0_76-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.76-b04, mixed mode)

Cài đặt Scala

Tiếp theo là cài đặt Scala, bạn có thể tìm hiểu thêm về Scala tại trang chủ

Tải bản Scala 2.11.6 tại đây: http://www.scala-lang.org/download/ Giải nén, chép hết các file vào /usr/local/src/scala/. Ai lười thì lần lượt chạy các lệnh sau

$ cd ~/Downloads
$ wget http://www.scala-lang.org/files/archive/scala-2.11.6.tgz
$ sudo tar xvf ./scala-2.11.6.tgz
$ sudo mkdir /usr/local/src/scala
$ sudo cp scala-2.11.6 /usr/local/src/scala/

Mở file .bashrc và thêm 2 dòng sau vào cuối cùng

export SCALA_HOME=/usr/local/src/scala/scala-2.11.6
export PATH=$SCALA_HOME/bin:$PATH

Khởi động lại .bashrc để nạp lại các biến ENV

$ source .bashrc

Kiểm tra xem Scala đã cài đặt thành công hay chưa

$ scala -version

Thấy giống giống thế này là Ok: Scala code runner version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL

Tải và cài đặt Apache Spark

Truy cập http://spark.apache.org/downloads.html và tải bản Spark mới nhất, hoặc làm theo cách dưới đây

$ cd ~/Downloads
$ wget http://mirrors.viethosting.vn/apache/spark/spark-1.3.0/spark-1.3.0.tgz
$ tar xvf spark-1.3.0.tgz 

Biên dịch Spark

Trong source của Spark mới vừa tải về đã tích hợp sẵn SBT(Simple Build Tool), để biên dịch Spark, chạy các lệnh sau:

$ cd spark-1.3.0
$ sbt/sbt assembly

Ăn miếng nước, uống miếng bánh, đợi 1 vài (chục) phút để SBT build.

Test thử

Sau thời gian chờ đợi, bạn đã có thể sử dụng. Test thử nào, sau đây là chương trình tính số Pi, tích hợp sẵn trong Spark

$ ./bin/run-example SparkPi 10

Kết quả 3.14634, hệ thống của bạn đã sẵn sàng chinh chiến.

Sử dụng spark-submit

Một khi bạn đã viết xong vài thuật toán nho nhỏ trên API của Spark, đây là lúc chạy trên Spark. Spark-Submit là một script (bin/spark-submit), giúp bạn submit chương trình của bạn lên Spark và chạy. Bạn có thể Submit file Jar nếu viết app bằng Java, đường dẫn file .py nếu viết bằng python, …

Trong thư mục Spark mặc định có chứa nhiều file ví dụ trong thư mục examples, bằng ngôn cả ngôn ngữ Java, Scala và Python.

Thử nhé, submit thuật toán tính số PI

$ ./bin/spark-submit examples/src/main/python/pi.py

Cách Submit file .jar

./bin/spark-submit \
  --class <main-class>
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options
  <application-jar> \
  [application-arguments]

Một số ví dụ về cách sử dụng Spark-Submit

# Chạy application trên máy đơn với 8 cores
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master local[8] \
  /path/to/examples.jar \
  100

# Chạy Spark Standalone cluster ở chế độ deploy
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master spark://207.184.161.138:7077 \
  --executor-memory 20G \
  --total-executor-cores 100 \
  /path/to/examples.jar \
  1000

# Chạy trên YARN cluster
export HADOOP_CONF_DIR=XXX
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master yarn-cluster \  # can also be `yarn-client` for client mode
  --executor-memory 20G \
  --num-executors 50 \
  /path/to/examples.jar \
  1000

# Chạy application trên Spark ở chế độ Standalone
./bin/spark-submit \
  --master spark://207.184.161.138:7077 \
  examples/src/main/python/pi.py \
  1000 # tham số

Sử dụng Spark Shell

Bạn có thể sử dụng Spark thông qua Scala Shell

$ ./spark-shell
scala> val textFile = sc.textFile("README.md")
scala> textFile.count()

Kết hợp Spark với Hadoop Filesystems (HDFS)

Ở trên mình hướng dẫn cách build từ source, cách này có cái hay là bạn có thể chạy Spark với bất kì phiên bản Hadoop nào. Bây giờ mình muốn sử dụng kết hợp với HDFS thì sao? thực hiện các bước sau

Dọn dẹp

$ sbt/sbt clean

Bạn có thể thay đổi phiên bản của SPARK_HADOOP_VERSION, ở đây mình dùng 2.0.0-cdh4.3.0

$ SPARK_HADOOP_VERSION=2.0.0-mr1-cdh4.3.0 sbt/sbt assembly

Sau khi build thành công, bạn đã có thể đọc và ghi dữ liệu lên cdh4.3.0 clusters

$ ./spark-shell
scala> var file = sc.textFile("hdfs://IP:8020/path/to/textfile.txt")
scala> file.flatMap(line => line.split(",")).map(word => (word, 1)).reduceByKey(_+_)
scala> count.saveAsTextFile("hdfs://IP:8020/path/to/ouput")

Kết

Cách cấu hình Spark để chạy MultiNode trên YARN: https://spark.apache.org/docs/1.2.0/running-on-yarn.html Quick Start: http://spark.apache.org/docs/1.1.1/quick-start.html