ansible編寫(xiě)hadoop群集-創(chuàng)新互聯(lián)

Ansible實(shí)戰(zhàn):部署分布式日志系統(tǒng)

本節(jié)內(nèi)容:

創(chuàng)新互聯(lián)專(zhuān)注于做網(wǎng)站、成都做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站開(kāi)發(fā)。公司秉持“客戶至上,用心服務(wù)”的宗旨,從客戶的利益和觀點(diǎn)出發(fā),讓客戶在網(wǎng)絡(luò)營(yíng)銷(xiāo)中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴(yán)謹(jǐn)?shù)膽B(tài)度對(duì)待客戶,用專(zhuān)業(yè)的服務(wù)創(chuàng)造價(jià)值,成為客戶值得信賴(lài)的朋友,為客戶解除后顧之憂。
  • 背景

  • 分布式日志系統(tǒng)架構(gòu)圖

  • 創(chuàng)建和使用roles

    • JDK 7 role

    • JDK 8 role

    • Zookeeper role

    • Kafka role

    • Elasticsearch role

    • MySQL role

    • Nginx role

    • Redis role

    • Hadoop role

    • Spark role

一、背景

產(chǎn)品組在開(kāi)發(fā)一個(gè)分布式日志系統(tǒng),用的組件較多,單獨(dú)手工部署一各個(gè)個(gè)軟件比較繁瑣,花的時(shí)間比較長(zhǎng),于是就想到了使用ansible playbook + roles進(jìn)行部署,效率大大提高。

二、分布式日志系統(tǒng)架構(gòu)圖

ansible編寫(xiě)hadoop群集

ansible編寫(xiě)hadoop群集

三、創(chuàng)建和使用roles

每一個(gè)軟件或集群都創(chuàng)建一個(gè)單獨(dú)的角色。

[root@node1 ~]# mkdir -pv ansible_playbooks/roles/{db_server,web_server,redis_server,zk_server,kafka_server,es_server,tomcat_server,flume_agent,hadoop,spark,hbase,hive,jdk7,jdk8}/{tasks,files,templates,meta,handlers,vars}

ansible編寫(xiě)hadoop群集

3.1. JDK7 role
[root@node1 jdk7]# pwd/root/ansible_playbooks/roles/jdk7
[root@node1 jdk7]# lsfiles  handlers  meta  tasks  templates  vars

1. 上傳軟件包

將jdk-7u80-linux-x64.gz上傳到files目錄下。

2. 編寫(xiě)tasks

ansible編寫(xiě)hadoop群集

ansible編寫(xiě)hadoop群集

[root@node1 jdk7]# vim tasks/main.yml 
- name: mkdir necessary catalog                                                                                                               
  file: path=/usr/java state=directory mode=0755- name: copy and unzip jdk 
  unarchive: src={{jdk_package_name}} dest=/usr/java/
- name: set env 
  lineinfile: dest={{env_file}} insertafter="{{item.position}}" line="{{item.value}}" state=present
  with_items:  - {position: EOF, value: "\n"}  - {position: EOF, value: "export JAVA_HOME=/usr/java/{{jdk_version}}"}  - {position: EOF, value: "export PATH=$JAVA_HOME/bin:$PATH"}  - {position: EOF, value: "export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"}- name: enforce env 
  shell: source {{env_file}}

ansible編寫(xiě)hadoop群集

3. 編寫(xiě)vars

[root@node1 jdk7]# vim vars/main.yml 
jdk_package_name: jdk-7u80-linux-x64.gz                                                                                                       
env_file: /etc/profile
jdk_version: jdk1.7.0_80

4. 使用角色

在roles同級(jí)目錄,創(chuàng)建一個(gè)jdk.yml文件,里面定義好你的playbook。

[root@node1 ansible_playbooks]# vim jdk.yml 
- hosts: jdk
  remote_user: root
  roles:  - jdk7

運(yùn)行playbook安裝JDK7:

[root@node1 ansible_playbooks]# ansible-playbook jdk.yml

使用jdk7 role可以需要根據(jù)實(shí)際環(huán)境修改vars/main.yml里的變量以及/etc/ansible/hosts文件里定義的主機(jī)。

3.2 JDK8 role
[root@node1 jdk8]# pwd/root/ansible_playbooks/roles/jdk8
[root@node1 jdk8]# lsfiles  handlers  meta  tasks  templates  vars

1. 上傳安裝包

將jdk-8u73-linux-x64.gz上傳到files目錄下。

2. 編寫(xiě)tasks

ansible編寫(xiě)hadoop群集

ansible編寫(xiě)hadoop群集

[root@node1 jdk8]# vim tasks/main.yml 
- name: mkdir necessary catalog                                                                                                               
  file: path=/usr/java state=directory mode=0755- name: copy and unzip jdk 
  unarchive: src={{jdk_package_name}} dest=/usr/java/
- name: set env 
  lineinfile: dest={{env_file}} insertafter="{{item.position}}" line="{{item.value}}" state=present
  with_items:  - {position: EOF, value: "\n"}  - {position: EOF, value: "export JAVA_HOME=/usr/java/{{jdk_version}}"}  - {position: EOF, value: "export PATH=$JAVA_HOME/bin:$PATH"}  - {position: EOF, value: "export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"}- name: enforce env 
  shell: source {{env_file}}

ansible編寫(xiě)hadoop群集

3. 編寫(xiě)vars

[root@node1 jdk8]# vim vars/main.yml 
jdk_package_name: jdk-8u73-linux-x64.gz                                                                                                       
env_file: /etc/profile
jdk_version: jdk1.8.0_73

4. 使用角色

在roles同級(jí)目錄,創(chuàng)建一個(gè)jdk.yml文件,里面定義好你的playbook。

[root@node1 ansible_playbooks]# vim jdk.yml 
- hosts: jdk
  remote_user: root
  roles:  - jdk8

運(yùn)行playbook安裝JDK8:

[root@node1 ansible_playbooks]# ansible-playbook jdk.yml

使用jdk8 role可以需要根據(jù)實(shí)際環(huán)境修改vars/main.yml里的變量以及/etc/ansible/hosts文件里定義的主機(jī)。

3.3 Zookeeper role

Zookeeper集群節(jié)點(diǎn)配置好/etc/hosts文件,配置集群各節(jié)點(diǎn)主機(jī)名和ip地址的對(duì)應(yīng)關(guān)系。

[root@node1 zk_server]# pwd/root/ansible_playbooks/roles/zk_server
[root@node1 zk_server]# lsfiles  handlers  meta  tasks  templates  vars

1. 上傳安裝包

將zookeeper-3.4.6.tar.gz和clean_zklog.sh上傳到files目錄。clean_zklog.sh是清理Zookeeper日志的腳本。

2. 編寫(xiě)tasks

ansible編寫(xiě)hadoop群集 zookeeper tasks

3. 編寫(xiě)templates

將zookeeper-3.4.6.tar.gz包中的默認(rèn)配置文件上傳到../roles/zk_server/templates/目錄下,重命名為zoo.cfg.j2,并修改其中的內(nèi)容。

[root@node1 ansible_playbooks]# vim roles/zk_server/templates/zoo.cfg.j2

配置文件內(nèi)容過(guò)多,具體見(jiàn)github,地址是https://github.com/jkzhao/ansible-godseye。配置文件內(nèi)容也不在解釋?zhuān)谇懊娌┛椭械奈恼轮卸家褜?xiě)明。

4. 編寫(xiě)vars

[root@node1 zk_server]# vim vars/main.yml 
server1_hostname: hadoop27                                                                                                                    
server2_hostname: hadoop28
server3_hostname: hadoop29

另外在tasks中還使用了個(gè)變量{{myid}},該變量每臺(tái)主機(jī)的值是不一樣的,所以定義在了/etc/ansible/hosts文件中:

[zk_servers]172.16.206.27 myid=1172.16.206.28 myid=2172.16.206.29 myid=3

5. 設(shè)置主機(jī)組

/etc/ansible/hosts文件:

[zk_servers]172.16.206.27 myid=1172.16.206.28 myid=2172.16.206.29 myid=3

6. 使用角色

在roles同級(jí)目錄,創(chuàng)建一個(gè)zk.yml文件,里面定義好你的playbook。

[root@node1 ansible_playbooks]# vim zk.yml 
- hosts: zk_servers
  remote_user: root
  roles:  - zk_server

運(yùn)行playbook安裝Zookeeper集群:

[root@node1 ansible_playbooks]# ansible-playbook zk.yml

使用zk_server role需要根據(jù)實(shí)際環(huán)境修改vars/main.yml里的變量以及/etc/ansible/hosts文件里定義的主機(jī)。

3.4 Kafka role
[root@node1 kafka_server]# pwd/root/ansible_playbooks/roles/kafka_server
[root@node1 kafka_server]# lsfiles  handlers  meta  tasks  templates  vars

1. 上傳安裝包

將kafka_2.11-0.9.0.1.tar.gz、kafka-manager-1.3.0.6.zip和clean_kafkalog.sh上傳到files目錄。clean_kafkalog.sh是清理kafka日志的腳本。

2. 編寫(xiě)tasks

ansible編寫(xiě)hadoop群集 kafka tasks

3. 編寫(xiě)templates

[root@node1 kafka_server]# vim templates/server.properties.j2

配置文件內(nèi)容過(guò)多,具體見(jiàn)github,地址是https://github.com/jkzhao/ansible-godseye。配置文件內(nèi)容也不再解釋?zhuān)谇懊娌┛椭械奈恼轮卸家褜?xiě)明。

4. 編寫(xiě)vars

[root@node1 kafka_server]# vim vars/main.yml
zk_cluster: 172.16.7.151:2181,172.16.7.152:2181,172.16.7.153:2181kafka_manager_ip: 172.16.7.151

另外在template的文件中還使用了個(gè)變量{{broker_id}},該變量每臺(tái)主機(jī)的值是不一樣的,所以定義在了/etc/ansible/hosts文件中:

[kafka_servers]172.16.206.17 broker_id=0172.16.206.31 broker_id=1172.16.206.32 broker_id=2

5. 設(shè)置主機(jī)組

/etc/ansible/hosts文件:

[kafka_servers]172.16.206.17 broker_id=0172.16.206.31 broker_id=1172.16.206.32 broker_id=2

6. 使用角色

在roles同級(jí)目錄,創(chuàng)建一個(gè)kafka.yml文件,里面定義好你的playbook。

[root@node1 ansible_playbooks]# vim kafka.yml 
- hosts: kafka_servers
  remote_user: root
  roles:  - kafka_server

運(yùn)行playbook安裝kafka集群:

[root@node1 ansible_playbooks]# ansible-playbook kafka.yml

使用kafka_server role需要根據(jù)實(shí)際環(huán)境修改vars/main.yml里的變量以及/etc/ansible/hosts文件里定義的主機(jī)。

3.5 Elasticsearch role
[root@node1 es_server]# pwd/root/ansible_playbooks/roles/es_server
[root@node1 es_server]# lsfiles  handlers  meta  tasks  templates  vars

1. 上傳安裝包

將elasticsearch-2.3.3.tar.gz elasticsearch-analysis-ik-1.9.3.zip上傳到files目錄。

2. 編寫(xiě)tasks

ansible編寫(xiě)hadoop群集 Elasticsearch tasks

3. 編寫(xiě)templates

將模板e(cuò)lasticsearch.in.sh.j2和elasticsearch.yml.j2放入templates目錄下

注意模板里的變量名中間不能用.。比如:{{node.name}}這樣的變量名是不合法的。

配置文件內(nèi)容過(guò)多,具體見(jiàn)github,地址是https://github.com/jkzhao/ansible-godseye。配置文件內(nèi)容也不再解釋?zhuān)谇懊娌┛椭械奈恼轮卸家褜?xiě)明。

4. 編寫(xiě)vars

[root@node1 es_server]# vim vars/main.yml
ES_MEM: 2g
cluster_name: wisedu
master_ip: 172.16.7.151

另外在template的文件中還使用了個(gè)變量{{node_master}},該變量每臺(tái)主機(jī)的值是不一樣的,所以定義在了/etc/ansible/hosts文件中:

[es_servers]172.16.7.151 node_master=true172.16.7.152 node_master=false172.16.7.153 node_master=false

5. 設(shè)置主機(jī)組

/etc/ansible/hosts文件:

[es_servers]172.16.7.151 node_master=true172.16.7.152 node_master=false172.16.7.153 node_master=false

6. 使用角色

在roles同級(jí)目錄,創(chuàng)建一個(gè)es.yml文件,里面定義好你的playbook。

[root@node1 ansible_playbooks]# vim es.yml 
- hosts: es_servers
  remote_user: root
  roles:  - es_server

運(yùn)行playbook安裝Elasticsearch集群:

[root@node1 ansible_playbooks]# ansible-playbook es.yml

使用es_server role需要根據(jù)實(shí)際環(huán)境修改vars/main.yml里的變量以及/etc/ansible/hosts文件里定義的主機(jī)。

3.6 MySQL role
[root@node1 db_server]# pwd/root/ansible_playbooks/roles/db_server
[root@node1 db_server]# lsfiles  handlers  meta  tasks  templates  vars

1. 上傳安裝包

將制作好的rpm包mysql-5.6.27-1.x86_64.rpm放到/root/ansible_playbooks/roles/db_server/files/目錄下。
【注意】:這個(gè)rpm包是自己打包制作的,打包成rpm會(huì)使得部署的效率提高。關(guān)于如何打包成rpm見(jiàn)之前的博客《速成RPM包制作》。

2. 編寫(xiě)tasks

ansible編寫(xiě)hadoop群集 mysql tasks

3. 設(shè)置主機(jī)組

# vim /etc/ansible/hosts 
[db_servers]172.16.7.152

4. 使用角色

在roles同級(jí)目錄,創(chuàng)建一個(gè)db.yml文件,里面定義好你的playbook。

[root@node1 ansible_playbooks]# vim db.yml 
- hosts: mysql_server
  remote_user: root
  roles:  - db_server

運(yùn)行playbook安裝MySQL:

[root@node1 ansible_playbooks]# ansible-playbook db.yml

使用db_server role需要根據(jù)實(shí)際環(huán)境修改/etc/ansible/hosts文件里定義的主機(jī)。

3.7 Nginx role
[root@node1 web_server]# pwd/root/ansible_playbooks/roles/web_server
[root@node1 web_server]# lsfiles  handlers  meta  tasks  templates  vars

1. 上傳安裝包

將制作好的rpm包openresty-for-godseye-1.9.7.3-1.x86_64.rpm放到/root/ansible_playbooks/roles/web_server/files/目錄下。
【注意】:做成rpm包,在安裝時(shí)省去了編譯nginx的過(guò)程,提升了部署效率。這個(gè)包里面打包了很多與我們系統(tǒng)相關(guān)的文件。

2. 編寫(xiě)tasks

ansible編寫(xiě)hadoop群集 Nginx tasks

3. 編寫(xiě)templates

將模板nginx.conf.j2放入templates目錄下.

配置文件內(nèi)容過(guò)多,具體見(jiàn)github,地址是https://github.com/jkzhao/ansible-godseye。配置文件內(nèi)容也不再解釋?zhuān)谇懊娌┛椭械奈恼轮卸家褜?xiě)明。

4. 編寫(xiě)vars

[root@node1 web_server]# vim vars/main.yml 
elasticsearch_cluster: server 172.16.7.151:9200;server 172.16.7.152:9200;server 172.16.7.153:9200;
kafka_server1: 172.16.7.151kafka_server2: 172.16.7.152kafka_server3: 172.16.7.153

經(jīng)過(guò)測(cè)試,變量里面不能有逗號(hào)。

5. 設(shè)置主機(jī)組

/etc/ansible/hosts文件:

# vim /etc/ansible/hosts 
[nginx_servers]172.16.7.153

6. 使用角色

在roles同級(jí)目錄,創(chuàng)建一個(gè)nginx.yml文件,里面定義好你的playbook。

[root@node1 ansible_playbooks]# vim nginx.yml 
- hosts: nginx_servers
  remote_user: root
  roles:  - web_server

運(yùn)行playbook安裝Nginx:

[root@node1 ansible_playbooks]# ansible-playbook nginx.yml

使用web_server role需要根據(jù)實(shí)際環(huán)境修改vars/main.yml里的變量以及/etc/ansible/hosts文件里定義的主機(jī)。

3.8 Redis role
[root@node1 redis_server]# pwd/root/ansible_playbooks/roles/redis_server
[root@node1 redis_server]# lsfiles  handlers  meta  tasks  templates  vars

1. 上傳安裝包

將制作好的rpm包redis-3.2.2-1.x86_64.rpm放到/root/ansible_playbooks/roles/redis_server/files/目錄下。

2. 編寫(xiě)tasks

ansible編寫(xiě)hadoop群集 Redis tasks

3. 設(shè)置主機(jī)組

/etc/ansible/hosts文件:

# vim /etc/ansible/hosts 
[redis_servers]172.16.7.152

4. 使用角色

在roles同級(jí)目錄,創(chuàng)建一個(gè)redis.yml文件,里面定義好你的playbook。

[root@node1 ansible_playbooks]# vim redis.yml 
- hosts: redis_servers
  remote_user: root
  roles:  - redis_server

運(yùn)行playbook安裝redis:

[root@node1 ansible_playbooks]# ansible-playbook redis.yml

使用redis_server role需要根據(jù)實(shí)際環(huán)境修改vars/main.yml里的變量以及/etc/ansible/hosts文件里定義的主機(jī)。

3.9 Hadoop role

完全分布式集群部署,NameNode和ResourceManager高可用。
提前配置集群節(jié)點(diǎn)的/etc/hosts文件、節(jié)點(diǎn)時(shí)間同步、某些集群主節(jié)點(diǎn)登錄其他節(jié)點(diǎn)不需要輸入密碼。

[root@node1 hadoop]# pwd/root/ansible_playbooks/roles/hadoop
[root@node1 hadoop]# lsfiles  handlers  meta  tasks  templates  vars

1. 上傳安裝包

將hadoop-2.7.2.tar.gz放到/root/ansible_playbooks/roles/hadoop/files/目錄下。

2. 編寫(xiě)tasks

ansible編寫(xiě)hadoop群集

- name: install dependency package  yum: name={{ item }} state=present
  with_items:  - openssh  - rsync- name: create hadoop user
  user: name=hadoop password={{password}}
  vars:
    # created with:
    # python -c 'import crypt; print crypt.crypt("This is my Password", "$1$SomeSalt$")'
    # >>> import crypt
    # >>> crypt.crypt('wisedu123', '$1$bigrandomsalt$')
    # '$1$bigrando$wzfZ2ifoHJPvaMuAelsBq0'
    password: $1$bigrando$wzfZ2ifoHJPvaMuAelsBq0- name: copy and unzip hadoop
  #unarchive module owner and group only effect on directory.
  unarchive: src=hadoop-2.7.2.tar.gz dest=/usr/local/
- name: create hadoop soft link  file: src=/usr/local/hadoop-2.7.2 dest=/usr/local/hadoop state=link- name: create hadoop logs directory  file: dest=/usr/local/hadoop/logs mode=0775 state=directory- name: change hadoop soft link owner and group
  #recurse=yes make all files in a directory changed.  file: path=/usr/local/hadoop owner=hadoop group=hadoop recurse=yes- name: change hadoop-2.7.2 directory owner and group
  #recurse=yes make all files in a directory changed.  file: path=/usr/local/hadoop-2.7.2 owner=hadoop group=hadoop recurse=yes- name: set hadoop env
  lineinfile: dest={{env_file}} insertafter="{{item.position}}" line="{{item.value}}" state=present
  with_items:  - {position: EOF, value: "\n"}  - {position: EOF, value: "# Hadoop environment"}  - {position: EOF, value: "export HADOOP_HOME=/usr/local/hadoop"}  - {position: EOF, value: "export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin"}- name: enforce env
  shell: source {{env_file}}- name: install configuration file hadoop-env.sh.j2 for hadoop
  template: src=hadoop-env.sh.j2 dest=/usr/local/hadoop/etc/hadoop/hadoop-env.sh owner=hadoop group=hadoop- name: install configuration file core-site.xml.j2 for hadoop
  template: src=core-site.xml.j2 dest=/usr/local/hadoop/etc/hadoop/core-site.xml owner=hadoop group=hadoop- name: install configuration file hdfs-site.xml.j2 for hadoop
  template: src=hdfs-site.xml.j2 dest=/usr/local/hadoop/etc/hadoop/hdfs-site.xml owner=hadoop group=hadoop- name: install configuration file mapred-site.xml.j2 for hadoop
  template: src=mapred-site.xml.j2 dest=/usr/local/hadoop/etc/hadoop/mapred-site.xml owner=hadoop group=hadoop- name: install configuration file yarn-site.xml.j2 for hadoop
  template: src=yarn-site.xml.j2 dest=/usr/local/hadoop/etc/hadoop/yarn-site.xml owner=hadoop group=hadoop- name: install configuration file slaves.j2 for hadoop
  template: src=slaves.j2 dest=/usr/local/hadoop/etc/hadoop/slaves owner=hadoop group=hadoop- name: install configuration file hadoop-daemon.sh.j2 for hadoop
  template: src=hadoop-daemon.sh.j2 dest=/usr/local/hadoop/sbin/hadoop-daemon.sh owner=hadoop group=hadoop- name: install configuration file yarn-daemon.sh.j2 for hadoop
  template: src=yarn-daemon.sh.j2 dest=/usr/local/hadoop/sbin/yarn-daemon.sh owner=hadoop group=hadoop
# make sure zookeeper started, and then start hadoop.
# start journalnode- name: start journalnode
  shell: /usr/local/hadoop/sbin/hadoop-daemon.sh start journalnode
  become: true
  become_method: su
  become_user: hadoop
  when: datanode == "true"# format namenode- name: format active namenode hdfs
  shell: /usr/local/hadoop/bin/hdfs namenode -format
  become: true
  become_method: su
  become_user: hadoop
  when: namenode_active == "true"- name: start active namenode hdfs
  shell: /usr/local/hadoop/sbin/hadoop-daemon.sh start namenode
  become: true
  become_method: su
  become_user: hadoop
  when: namenode_active == "true"- name: format standby namenode hdfs
  shell: /usr/local/hadoop/bin/hdfs namenode -bootstrapStandby
  become: true
  become_method: su
  become_user: hadoop
  when: namenode_standby == "true"- name: stop active namenode hdfs
  shell: /usr/local/hadoop/sbin/hadoop-daemon.sh stop namenode
  become: true
  become_method: su
  become_user: hadoop
  when: namenode_active == "true"# format ZKFC- name: format ZKFC
  shell: /usr/local/hadoop/bin/hdfs zkfc -formatZK
  become: true
  become_method: su
  become_user: hadoop
  when: namenode_active == "true"# start hadoop cluster- name: start namenode
  shell: /usr/local/hadoop/sbin/start-dfs.sh
  become: true
  become_method: su
  become_user: hadoop
  when: namenode_active == "true"- name: start yarn
  shell: /usr/local/hadoop/sbin/start-yarn.sh
  become: true
  become_method: su
  become_user: hadoop
  when: namenode_active == "true"- name: start standby rm
  shell: /usr/local/hadoop/sbin/yarn-daemon.sh start resourcemanager
  become: true
  become_method: su
  become_user: hadoop
  when: namenode_standby == "true"

3. 編寫(xiě)templates

將模板core-site.xml.j2、hadoop-daemon.sh.j2、hadoop-env.sh.j2、hdfs-site.xml.j2、mapred-site.xml.j2、slaves.j2、yarn-daemon.sh.j2、yarn-site.xml.j2放入templates目錄下。

配置文件內(nèi)容過(guò)多,具體見(jiàn)github,地址是https://github.com/jkzhao/ansible-godseye。配置文件內(nèi)容也不再解釋?zhuān)谇懊娌┛椭械奈恼轮卸家褜?xiě)明。

4. 編寫(xiě)vars

[root@node1 hadoop]# vim vars/main.yml 
env_file: /etc/profile
# hadoop-env.sh.j2 file variables.
JAVA_HOME: /usr/java/jdk1.8.0_73
# core-site.xml.j2 file variables.
ZK_NODE1: node1:2181ZK_NODE2: node2:2181ZK_NODE3: node3:2181# hdfs-site.xml.j2 file variables.
NAMENODE1_HOSTNAME: node1
NAMENODE2_HOSTNAME: node2
DATANODE1_HOSTNAME: node3
DATANODE2_HOSTNAME: node4
DATANODE3_HOSTNAME: node5
# mapred-site.xml.j2 file variables.
MR_MODE: yarn
# yarn-site.xml.j2 file variables.
RM1_HOSTNAME: node1
RM2_HOSTNAME: node2

5. 設(shè)置主機(jī)組

/etc/ansible/hosts文件:

# vim /etc/ansible/hosts 
[hadoop]172.16.7.151 namenode_active=true namenode_standby=false datanode=false172.16.7.152 namenode_active=false namenode_standby=true datanode=false172.16.7.153 namenode_active=false namenode_standby=false datanode=true172.16.7.154 namenode_active=false namenode_standby=false datanode=true172.16.7.155 namenode_active=false namenode_standby=false datanode=true

6. 使用角色

在roles同級(jí)目錄,創(chuàng)建一個(gè)hadoop.yml文件,里面定義好你的playbook。

[root@node1 ansible_playbooks]# vim hadoop.yml 
- hosts: hadoop
  remote_user: root
  roles:  - jdk8  - hadoop

運(yùn)行playbook安裝hadoop集群:

[root@node1 ansible_playbooks]# ansible-playbook hadoop.yml

使用hadoop role需要根據(jù)實(shí)際環(huán)境修改vars/main.yml里的變量以及/etc/ansible/hosts文件里定義的主機(jī)。

3.10 Spark role

Standalone模式部署spark (無(wú)HA)

[root@node1 spark]# pwd/root/ansible_playbooks/roles/spark
[root@node1 spark]# lsfiles  handlers  meta  tasks  templates  vars

1. 上傳安裝包

將scala-2.10.6.tgz和spark-1.6.1-bin-hadoop2.6.tgz放到/root/ansible_playbooks/roles/hadoop/files/目錄下。

2. 編寫(xiě)tasks

- name: copy and unzip scala

 unarchive: src=scala-2.10.6.tgz dest=/usr/local/

- name: set scala env

 lineinfile: dest={{env_file}} insertafter="{{item.position}}" line="{{item.value}}" state=present

 with_items:

 - {position: EOF, value: "\n"}

 - {position: EOF, value: "# Scala environment"}

 - {position: EOF, value: "export SCALA_HOME=/usr/local/scala-2.10.6"}

 - {position: EOF, value: "export PATH=$SCALA_HOME/bin:$PATH"}

- name: copy and unzip spark

 unarchive: src=spark-1.6.1-bin-hadoop2.6.tgz dest=/usr/local/

- name: rename spark directory

 command: mv /usr/local/spark-1.6.1-bin-hadoop2.6 /usr/local/spark-1.6.1

- name: set spark env

 lineinfile: dest={{env_file}} insertafter="{{item.position}}" line="{{item.value}}" state=present

 with_items:

 - {position: EOF, value: "\n"}

 - {position: EOF, value: "# Spark environment"}

 - {position: EOF, value: "export SPARK_HOME=/usr/local/spark-1.6.1"}

 - {position: EOF, value: "export PATH=$SPARK_HOME/bin:$PATH"}

- name: enforce env

 shell: source {{env_file}}

- name: install configuration file for spark

 template: src=slaves.j2 dest=/usr/local/spark-1.6.1/conf/slaves

- name: install configuration file for spark

 template: src=spark-env.sh.j2 dest=/usr/local/spark-1.6.1/conf/spark-env.sh

- name: start spark cluster

 shell: /usr/local/spark-1.6.1/sbin/start-all.sh

 tags:

 - start

Spark tasks

3. 編寫(xiě)templates

將模板slaves.j2和spark-env.sh.j2放到/root/ansible_playbooks/roles/spark/templates/目錄下。

配置文件內(nèi)容過(guò)多,具體見(jiàn)github,地址是https://github.com/jkzhao/ansible-godseye。配置文件內(nèi)容也不再解釋?zhuān)谇懊娌┛椭械奈恼轮卸家褜?xiě)明。

4. 編寫(xiě)vars

[root@node1 spark]# vim vars/main.yml 
env_file: /etc/profile
# spark-env.sh.j2 file variables
JAVA_HOME: /usr/java/jdk1.8.0_73
SCALA_HOME: /usr/local/scala-2.10.6SPARK_MASTER_HOSTNAME: node1
SPARK_HOME: /usr/local/spark-1.6.1SPARK_WORKER_MEMORY: 256M
HIVE_HOME: /usr/local/apache-hive-2.1.0-bin
HADOOP_CONF_DIR: /usr/local/hadoop/etc/hadoop/# slave.j2 file variables
SLAVE1_HOSTNAME: node2
SLAVE2_HOSTNAME: node3

5. 設(shè)置主機(jī)組

/etc/ansible/hosts文件:

# vim /etc/ansible/hosts 
[spark]172.16.7.151172.16.7.152172.16.7.153

6. 使用角色

在roles同級(jí)目錄,創(chuàng)建一個(gè)spark.yml文件,里面定義好你的playbook。

[root@node1 ansible_playbooks]# vim spark.yml 
- hosts: spark
  remote_user: root
  roles:  - spark

運(yùn)行playbook安裝spark集群:

[root@node1 ansible_playbooks]# ansible-playbook spark.yml

使用spark role需要根據(jù)實(shí)際環(huán)境修改vars/main.yml里的變量以及/etc/ansible/hosts文件里定義的主機(jī)。

【注】:所有的文件都在github上,https://github.com/jkzhao/ansible-godseye。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁(yè)名稱(chēng):ansible編寫(xiě)hadoop群集-創(chuàng)新互聯(lián)
當(dāng)前URL:http://muchs.cn/article38/djhssp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、云服務(wù)器、微信小程序、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化