“使用Ansible搭建分布式大数据基础环境”系列文章完整包含了如何使用Ansible这一分布式运维利器,来帮我们快速搭建Hadoop2/Spark2/Hive2/ZooKeeper3/Flink1.7/ElasticSearch5等一整套大数据解决方案。本篇是系列文章的第六篇。更多后续文章敬请关注后续文章。
(一)使用Ansible搭建分布式大数据基础环境-环境准备
(二)使用Ansible搭建分布式大数据基础环境-Ansible项目创建
(三)使用Ansible搭建分布式大数据基础环境-编写第一个playbook
(四)使用Ansible搭建分布式大数据基础环境-Ansible常用Module介绍
(五)使用Ansible搭建分布式大数据基础环境-ZooKeeper集群模式搭建
(六)使用Ansible搭建分布式大数据基础环境-Hadoop高可用集群搭建
(七)使用Ansible搭建分布式大数据基础环境-MySQL安装
终于到了我们的重头戏——Hadoop分布式集群的搭建了。Hadoop做为整个开源大数据解决方案的核心,是Hive/Hbase等技术的基石,
Spark/Flink等时下最热门的技术也可以通过托管到Hadoop(实际上是Yarn)来实现分布式。
整个Hadoop集群搭建的PlayBook我们主要分两个步骤:
- 下载Hadoop安装包并解压,完成环境变量配置
- 配置core-site.xml,hdfs-site.xml,salves,yarn-site.xml,mapred-site.xml并copy到Hadoop安装目录。
- 运行ansible命令完成Hadoop集群搭建然后远程SSH到namenode节点直接使用NameNode集群上的start-dfs.sh/start-yarn.sh启动整个集群,并验证集群启动成功
1. 下载并解压,完成环境变量配置
tasks/main.yaml
---
# 创建DataNode数据存放目录,data_base在外层group_vars里面定义
- name: Create DataNode Data Directory
file: path={
{data_base}}/hdfs/datan``````ode state=directory
# 创建NameNode数据存放目录
- name: Create NameNode Data Directory
file: path={
{data_base}}/hdfs/namenode state=directory
# 创建NameNode数据存放目录
- name: Create JOURNAL Data Directory
file: path={
{data_base}}/jnode state=directory
# 开始下载,实际下载Mirror上下载地址格式:http://mirror.bit.edu.cn/apache/hadoop/core/hadoop-2.7.7/hadoop-2.7.7.tar.gz, {
{filename}}等变量在当前role的vars/main.yaml定义
# 这里有个tricky,就是get_url 的dest参数的值如果到具体文件,那么如果当前机器上该文件存在,get_url没有制定force=yes的情况下就不会重新下载,如果dest只是到目录,那么每次都会重新下载
- name: Download hadoop file
get_url: url='{
{download_server}}/{
{path}}/{
{filename}}-{
{version}}/{
{filename}}-{
{version}}.{
{suffix}}' dest="{
{download_base}}/{
{filename}}-{
{version}}.{
{suffix}}" remote_src=yes
register: download_result
# 校验下载文件是否成功创建
- name: Check whether registered
stat:
path: "{
{app_base}}/{
{filename}}-{
{version}}"
register: node_files
# debug调试输出
- 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}}" dest={
{app_base}}/{
{filename}} state=link
# 添加HADOOP_HOME环境变量,下面几条指令作用相通,become表示要切换到root执行
- name: Add ENV HADOOP_HOME
become: yes
lineinfile: dest=/etc/profile.d/app_bin.sh line="export HADOOP_HOME={
{app_base}}/{
{filename}}"
- name: Add ENV HADOOP_PREFIX
become: yes
lineinfile: dest=/profile.d/app_bin.sh line="export HADOOP_PREFIX=$HADOOP_HOME"
- name: Add ENV HADOOP_COMMON_HOME
become: yes
lineinfile: dest=/profile.d/app_bin.sh line="export HADOOP_HOME={
{app_base}}/{
{filename}}"
- name: Add ENV YARN_CONF_DIR
become: yes
lineinfile: dest=/profile.d/app_bin.sh line="export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop"
- name: Add ENV HADOOP_CONF_DIR
become: yes
lineinfile: dest=/profile.d/app_bin.sh line="export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop"
- name: Export PATH
become: yes
lineinfile: dest=/profile.d/app_bin.sh line="export PATH=$PATH:/$HADOOP_HOME/bin"
其中,使用到的hadoop相关变量都定义在当前roles/hadoop/vars/main.yaml中,只有Hadoop role使用到
var/main.yaml
path: hadoop/core
filename: hadoop
version: 2.7.7
suffix: tar.gz
appname: hadoop
# 以下是NameNode/DataNode启动使用JVM参数
HADOOP_HEAPSIZE: 1024
HADOOP_NAMENODE_INIT_HEAPSIZE: 1024
HADOOP_NAMENODE_OPTS: -Xms1g -Xmx1g -XX:+UseG1GC -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -XX:G1RSetUpdatingPauseTimePercent=5 -XX:InitiatingHeapOccupancyPercent=70 -XX:ParallelGCThreads=20 -XX:ConcGCThreads=20 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+PrintPromotionFailure -XX:PrintFLSStatistics=1 -Xloggc:/data/bigdata/log/namenode-gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M
HADOOP_DATANODE_OPTS: -Xms1g -Xmx1g -XX:+UseG1GC -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -XX:G1RSetUpda