Menjalankan Apache Hive di atas Engine Apache Spark

Danau Data
4 min readOct 21, 2018

--

Tentang Apache Spark

Sebelumnya, kami sudah membahas Apache Spark pada tutorial ini berikut: http://www.planetpintar.net/2017/11/big-data-series-installing-spark-cluster.html

Tentang Apache Hive

Juga untuk Apache Hive pada link berikut ini: https://medium.com/@planet.pintar/berkenalan-dengan-apache-hive-5ea1a9f0e5d5

Apache Hive + Apache Spark

Apache Spark seperti yang kita ketahui merupakan platform High Performance Computing untuk Big Data Analysis. Penggunaan Apache Spark sendiri saat ini mulai menggeser penggunaan Map Reduce pada Hadoop yang dinilai cukup lambat. Namun demikian, Apache Spark sendiri tidak menggantikan fungsi storage system pada Hadoop. Menurut klaim dari pengembangnya, Spark 100 kali lebih cepat dalam memproses data. Cukup masuk akal, karena pemrosesan Spark, sebagian besar ada di memory (RAM) server, dibandingkan dengan Map Reduce yang sebagian besar dilakukan pada CPU.

Apache Hive sendiri seperti yang kita ketahui, secara default berjalan di atas engine Hadoop (Map Reduce). Engine ini dalam beberapa waktu ke depan kabarnya sudah tidak digunakan lagi pada Apache Hive, maka dari itu, dari pengembang Apache Hive sendiri sudah mulai menyarankan untuk beralih ke Spark sebagai query engine.

Menyiapkan Konfigurasi Apache Hive

Sumber dari konfigurasi ini kami ambil dari http://hadooptutorials.info/2017/10/09/part-5-using-spark-as-execution-engine-for-hive/ dengan beberapa modifikasi/penyesuaian. Untuk memulai, tambahkan baris script berikut ini pada file $HADOOP_HOME/hadoop/hive/conf/hive-site.xml

<property>
<name>spark.master</name>
<value>spark://127.0.0.1:7077</value>
</property>
<property>
<name>spark.eventLog.enabled</name>
<value>true</value>
</property>
<property>
<name>spark.eventLog.dir</name>
<value>/tmp</value>
</property>
<property>
<name>spark.executor.memory</name>
<value>1024m</value>
</property>
<property>
<name>spark.serializer</name>
<value>org.apache.spark.serializer.KryoSerializer</value>
</property>
<property>
<name>spark.yarn.jars</name>
<value>hdfs://localhost:8020/spark-jars/*</value>
</property>

Buat symbolic link ke file Jar

ln -s $SPARK_HOME/jars/scala-library*.jar
ln -s $SPARK_HOME/jars/spark-core*.jar
ln -s $SPARK_HOME/jars/spark-network-common*.jar

Di mana $SPARK_HOME pada distro pygmy terletak pada /opt/hadoop-3.1.1–1/hadoop/spark, dan $HIVE_HOME pada /opt/hadoop-3.1.1–1/hadoop/hive.

Copy driver JAR Apache Hive untuk Spark

Jalankan command berikut

cp $HIVE_HOME/lib/*hive*.jar $SPARK_HOME/jars/

Upload file .jar untuk Digunakan oleh YARN

Jalankan command berikut

hdfs dfs -mkdir /spark-jars
hdfs dfs -put $SPARK_HOME/jars/*.jar /spark-jars/

Ubah Setting pada YARN

Tambahkan konfigurasi berikut pada $HADOOP_HOME/hadoop/conf/yarn-site.xml

<property>
<name>yarn.application.classpath</name>
<value>$HADOOP_HOME/hadoop/share/hadoop/mapreduce/*,$HADOOP_HOME/hadoop/share/hadoop/mapreduce/lib/*,$HADOOP_HOME/hadoop/share/hadoop/hdfs/*,$HADOOP_HOME/hadoop/share/hadoop/hdfs/lib/*,$HADOOP_HOME/hadoop/share/hadoop/common/lib/*,$HADOOP_HOME/hadoop/share/hadoop/common/*,$HADOOP_HOME/hadoop/share/hadoop/yarn/lib/*,$HADOOP_HOME/hadoop/share/hadoop/yarn/*</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_HOME/hadoop/share/hadoop/mapreduce/*,$HADOOP_HOME/hadoop/share/hadoop/mapreduce/lib/*,$HADOOP_HOME/hadoop/share/hadoop/hdfs/*,$HADOOP_HOME/hadoop/share/hadoop/hdfs/lib/*,$HADOOP_HOME/hadoop/share/hadoop/common/lib/*,$HADOOP_HOME/hadoop/share/hadoop/common/*,$HADOOP_HOME/hadoop/share/hadoop/yarn/lib/*,$HADOOP_HOME/hadoop/share/hadoop/yarn/*</value>
</property>

Ubah file hadoop-hdfs-3.1.1.jar/hadoop-default.xml

Ekstrak file hadoop-hdfs-3.1.1.jar buka file hadoop-default.xml, cari property dfs.client.datanode-restart.timeout dan ubah value nya menjadi 30. Setelah itu update lagi ke file hadoop-hdfs-3.1.1.jar.

<property>
<name>dfs.client.datanode-restart.timeout</name>
<value>30</value>
<description>
Expert only. The time to wait, in seconds, from reception of an
datanode shutdown notification for quick restart, until declaring
the datanode dead and invoking the normal recovery mechanisms.
The notification is sent by a datanode when it is being shutdown
using the shutdownDatanode admin command with the upgrade option.
Support multiple time unit suffix(case insensitive), as described
in dfs.heartbeat.interval.
</description>
</property>

Jalankan Spark Master

Jalankan script berikut ini

$ $SPARK_HOME/sbin/start-master.sh

Jalankan Spark Client

$ $SPARK_HOME/sbin/start-client.sh spark://localhost:7077

Buka browser di host komputer/secara remote, akses alamat berikut ini:

http://<ip-server-pygmy>:8080

Dashboard web Spark Master

Coba Query menggunakan Beeline

Berbekal tutorial berikutnya, jalankan query menggunakan fungsi agregat. Ingat, hive tidak akan menggunakan engine tambahan seperti Spark atau Tez, jika query yang akan kita eksekusi tidak mempunyai fungsi agregasi, join, dan sorting.

> select * from product order by name;
Pada tabel Running Drivers kita dapat melihat job query dari Hive yang baru saja dieksekusi
Job Spark di console

Hasil yang akan kita dapat:

Query Hive on Spark job[1] stages: [2, 3]
INFO : Spark job[1] status = RUNNING
INFO : Job Progress Format
CurrentTime StageId_StageAttemptId: SucceededTasksCount(+RunningTasksCount-FailedTasksCount)/TotalTasksCount
INFO : 2018-10-21 15:01:08,117 Stage-2_0: 1/1 Finished Stage-3_0: 0/1
INFO : 2018-10-21 15:01:09,138 Stage-2_0: 1/1 Finished Stage-3_0: 1/1 Finished
INFO : Spark job[1] finished successfully in 2.26 second(s)
INFO : Completed executing command(queryId=hadoop_20181021150106_429fc1cf-dbce-4027-be9d-5759e8eaccf4); Time taken: 2.592 seconds
INFO : OK
INFO : Concurrency mode is disabled, not creating a lock manager
+--------------+---------------+----------------+-------------------+
| product.eid | product.name | product.price | product.catagory |
+--------------+---------------+----------------+-------------------+
| 1104 | Beer | 450 | Beverage |
| 1105 | Bread | 10 | Food |
| 1103 | Cheese | 400 | Food |
| 1106 | Cola | 150 | Beverage |
| 1102 | Shampoo | 70 | Bathroom Eq. |
| 1101 | Soap | 50 | Bathroom Eq. |
| 1107 | Tootbrush | 12 | Bathroom Eq. |
+--------------+---------------+----------------+-------------------+
7 rows selected (2.897 seconds)

Cukup mudah bukan? :)

--

--

Danau Data
Danau Data

No responses yet