“使用Ansible搭建分佈式大數據基礎環境”系列文章完整包含了如何使用Ansible這一分佈式運維利器,來幫我們快速搭建Hadoop2/Spark2/Hive2/ZooKeeper3/Flink1.7/ElasticSearch5等一整套大數據解決方案。本篇是系列文章的第九篇-Spark On Yarn模式搭建。敬請關注後續更多文章。
(一)使用Ansible搭建分佈式大數據基礎環境-環境準備
(二)使用Ansible搭建分佈式大數據基礎環境-Ansible項目創建
(三)使用Ansible搭建分佈式大數據基礎環境-編寫第一個playbook
(四)使用Ansible搭建分佈式大數據基礎環境-Ansible常用Module介紹
(五)使用Ansible搭建分佈式大數據基礎環境-ZooKeeper集羣模式搭建
(六)使用Ansible搭建分佈式大數據基礎環境-Hadoop高可用集羣搭建
(七)使用Ansible搭建分佈式大數據基礎環境-MySQL安裝
(八)使用Ansible搭建分佈式大數據基礎環境-Hive客戶端搭建
(九)使用Ansible搭建分佈式大數據基礎環境-Spark On Yarn安裝
Apache Spark 是專爲大規模數據處理而設計的快速通用的計算引擎。Spark是UC Berkeley AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用並行框架,Spark,擁有Hadoop MapReduce所具有的優點;但不同於MapReduce的是——Job中間輸出結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用於數據挖掘與機器學習等需要迭代的MapReduce的算法。
本篇我們安裝的Hive版本是最新的spark-2.3.3-bin-hadoop2.7,使用YARN做爲資源管理器實現Spark集羣模式。
1. sparkcluster配置
Spark在Yarn模式下和Hive一樣,只需要作爲客戶端安裝,沒有集羣的概念,所有任務都會提交到遠程Yarn,由Yarn分配資源創建Container運行,這裏我們打開前面的production/hosts文件,添加Spark專屬cluster:
[cluster]
master1
master2
slave1
#以下爲mysql單獨創建
[mysqlcluster]
master2
#以下爲hive單獨創建
[hivecluster]
master2
#以下爲spark單獨創建
[sparkcluster]
master1
master2
slave1
2. 編寫tasks/main.yaml,完成spark安裝
---
- name: Create Spark Data Directory
file: path={{data_base}}/spark state=directory
- name: Download spark file
get_url: url='{{download_server}}/{{path}}/{{filename}}-{{version}}/{{filename}}-{{version}}-{{hadoopversion}}.{{suffix}}' dest="{{download_base}}/{{filename}}-{{version}}.{{suffix}}" remote_src=yes
register: download_result
- name: Check whether registered
stat:
path: "{{app_base}}/{{filename}}-{{version}}-{{hadoopversion}}"
register: node_files
- debug:
msg: "{{node_files.stat.exists}}"
- name: Extract archive
unarchive: dest={{app_base}} src='{{download_base}}/{{filename}}-{{version}}.{{suffix}}' remote_src=yes
when: download_result.state == 'file' and node_files.stat.exists == False
- name: Add soft link
file: src="{{app_base}}/{{filename}}-{{version}}-{{hadoopversion}}" dest={{app_base}}/{{appname}} state=link
- name: Add ENV SPARK_HOME
become: yes
lineinfile: dest=/etc/profile.d/app_bin.sh line="export SPARK_HOME={{app_base}}/{{appname}}"
- name: Export PATH
become: yes
lineinfile: dest=/etc/profile.d/app_bin.sh line="export PATH=$PATH:$SPARK_HOME/bin"
- name: Copy spark-env.sh
copy: src="{{app_base}}/{{appname}}/conf/spark-env.sh.template" dest="{{app_base}}/{{appname}}/conf/spark-env.sh" remote_src=yes mode=0755
- name: Add Env HADOOP_CONF_DIR
lineinfile: dest="{{app_base}}/{{appname}}/conf/spark-env.sh" line="HADOOP_CONF_DIR={{app_base}}/hadoop/etc/hadoop"
- name: Enable submit job in yarn mode by default in $SPARK_HOME/conf/spark-default.xml
blockinfile:
path: "{{app_base}}/{{appname}}/conf/spark-default.xml"
block: |
spark.driver.memory 2g
spark.yarn.jars hdfs://master1:8020/hadoop/spark_jars/*
spark.master yarn
spark.executor.cores 4
spark.executor.memory 8g
spark.executor.instances 4
3. 創建spark.yaml,並運行ansible-playbook完成安裝
---
- hosts: sparkcluster
remote_user: fangyu.fu
roles:
- spark
$] ansible-playbook -i production/hosts spark.yaml
PLAY [sparkcluster] ****************************************************************************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************************************************************
ok: [master1]
TASK [spark : Create Spark Data Directory] *****************************************************************************************************************************************************
ok: [master1]
TASK [spark : Download spark file] *************************************************************************************************************************************************************
ok: [master1]
TASK [spark : Check whether registered] ********************************************************************************************************************************************************
ok: [master1e]
TASK [spark : debug] ***************************************************************************************************************************************************************************
ok: [master1] => {
"msg": true
}
TASK [spark : Extract archive] *****************************************************************************************************************************************************************
skipping: [master1]
TASK [spark : Add soft link] *******************************************************************************************************************************************************************
ok: [master1]
TASK [spark : Add ENV SPARK_HOME] **************************************************************************************************************************************************************
ok: [master1]
TASK [spark : Export PATH] *********************************************************************************************************************************************************************
ok: [master1]
TASK [spark : Copy spark-env.sh] ***************************************************************************************************************************************************************
changed: [master1]
TASK [spark : Add Env HADOOP_CONF_DIR] *********************************************************************************************************************************************************
changed: [master1]
TASK [spark : Enable submit job in yarn mode by default in $SPARK_HOME/conf/spark-defaults.conf] ***********************************************************************************************
changed: [master1]
PLAY RECAP *************************************************************************************************************************************************************************************
master1 : ok=11 changed=3 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0