大数据环境搭建步骤详解(Hadoop,Hive,Zookeeper,Kafka,Flume,Hbase,Spark等安装与配置)
大数据环境搭建步骤详解(Hadoop,Hive,Zookeeper,Kafka,Flume,Hbase,Spark等安装与配置)
前言:本篇文章是以Hadoop为基础,搭建各种可能会用到的环境的基本步骤,包括:Hadoop,Hive,Zookeeper,Kafka,Flume,Hbase,Spark等。在实际应用中可能未必需要用到所有的这些,请读者们按需取舍。另外,搭建时注意按顺序,因为存在环境依赖,比如说搭建第八步Spark前,五.1的scala一定要配置好了;搭建第七步Hbase前,第四步的Zookeeper必须已经配置好了。一定要注意哦!
另外,本人为了给广大读者提供方便,不需要每次都自己去找相关安装包下载,我已将本篇文章搭建时涉及的安装包都下载好放入百度云(链接:https://pan.baidu.com/s/1gjQuTECI2LliFc5qDdqTIg 提取码:l5p3 ),大家直接一次性下载下来到你的主机就行了,到时候后直接上传到你们自己的虚拟机系统里就可以了(上传主机文件到虚拟机里可以用WinSCP软件)
系统说明
- 系统:CentOS 7.6
- 节点信息:
节点 | ip |
---|---|
master | 192.168.185.150 |
slave1 | 192.168.185.151 |
slave2 | 192.168.185.152 |
搭建步骤详述
一、节点基础配置
1、配置各节点网络
# 注意:centos自从7版本以后网卡名变成ens33而不是我这里的eth0了,我是习惯eth0了所以在安装的时候修改了网卡名,如果你的centos网卡名是ens33不要紧,就把我这里eth0的地方都换成你的ens33,对后面没影响。
[root@master ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
BOOTPROTO="static"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR=192.168.185.150
NETMASK=255.255.255.0
GATEWAY=192.168.185.2
[root@master ~]# vim /etc/resolv.conf
nameserver 192.168.185.2
# 对其他两个slave节点也同样做上述操作,只不过在IPADDR值不一样,分别填其节点对应的ip
2、修改每个节点主机名,添加各节点映射
# 在其他两个子节点的hostname处分别填slave1和slave2
[root@master ~]# vim /etc/hostname
master
[root@master ~]# vim /etc/hosts
192.168.185.150 master
192.168.185.151 slave1
192.168.185.152 slave2
3、关闭防火墙
# 三个节点都要做
# 把SELINUX那值设为disabled
[root@master ~]# vim /etc/selinux/config
SELINUX=disabled
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
[root@master ~]# systemctl status firewalld
4、都重启以生效
[root@master ~]# reboot
[root@master ~]# ping www.baidu.com
# 注意下,重启后若ping百度不通,可能是因为namesever那重启后自动被改了,所以导致ping百度不通,如果这样的话就再重新写下上面的resolv.conf
[root@master ~]# vim /etc/resolv.conf
nameserver 192.168.185.2
# 这下应该就通了,ping下百度试试看
[root@master ~]# ping www.baidu.com
PING www.a.shifen.com (119.75.217.109) 56(84) bytes of data.
64 bytes from 119.75.217.109: icmp_seq=1 ttl=128 time=30.6 ms
64 bytes from 119.75.217.109: icmp_seq=2 ttl=128 time=30.9 ms
64 bytes from 119.75.217.109: icmp_seq=3 ttl=128 time=30.9 ms
5、配置节点间ssh免密登陆
[root@master ~]# ssh-keygen -t rsa
# 上面这条命令,遇到什么都别管,一路回车键敲下去
# 拷贝本密钥到三个节点上
[root@master ~]# ssh-copy-id master
[root@master ~]# ssh-copy-id slave1
[root@master ~]# ssh-copy-id slave2
# master节点上做完后,再在其他两个节点上重复上述操作
都做完后,用ssh命令节点间相互测试下:
[root@master ~]# ssh slave1
# 就会发现在master节点上免密登陆到了slave1,再敲logout就退出slave1了
6、安装java
# 之后我们所有的环境配置包都放到/usr/local/下
# 新建java目录,把下载好的jdk的二进制包拷到下面(你可以直接在centos里下载,或者在你主机下载好,上传到虚拟机的centos上)
[root@master ~]# cd /usr/local
[root@master local]# mkdir java
[root@master local]# cd java
[root@master java]# tar -zxvf jdk-8u191-linux-x64.tar.gz
# 配置环境变量,在profile文件最后添加java的环境变量
[root@master ~]# vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
[root@master ~]# source /etc/profile
[root@master ~]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
# 在其他两个节点上重复上述操作
到此为止,基本配置就结束了。
二、Hadoop安装和配置
– 介绍:
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。
HDFS,Hadoop Distributed File System,是一个分布式文件系统,用来存储 Hadoop 集群中所有存储节点上的文件,包含一个 NameNode 和大量 DataNode。NameNode,它在 HDFS 内部提供元数据服务,负责管理文件系统名称空间和控制外部客户机的访问,决定是否将文件映射到 DataNode 上。DataNode,它为 HDFS 提供存储块,响应来自 HDFS 客户机的读写请求。
MapReduce是一种编程模型,用于大规模数据集的并行运算。概念”Map(映射)“和”Reduce(归约)”,是它们的主要思想,即指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
1、下载解压
# 在/usr/local下创建hadoop文件夹,将下载好的hadoop-2.7.7压缩包上传进去解压
[root@master ~]# cd /usr/local
[root@master local]# mkdir hadoop
[root@master local]# cd hadoop
[root@master hadoop]# tar -zxvf hadoop-2.7.7.tar
- 1
- 2
- 3
- 4
- 5
2、配置环境变量
[root@master hadoop]# vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
[root@master hadoop]# source /etc/profile
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
3、 配置core-site.xml
# 配置文件主要在hadoop-2.7.7/etc/hadoop下面
[root@master hadoop]# cd hadoop-2.7.7/etc/hadoop
# 把该文件<configuration>那块按如下修改
[root@master hadoop]# vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/data</value>
</property>
</configuration>
# 配置文件中的/usr/local/data是用来存储临时文件的,所以该文件夹需要手动创建
[root@master hadoop]# mkdir /usr/local/data
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
4、配置hdfs-site.xml
[root@master hadoop]# vim hdfs-site.xml
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/data/namenode</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/data/datanode</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
5、配置mapred-site.xml
# 先修改文件名字
[root@master hadoop]# mv mapred-site.xml.template mapred-site.xml
[root@master hadoop]# vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
6、配置yarn-site.xml
[root@master hadoop]# vim yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
7、修改slaves
[root@master hadoop]# vim slaves
slave1
slave2
- 1
- 2
- 3
8、修改hadoop-env.sh文件
# 在“export JAVA_HOME=”那一行把java环境修改成自己的路径
[root@master hadoop]# vim hadoop-env.sh
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
- 1
- 2
- 3
9、直接把配置好的hadoop包传到剩下两个子节点同样的位置下
[root@master hadoop]# cd /usr/local
[root@master local]# scp -r hadoop root@192.168.185.151:/usr/local/
[root@master local]# scp -r hadoop root@192.168.185.152:/usr/local/
- 1
- 2
- 3
10、在其他两个子节点别漏掉的操作
# 别忘了!在两个子节点/usr/local/下也要创建好data目录。
# 别忘了!在两个子节点重复下步骤2, 配置好hadoop环境变量。
- 1
- 2
- 3
11、测试是否成功
# 只要在主节点上启动,执行过程可能稍慢,耐心等待
# 先格式化
[root@master ~]# hdfs namenode -format
# 启动hdfs
[root@master ~]# cd /usr/local/hadoop/hadoop-2.7.7/
[root@master hadoop-2.7.7]# sbin/start-dfs.sh
# 启动yarn
[root@master hadoop-2.7.7]# sbin/start-yarn.sh
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
在主节点上输入jps命令查看,以下就对了:
在子节点上输入jps命令查看,以下就对了:
在浏览器上访问可视化页面:http://192.168.185.150:50070
到此为止,hadoop配置就结束了。
三、Hive安装和配置
– 介绍:
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过和SQL类似的HiveQL语言快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。
Hive 没有专门的数据格式。所有Hive 的数据都存储在Hadoop兼容的文件系统(例如HDFS)中。Hive 在加载数据过程中不会对数据进行任何的修改,只是将数据移动到HDFS中Hive 设定的目录下,因此,Hive 不支持对数据的改写和添加,所有的数据都是在加载的时候确定的。
1、环境配置
# 注意:Hive只需要在master节点上安装配置
[root@master ~]# cd /usr/local
[root@master local]# mkdir hive
[root@master local]# cd hive
[root@master hive]# tar -zxvf apache-hive-2.3.4-bin.tar.gz
[root@master hive]# mv apache-hive-2.3.4-bin hive-2.3.4
# 添加Hive环境变量
[root@master hive]# vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HIVE_HOME=/usr/local/hive/hive-2.3.4
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin
[root@master hive]# source /etc/profile
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
2、修改 hive-site.xml
[root@master hive]# cd hive-2.3.4/conf
[root@master conf]# mv hive-default.xml.template hive-site.xml
# 在hive-site.xml中找到下面的几个对应name的property,然后把value值更改
# 这里提醒一下,因为hive-site.xml几千多行,根据name找property的话不太方便,有两种建议:
# 1、把这个xml文件弄到你自己的主机上,用软件(比如notepad++)修改好,在上传回centos上相应位置
# 2、在之前给你的百度云链接里,我也上传了修改好的hive-site.xml文件,如果你版本跟我用的一样,可以直接拿去用
[root@master conf]# vim hive-site.xml
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive_metadata?createDatabaseIfNotExist=true</value>
<description>
JDBC connect string for a JDBC metastore.
To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>Username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.querylog.location</name>
<value>/usr/local/hive/hive-2.3.4/tmp/hadoop</value>
<description>Location of Hive run time structured log file</description>
</property>
<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/usr/local/hive/hive-2.3.4/tmp/hadoop/operation_logs</value>
<description>Top level directory where operation logs are stored if logging functionality is enabled</description>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/usr/local/hive/hive-2.3.4/tmp/hadoop</value>
<description>Local scratch space for Hive jobs</description>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/usr/local/hive/hive-2.3.4/tmp/${hive.session.id}_resources</value>
<description>Temporary local directory for added resources in the remote file system.</description>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<description>
Enforce metastore schema version consistency.
True: Verify that version information stored in is compatible with one from Hive jars. Also disable automatic
schema migration attempt. Users are required to manually migrate schema after Hive upgrade which ensures
proper metastore schema migration. (Default)
False: Warn if the version information stored in metastore doesn't match with one from in Hive jars.
</description>
</property>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
3、修改hive-env.sh文件
[root@master conf]# mv hive-env.sh.template hive-env.sh
# 找到下面的位置,做对应修改
[root@master conf]# vim hive-env.sh
# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/usr/local/hive/hive-2.3.4/conf
# Folder containing extra libraries required for hive compilation/execution can be controlled by:
# export HIVE_AUX_JARS_PATH=
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export HIVE_HOME=/usr/local/hive/hive-2.3.4
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
4、把下载好的mysql-connector-java.jar这个jar包拷到/usr/local/hive/hive-2.3.4/lib/下面,在给你们的百度云链接里都有
5、安装并配置mysql(因为hive的元数据是存储在mysql里的)
[root@master ~]# cd /usr/local/src/
[root@master src]# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
[root@master src]# rpm -ivh mysql-community-release-el7-5.noarch.rpm
[root@master src]# yum install mysql-community-server
# 这里时间较长,耐心等待...
# 安装完成后,重启服务
[root@master src]# service mysqld restart
[root@master src]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.42 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
# mysql安装成功
6、在mysql上创建hive元数据库,创建hive账号,并进行授权
# 在mysql上连续执行下述命令:
# create database if not exists hive_metadata;
# grant all privileges on hive_metadata.* to 'hive'@'%' identified by 'hive';
# grant all privileges on hive_metadata.* to 'hive'@'localhost' identified by 'hive';
# grant all privileges on hive_metadata.* to 'hive'@'master' identified by 'hive';
# flush privileges;
# use hive_metadata;
[root@master src]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.42 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database if not exists hive_metadata;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on hive_metadata.* to 'hive'@'%' identified by 'hive';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on hive_metadata.* to 'hive'@'localhost' identified by 'hive';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on hive_metadata.* to 'hive'@'master' identified by 'hive';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> use hive_metadata;
Database changed
mysql> exit
Bye
7、初始化
[root@master src]# schematool -dbType mysql -initSchema
- 1
8、测试验证hive
# 我们先创建一个txt文件存点数据等下导到hive中去
[root@master src]# vim users.txt
1,浙江工商大学
2,杭州
3,I love
4,ZJGSU
5,加油哦
# 进入hive,出现命令行就说明之前搭建是成功的
[root@master src]# hive
hive>
# 创建users表,这个row format delimited fields terminated by ','代表我们等下导过来的文件中字段是以逗号“,”分割字段的
# 所以我们上面users.txt不同字段中间有逗号
hive> create table users(id int, name string) row format delimited fields terminated by ',';
OK
Time taken: 7.29 seconds
# 导数据
hive> load data local inpath '/usr/local/src/users.txt' into table users;
Loading data to table default.users
OK
Time taken: 1.703 seconds
# 查询
hive> select * from users;
OK
1 浙江工商大学
2 杭州
3 I love
4 ZJGSU
5 加油哦
Time taken: 2.062 seconds, Fetched: 5 row(s)
# ok,测试成功!
到此为止,hive配置就结束了,其实hive的配置挺繁琐的,不要急慢慢来,加油!
四、ZooKeeper安装和配置
– 介绍:
ZooKeeper是一个分布式的应用程序协调服务,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。其目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
那么Zookeeper能做什么事情呢?举个简单的例子:假设我们有20个搜索引擎的服务器(每个负责总索引中的一部分的搜索任务)和一个总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集),一个备用的总服务器(负责当总服务器宕机时替换总服务器),一个web的cgi(向总服务器发出搜索请求)。搜索引擎的服务器中的15个服务器提供搜索服务,5个服务器正在生成索引。这20个搜索引擎的服务器经常要让正在提供搜索服务的服务器停止提供服务开始生成索引,或生成索引的服务器已经把索引生成完成可以提供搜索服务了。使用Zookeeper可以保证总服务器自动感知有多少提供搜索引擎的服务器并向这些服务器发出搜索请求,当总服务器宕机时自动启用备用的总服务器。
1、环境配置
[root@master local]# mkdir zookeeper
[root@master local]# cd zookeeper
# 将下载好的zookeeper压缩包上传进来解压
[root@master zookeeper]# tar -zxvf zookeeper-3.4.10.tar.gz
# 配置zookeeper环境变量
[root@master zookeeper]# vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HIVE_HOME=/usr/local/hive/hive-2.3.4
export ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.10
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin
[root@master zookeeper]# source /etc/profile
2、配置zoo.cfg文件
[root@master zookeeper]# cd zookeeper-3.4.10/conf
[root@master conf]# mv zoo_sample.cfg zoo.cfg
# 把 dataDir 那一行修改成自己的地址,在文件最后再加上三行server的配置
[root@master conf]# vim zoo.cfg
dataDir=/usr/local/zookeeper/zookeeper-3.4.10/data
server.0=master:2888:3888
server.1=slave1:2888:3888
server.2=slave2:2888:3888
3、配置myid文件
[root@master conf]# cd ..
[root@master zookeeper-3.4.10]# mkdir data
[root@master zookeeper-3.4.10]# cd data
[root@master data]# vim myid
0
4、配置另外两个节点
# 把上面配置好的zookeeper文件夹直接传到两个子节点
[root@master data]# cd ../../..
[root@master local]# scp -r zookeeper root@192.168.185.151:/usr/local/
[root@master local]# scp -r zookeeper root@192.168.185.152:/usr/local/
# 注意在两个子节点上把myid文件里面的 0 给分别替换成 1 和 2
# 注意在两个子节点上像步骤1一样,在/etc/profile文件里配置zookeeper的环境变量,保存后别忘source一下
5、测试一下
# 在三个节点上分别执行命令,启动服务: zkServer.sh start
# 在三个节点上分别执行命令,查看状态: zkServer.sh status
# 正确结果应该是:三个节点中其中一个是leader,另外两个是follower
# 在三个节点上分别执行命令: jps
# 检查三个节点是否都有QuromPeerMain进程
到此为止,zookeeper配置就结束了,这个应该不难。
五、Kafka安装和配置
– 介绍:
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。Producer即生产者,向Kafka集群发送消息,在发送消息之前,会对消息进行分类,即主题(Topic),通过对消息指定主题可以将消息分类,消费者可以只关注自己需要的Topic中的消息。Consumer,即消费者,消费者通过与kafka集群建立长连接的方式,不断地从集群中拉取消息,然后可以对这些消息进行处理。
1、安装Scala
Kafka由Scala和Java编写,所以我们先需要安装配置Scala:
[root@master ~]# cd /usr/local
[root@master local]# mkdir scala
[root@master local]# cd scala/
# 下载好的scala压缩包上传进去解压
[root@master scala]# tar -zxvf scala-2.11.8.tgz
# 配置环境变量
[root@master scala]# vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HIVE_HOME=/usr/local/hive/hive-2.3.4
export ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.10
export SCALA_HOME=/usr/local/scala/scala-2.11.8
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin:$SCALA_HOME/bin
[root@master scala]# source /etc/profile
# 验证
[root@master scala-2.11.8]# scala -version
Scala code runner version 2.11.8 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc.
# 然后在剩下两个子节点中重复上述步骤!
2、安装配置Kafka
# 创建目录,把下载好的压缩包上传解压
[root@master local]# mkdir kafka
[root@master local]# cd kafka
[root@master kafka]# tar -zxvf kafka_2.11-2.1.0.tgz
[root@master kafka]# mv kafka_2.11-2.1.0 kafka-2.1.0
# 修改server.properties文件,找到对应的位置,修改如下
[root@master kafka]# vim kafka-2.1.0/config/server.properties
broker.id=0
listeners=PLAINTEXT://192.168.185.150:9092
advertised.listeners=PLAINTEXT://192.168.185.150:9092
zookeeper.connect=192.168.185.150:2181,192.168.185.151:2181,192.168.185.152:2181
# 把master节点上修改好的kafka整个文件夹传到其余两个子节点
[root@master kafka]# cd /usr/local
[root@master local]# scp -r kafka root@192.168.185.151:/usr/local/
[root@master local]# scp -r kafka root@192.168.185.152:/usr/local/
# 在另外两个节点上,对server.properties要有几处修改
# broker.id 分别修改成: 1 和 2
# listeners 在ip那里分别修改成子节点对应的,即 PLAINTEXT://192.168.185.151:9092 和 PLAINTEXT://192.168.185.152:9092
# advertised.listeners 也在ip那里分别修改成子节点对应的,即 PLAINTEXT://192.168.185.151:9092 和 PLAINTEXT://192.168.185.152:9092
# zookeeper.connect 不需要修改
3、测试
# 在三个节点都启动kafka
[root@master local]# cd kafka/kafka-2.1.0/
[root@master kafka-2.1.0]# bin/kafka-server-start.sh config/server.properties &
# 在主节点上创建主题TestTopic
[root@master kafka-2.1.0]# bin/kafka-topics.sh --zookeeper 192.168.185.150:2181,192.168.185.151:2181,192.168.185.152:2181 --topic TestTopic --replication-factor 1 --partitions 1 --create
# 在主节点上启动一个生产者
[root@master kafka-2.1.0]# bin/kafka-console-producer.sh --broker-list 192.168.185.150:9092,192.168.185.151:9092,192.168.185.152:9092 --topic TestTopic
# 在其他两个节点上分别创建消费者
[root@slave1 kafka-2.1.0]# bin/kafka-console-consumer.sh --bootstrap-server 192.168.185.151:9092 --topic TestTopic --from-beginning
[root@slave2 kafka-2.1.0]# bin/kafka-console-consumer.sh --bootstrap-server 192.168.185.152:9092 --topic TestTopic --from-beginning
# 在主节点生产者命令行那里随便输入一段话:
> hello world
# 然后你就会发现在其他两个消费者节点那里也出现了这句话,即消费到了该数据
到此为止,kafka配置就结束了。
六、Flume安装和配置
– 介绍:
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统),支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力。
使用Flume,我们可以将从多个服务器中获取的数据迅速的移交给Hadoop中,可以高效率的将多个网站服务器中收集的日志信息存入HDFS/HBase中。
注意:flume只需要在主节点配置,不需要在其他节点配置
1、环境配置
# 创建目录,将下载好的压缩包上传并解压
[root@master local]# mkdir flume
[root@master local]# cd flume/
[root@master flume]# tar -zxvf apache-flume-1.8.0-bin.tar.gz
[root@master flume]# mv apache-flume-1.8.0-bin flume-1.8.0
# 环境变量
[root@master flume]# vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HIVE_HOME=/usr/local/hive/hive-2.3.4
export ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.10
export SCALA_HOME=/usr/local/scala/scala-2.11.8
export FLUME_HOME=/usr/local/flume/flume-1.8.0
export FLUME_CONF_DIR=$FLUME_HOME/conf
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin:$SCALA_HOME/bin:$FLUME_HOME/bin
[root@master flume]# source /etc/profile
2、修改flume-conf.properties文件
[root@master flume]# cd flume-1.8.0/conf
[root@master conf]# mv flume-conf.properties.template flume-conf.properties
# 在文件最后加上下面的内容
[root@master conf]# vim flume-conf.properties
#agent1表示代理名称
agent1.sources=source1
agent1.sinks=sink1
agent1.channels=channel1
#配置source1
agent1.sources.source1.type=spooldir
agent1.sources.source1.spoolDir=/usr/local/flume/logs
agent1.sources.source1.channels=channel1
agent1.sources.source1.fileHeader = false
agent1.sources.source1.interceptors = i1
agent1.sources.source1.interceptors.i1.type = timestamp
#配置channel1
agent1.channels.channel1.type=file
agent1.channels.channel1.checkpointDir=/usr/local/flume/logs_tmp_cp
agent1.channels.channel1.dataDirs=/usr/local/flume/logs_tmp
#配置sink1
agent1.sinks.sink1.type=hdfs
agent1.sinks.sink1.hdfs.path=hdfs://master:9000/logs
agent1.sinks.sink1.hdfs.fileType=DataStream
agent1.sinks.sink1.hdfs.writeFormat=TEXT
agent1.sinks.sink1.hdfs.rollInterval=1
agent1.sinks.sink1.channel=channel1
agent1.sinks.sink1.hdfs.filePrefix=%Y-%m-%d
# 我们看到上面的配置文件中代理 agent1.sources.source1.spoolDir 监听的文件夹是/usr/local/flume/logs,所以我们要手动创建一下
[root@master conf]# cd ../..
[root@master flume]# mkdir logs
# 上面的配置文件中 agent1.sinks.sink1.hdfs.path=hdfs://master:9000/logs下,即将监听到的/usr/local/flume/logs下的文件自动上传到hdfs的/logs下,所以我们要手动创建hdfs下的目录
[root@master flume]# hdfs dfs -mkdir /logs
3、测试
# 启动服务
[root@master flume]# flume-ng agent -n agent1 -c conf -f /usr/local/flume/flume-1.8.0/conf/flume-conf.properties -Dflume.root.logger=DEBUG,console
# 先看下hdfs的logs目录下,目前什么都没有
[root@master flume]# hdfs dfs -ls -R /
# 我们在/usr/local/flume/logs随便创建个文件
[root@master flume]# cd logs
[root@master logs]# vim flume_test.txt
hello world !
guang
浙江工商大学
# 然后我们发现hdfs的logs下自动上传了我们刚刚创建的文件
[root@master logs]# hdfs dfs -ls -R /
[root@master logs]# hdfs dfs -cat /logs/2018-12-31.1546242551842
hello world !
guang
浙江工商大学
到此为止,flume配置就结束了。
七、Hbase安装和配置
– 介绍:
HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。
1、环境配置
创建目录,将下载好的压缩包上传并解压
[root@master local]# mkdir hbase
[root@master local]# cd hbase
[root@master hbase]# tar -zxvf hbase-2.1.1-bin.tar.gz
# 环境变量
[root@master hbase]# vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HIVE_HOME=/usr/local/hive/hive-2.3.4
export ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.10
export SCALA_HOME=/usr/local/scala/scala-2.11.8
export FLUME_HOME=/usr/local/flume/flume-1.8.0
export FLUME_CONF_DIR=$FLUME_HOME/conf
export HBASE_HOME=/usr/local/hbase/hbase-2.1.1
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin:$SCALA_HOME/bin:$FLUME_HOME/bin:$HBASE_HOME/bin
[root@master hbase]# source /etc/profile
2、修改hbase-env.sh文件
[root@master hbase]# cd hbase-2.1.1/conf
[root@master conf]# vim hbase-env.sh
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export HBASE_LOG_DIR=${HBASE_HOME}/logs
export HBASE_MANAGES_ZK=false
- 1
- 2
- 3
- 4
- 5
3、修改hbase-site.xml 文件
[root@master conf]# vim hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/zookeeper/zookeeper-3.4.10/data</value>
</property>
<property>
<name>hbase.master</name>
<value>hdfs://master:60000</value>
</property>
<property>
<name>hbase.master.info.port</name>
<value>16010</value>
</property>
<property>
<name>hbase.regionserver.info.port</name>
<value>16030</value>
</property>
</configuration>
4、修改regionservers文件
[root@master conf]# vim regionservers
master
slave1
slave2
5、其他两个子节点的配置
# 把上面配置好的hbase整个文件夹传过去
[root@master conf]# cd ../../..
[root@master local]# scp -r hbase root@192.168.185.151:/usr/local/
[root@master local]# scp -r hbase root@192.168.185.152:/usr/local/
# 别忘在另外两个节点也要在/etc/profile下配置环境变量并source一下使生效!
6、测试
[root@master local]# cd hbase/hbase-2.1.1
[root@master hbase-2.1.1]# bin/start-hbase.sh
[root@master hbase-2.1.1]# jps
# 正确结果:主节点上显示:HMaster / 子节点上显示:HRegionServer
在主机浏览器上访问:http://192.168.185.150:16010
到此为止,Hbase配置就结束了。
八、Spark安装和配置
– 介绍:
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎,是类似于Hadoop MapReduce的通用并行框架。Spark拥有Hadoop MapReduce所具有的优点,但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。Spark实际上是对Hadoop的一种补充,可以很好的在Hadoop 文件系统中并行运行。
1、环境配置
# 创建目录,将下载好的压缩包上传并解压
[root@master local]# mkdir spark
[root@master local]# cd spark
[root@master spark]# tar -zxvf spark-2.4.0-bin-hadoop2.7.tgz
[root@master spark]# mv spark-2.4.0-bin-hadoop2.7 spark-2.4.0
# 配置环境变量
[root@master spark]# vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HIVE_HOME=/usr/local/hive/hive-2.3.4
export ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.10
export SCALA_HOME=/usr/local/scala/scala-2.11.8
export FLUME_HOME=/usr/local/flume/flume-1.8.0
export FLUME_CONF_DIR=$FLUME_HOME/conf
export HBASE_HOME=/usr/local/hbase/hbase-2.1.1
export SPARK_HOME=/usr/local/spark/spark-2.4.0
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin:$SCALA_HOME/bin:$FLUME_HOME/bin:$HBASE_HOME/bin:$SPARK_HOME/bin
[root@master spark]# source /etc/profile
2、修改spark-env.sh文件
[root@master spark]# cd spark-2.4.0/conf/
[root@master conf]# mv spark-env.sh.template spark-env.sh
[root@master conf]# vim spark-env.sh
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export SCALA_HOME=/usr/local/scala/scala-2.11.8
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7
export HADOOP_CONF_DIR=/usr/local/hadoop/hadoop-2.7.7/etc/hadoop
3、修改slaves文件
[root@master conf]# mv slaves.template slaves
[root@master conf]# vim slaves
master
slave1
slave2
4、在其余两个子节点上操作
# 把上面配置好的spark整个文件夹传过去
[root@master conf]# cd ../../..
[root@master local]# scp -r spark root@192.168.185.151:/usr/local/
[root@master local]# scp -r spark root@192.168.185.152:/usr/local/
# 别忘在另外两个节点也要在/etc/profile下配置环境变量并source一下使生效!
5、启动
[root@master local]# cd spark/spark-2.4.0/
[root@master spark-2.4.0]# sbin/start-all.sh
- 1
- 2
启动完毕后在主机浏览器访问界面:http://192.168.185.150:8080/
OK成功,到此为止,Spark配置就结束了!现在我们来测试运行一个spark内部自带的计算圆周率的例子代码:
[root@master spark-2.4.0]# ./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local \
examples/jars/spark-examples_2.11-2.4.0.jar
- 1
- 2
- 3
- 4
在控制台输出中我们可以找到计算结果:
总结
以上就是《基于Hadoop的大数据环境搭建步骤详解(Hadoop,Hive,Zookeeper,Kafka,Flume,Hbase,Spark等安装与配置)》。一定要耐心操作一遍,遇到问题不要紧张,慢慢来,加油!
写完这篇也够长的,算是2019年的新年礼物了,休息休息啦!
Flink1.7.2安装部署的几种方式
前言:Flink的运行一般分为三种模式,即local、Standalone、On Yarn。
在安装Flink之前,需要对安装环境进行检查。本文是建立在Hadoop、Zookeeper等常规大数据软件都已经安装成功的前体下,由于在时间环境中,常常需要Hadoop的组件配合Flink,因此我们在官网下载安装包时,需要找到对应Hadoop版本的Flink安装包以及系统中Scala的版本,我使用的版本是Hadoop2.8.5+scala2.11.12。scala安装不多做赘述,只需修改一下环境变量即可,比安装QQ还简单。
下载Flink安装包
下载Flink二进制包:https://flink.apache.org/downloads.html, 选择flink-1.7.2-bin-hadoop28-scala_2.11.tgz。保存到windows下之后,使用winScp传输到linux系统下/usr目录,这个目录只是小厨将所有的系统软件都放在这里,为了清晰的访问各个系统的文件夹。
解压安装:使用命令 tar -zvxf flink-1.7.2-bin-hadoop28-scala_2.11.tgz对文件进行解压,为了目录整洁,这里使用命令将解压完的文件重命名为flink: mv flink-1.7.2/ flink
一:local模式
Local模式比较简单,用于本地测试,因此不多做赘述。只需在主节点上解压安装包就代表成功安装了,在flink安装目录下使用./bin/start-cluster.sh命令,就可以通过master:8081监控集群状态,关闭集群命令:./bin/stop-cluster.sh。
二:Standalone模式
Standalone模式顾名思义,是在本地集群上调度执行,不依赖于外部调度机制例如YARN。此时需要对配置文件进行一些简单的修改,我们预计使用master节点当Job manage,master、slave1、slave2三台机器充当Task Managers。
1、修改环境变量,vi /etc/profile,添加以下内容
-
export FLINK_HOME=/usr/flink
-
export PATH=$FLINK_HOME/bin:$PATH
2、更改配置文件flink-conf.yaml,cd $FLINK_HOME/conf, vi flink-conf.yaml
-
主要更改的位置有:
-
jobmanager.rpc.address: master
-
taskmanager.numberOfTaskSlots: 2
-
parallelism.default: 4
上述我们只列出了一些常用需要修改的文件内容,下面我们再简单介绍一些
-
# jobManager 的IP地址
-
jobmanager.rpc.address: master
-
-
# JobManager 的端口号
-
jobmanager.rpc.port: 6123
-
-
# JobManager JVM heap 内存大小
-
jobmanager.heap.size: 1024m
-
-
# TaskManager JVM heap 内存大小
-
taskmanager.heap.size: 1024m
-
-
# 每个 TaskManager 提供的任务 slots 数量大小,默认为1
-
-
taskmanager.numberOfTaskSlots: 2
-
-
# 程序默认并行计算的个数,默认为1
-
parallelism.default: 4
3、配置masters文件
该文件用于指定主节点及其web访问端口,表示集群的Jobmanager,vi masters,添加master:8081
4、配置slaves文件,该文件用于指定从节点,表示集群的taskManager。添加以下内容
-
master
-
slave1
-
slave2
5、分发flink服务,并在从节点环境变量文件/etc/profile中添加相关内容
-
scp -r /usr/flink root@slave1:/usr
-
scp -r /usr/flink root@slave2:/usr
6、启动flink集群 (因为在环境变量中已经指定了flink的bin位置,因此可以直接输入start-cluster.sh)
7、验证flink进程,登录web界面
由上图可看出,在master节点上已经启动了flink的Jobmanager和Taskmanager进程,slave节点启动了Taskmanager进程,Flink集群的相关服务已正常启动,下面查看Web界面是否正常,登录配置的master的ip地址+端口号:192.168.83.129:8081,flink cluster情况如下:
至此,standalone模式已成功安装。
注:这里只是集群模式而已,在实际场景中,我们一般需要配置为HA,防止Jobmanager突然挂掉,导致整个集群或者任务执行失败的情况发生。下面介绍一下Standalone HA模式的搭建安装
三、Standalone HA模式
当Flink程序运行时,如果jobmanager崩溃,那么整个程序都会失败。为了防止jobmanager的单点故障,借助于zookeeper的协调机制,可以实现jobmanager的HA配置—-1主(leader)多从(standby)。这里的HA配置只涉及standalone模式,yarn模式暂不考虑。
本例中规划Jobmanager:master,slave1(一个active,一个standby);Taskmanager:slave1,slave2;zookeeper集群。
1、更改flink-conf.yaml配置文件
-
1.jobmanager端口
-
jobmanager.web.port: 8081(需要防止端口冲突)
-
1.jobmanager地址
-
注释jobmanager.rpc.address:flink配置项
-
HA模式下,jobmanager不需要指定,在master file中配置,由zookeeper选出leader与standby。
-
-
2.checkpoints目录
-
检查点生成的分布式快照的保存地点,默认是jobmanager的memory,但是HA模式必须配置在hdfs上,
-
且保存路径需要在hdfs上创建并指定路径
-
state.backend: filesystem
-
state.backend.fs.checkpointdir: hdfs://192.168.83.129:9000/flink-metadata/checkpoints
-
-
3.hadoopconf路径:
-
指定hadoop conf路径,这里需要告诉Flink,hadoop配置的路径,否则会报错
-
fs.hdfs.hadoopconf: $HADOOP_HOME/etc/hadoop
-
-
4.zookeeper信息
-
recovery.mode: zookeeper
-
recovery.zookeeper.quorum: master:2181,slave1:2181,slave2:2181
-
recovery.zookeeper.storageDir: hdfs://192.168.83.129:9000/flink-metadata/recovery
-
recovery.zookeeper.path.root: /flink
-
recovery.zookeeper.path.namespace: /flink
-
-
配置项说明:
-
storageDir存储jobmanager的元数据信息,包括用于恢复的信息;
-
recovery.zookeeper.path.root代表zookeeper中节点信息;
-
recovery.zookeeper.path.namespace,如果Flink集群有不止一个,那么这个值需要指定,不能用默认的名字
2、配置masters文件
-
master:8081
-
slave1:8081
注意: spark有个端口已经占用了8081,如果要和spark部署到同一个集群中,应当防止端口冲突
3、分发配置文件,将刚刚修改的配置文件slaves和flink-conf.yaml分发至另外两个节点。
4、重启flink集群:start-cluster.sh
四、Flink on yarn
Flink on yarn的模式适用于实际环境,最近也一直听到很多关于flink on yarn 的消息。由于比较重要,因此单独放一篇《Flink on Yarn模式部署始末》
一. Flink的下载
安装包下载地址:http://flink.apache.org/downloads.html ,选择对应Hadoop的Flink版本下载
[admin@node21 software]$ wget http://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.6.1/flink-1.6.1-bin-hadoop27-scala_2.11.tgz [admin@node21 software]$ ll -rw-rw-r-- 1 admin admin 301867081 Sep 15 15:47 flink-1.6.1-bin-hadoop27-scala_2.11.tgz
Flink 有三种部署模式,分别是 Local、Standalone Cluster 和 Yarn Cluster。
二. Local模式
对于 Local 模式来说,JobManager 和 TaskManager 会公用一个 JVM 来完成 Workload。如果要验证一个简单的应用,Local 模式是最方便的。实际应用中大多使用 Standalone 或者 Yarn Cluster,而local模式只是将安装包解压启动(./bin/start-local.sh)即可,在这里不在演示。
三. Standalone 模式
快速入门教程地址:https://ci.apache.org/projects/flink/flink-docs-release-1.6/quickstart/setup_quickstart.html
1. 软件要求
- Java 1.8.x或更高版本,
- ssh(必须运行sshd才能使用管理远程组件的Flink脚本)
集群部署规划
节点名称 | master | worker | zookeeper |
node21 | master | zookeeper | |
node22 | master | worker | zookeeper |
node23 | worker | zookeeper |
2. 解压
[admin@node21 software]$ tar zxvf flink-1.6.1-bin-hadoop27-scala_2.11.tgz -C /opt/module/ [admin@node21 software]$ cd /opt/module/ [admin@node21 module]$ ll drwxr-xr-x 8 admin admin 125 Sep 15 04:47 flink-1.6.1
3. 修改配置文件
[admin@node21 conf]$ ls flink-conf.yaml log4j-console.properties log4j-yarn-session.properties logback.xml masters sql-client-defaults.yaml log4j-cli.properties log4j.properties logback-console.xml logback-yarn.xml slaves zoo.cfg
修改flink/conf/masters,slaves,flink-conf.yaml
[admin@node21 conf]$ sudo vi masters node21:8081 [admin@node21 conf]$ sudo vi slaves node22 node23 [admin@node21 conf]$ sudo vi flink-conf.yaml taskmanager.numberOfTaskSlots:2 jobmanager.rpc.address: node21
可选配置:
- 每个JobManager(
jobmanager.heap.mb
)的可用内存量, - 每个TaskManager(
taskmanager.heap.mb
)的可用内存量, - 每台机器的可用CPU数量(
taskmanager.numberOfTaskSlots
), - 集群中的CPU总数(
parallelism.default
)和 - 临时目录(
taskmanager.tmp.dirs
)
4. 拷贝安装包到各节点
[admin@node21 module]$ scp -r flink-1.6.1/ admin@node22:`pwd` [admin@node21 module]$ scp -r flink-1.6.1/ admin@node23:`pwd`
5. 配置环境变量
配置所有节点Flink的环境变量
[admin@node21 flink-1.6.1]$ sudo vi /etc/profile export FLINK_HOME=/opt/module/flink-1.6.1 export PATH=$PATH:$FLINK_HOME/bin [admin@node21 flink-1.6.1]$ source /etc/profile
6. 启动flink
[admin@node21 flink-1.6.1]$ ./bin/start-cluster.sh Starting cluster. Starting standalonesession daemon on host node21. Starting taskexecutor daemon on host node22. Starting taskexecutor daemon on host node23.
jps查看进程
7. WebUI查看
8. Flink 的 HA
首先,我们需要知道 Flink 有两种部署的模式,分别是 Standalone 以及 Yarn Cluster 模式。对于 Standalone 来说,Flink 必须依赖于 Zookeeper 来实现 JobManager 的 HA(Zookeeper 已经成为了大部分开源框架 HA 必不可少的模块)。在 Zookeeper 的帮助下,一个 Standalone 的 Flink 集群会同时有多个活着的 JobManager,其中只有一个处于工作状态,其他处于 Standby 状态。当工作中的 JobManager 失去连接后(如宕机或 Crash),Zookeeper 会从 Standby 中选举新的 JobManager 来接管 Flink 集群。
对于 Yarn Cluaster 模式来说,Flink 就要依靠 Yarn 本身来对 JobManager 做 HA 了。其实这里完全是 Yarn 的机制。对于 Yarn Cluster 模式来说,JobManager 和 TaskManager 都是被 Yarn 启动在 Yarn 的 Container 中。此时的 JobManager,其实应该称之为 Flink Application Master。也就说它的故障恢复,就完全依靠着 Yarn 中的 ResourceManager(和 MapReduce 的 AppMaster 一样)。由于完全依赖了 Yarn,因此不同版本的 Yarn 可能会有细微的差异。这里不再做深究。
1) 修改配置文件
修改flink-conf.yaml,HA模式下,jobmanager不需要指定,在master file中配置,由zookeeper选出leader与standby。
#jobmanager.rpc.address: node21 high-availability:zookeeper #指定高可用模式(必须) high-availability.zookeeper.quorum:node21:2181,node22:2181,node23:2181 #ZooKeeper仲裁是ZooKeeper服务器的复制组,它提供分布式协调服务(必须) high-availability.storageDir:hdfs:///flink/ha/ #JobManager元数据保存在文件系统storageDir中,只有指向此状态的指针存储在ZooKeeper中(必须) high-availability.zookeeper.path.root:/flink #根ZooKeeper节点,在该节点下放置所有集群节点(推荐) high-availability.cluster-id:/flinkCluster #自定义集群(推荐) state.backend: filesystem state.checkpoints.dir: hdfs:///flink/checkpoints state.savepoints.dir: hdfs:///flink/checkpoints
修改conf/zoo.cfg
server.1=node21:2888:3888 server.2=node22:2888:3888 server.3=node23:2888:3888
修改conf/masters
node21:8081 node22:8081
修改slaves
node22 node23
同步配置文件conf到各节点
2) 启动HA
先启动zookeeper集群各节点(测试环境中也可以用Flink自带的start-zookeeper-quorum.sh),启动dfs ,再启动flink
[admin@node21 flink-1.6.1]$ start-cluster.sh
WebUI查看,这是会自动产生一个主Master,如下
3) 验证HA
手动杀死node22上的master,此时,node21上的备用master转为主mater。
4)手动将JobManager / TaskManager实例添加到群集
您可以使用bin/jobmanager.sh
和bin/taskmanager.sh
脚本将JobManager和TaskManager实例添加到正在运行的集群中。
添加JobManager
bin/jobmanager.sh ((start|start-foreground) [host] [webui-port])|stop|stop-all
添加TaskManager
bin/taskmanager.sh start|start-foreground|stop|stop-all
[admin@node22 flink-1.6.1]$ jobmanager.sh start node22
新添加的为从master。
9. 运行测试任务
[admin@node21 flink-1.6.1]$ flink run -m node21:8081 ./examples/batch/WordCount.jar --input /opt/wcinput/wc.txt --output /opt/wcoutput/ [admin@node21 flink-1.6.1]$ flink run -m node21:8081 ./examples/batch/WordCount.jar --input hdfs:///user/admin/input/wc.txt --output hdfs:///user/admin/output2
四. Yarn Cluster模式
1. 引入
在一个企业中,为了最大化的利用集群资源,一般都会在一个集群中同时运行多种类型的 Workload。因此 Flink 也支持在 Yarn 上面运行。首先,让我们通过下图了解下 Yarn 和 Flink 的关系。
在图中可以看出,Flink 与 Yarn 的关系与 MapReduce 和 Yarn 的关系是一样的。Flink 通过 Yarn 的接口实现了自己的 App Master。当在 Yarn 中部署了 Flink,Yarn 就会用自己的 Container 来启动 Flink 的 JobManager(也就是 App Master)和 TaskManager。
启动新的Flink YARN会话时,客户端首先检查所请求的资源(容器和内存)是否可用。之后,它将包含Flink和配置的jar上传到HDFS(步骤1)。
客户端的下一步是请求(步骤2)YARN容器以启动ApplicationMaster(步骤3)。由于客户端将配置和jar文件注册为容器的资源,因此在该特定机器上运行的YARN的NodeManager将负责准备容器(例如,下载文件)。完成后,将启动ApplicationMaster(AM)。
该JobManager和AM在同一容器中运行。一旦它们成功启动,AM就知道JobManager(它自己的主机)的地址。它正在为TaskManagers生成一个新的Flink配置文件(以便它们可以连接到JobManager)。该文件也上传到HDFS。此外,AM容器还提供Flink的Web界面。YARN代码分配的所有端口都是临时端口。这允许用户并行执行多个Flink YARN会话。
之后,AM开始为Flink的TaskManagers分配容器,这将从HDFS下载jar文件和修改后的配置。完成这些步骤后,即可建立Flink并准备接受作业。
2. 修改环境变量
export HADOOP_CONF_DIR= /opt/module/hadoop-2.7.6/etc/hadoop
3. 部署启动
[admin@node21 flink-1.6.1]$ yarn-session.sh -d -s 2 -tm 800 -n 2
上面的命令的意思是,同时向Yarn申请3个container,其中 2 个 Container 启动 TaskManager(-n 2),每个 TaskManager 拥有两个 Task Slot(-s 2),并且向每个 TaskManager 的 Container 申请 800M 的内存,以及一个ApplicationMaster(Job Manager)。
Flink部署到Yarn Cluster后,会显示Job Manager的连接细节信息。
Flink on Yarn会覆盖下面几个参数,如果不希望改变配置文件中的参数,可以动态的通过-D选项指定,如 -Dfs.overwrite-files=true -Dtaskmanager.network.numberOfBuffers=16368
jobmanager.rpc.address:因为JobManager会经常分配到不同的机器上
taskmanager.tmp.dirs:使用Yarn提供的tmp目录
parallelism.default:如果有指定slot个数的情况下
yarn-session.sh会挂起进程,所以可以通过在终端使用CTRL+C或输入stop停止yarn-session。
如果不希望Flink Yarn client长期运行,Flink提供了一种detached YARN session,启动时候加上参数-d或—detached
在上面的命令成功后,我们就可以在 Yarn Application 页面看到 Flink 的纪录。如下图。
如果在虚拟机中测试,可能会遇到错误。这里需要注意内存的大小,Flink 向 Yarn 会申请多个 Container,但是 Yarn 的配置可能限制了 Container 所能申请的内存大小,甚至 Yarn 本身所管理的内存就很小。这样很可能无法正常启动 TaskManager,尤其当指定多个 TaskManager 的时候。因此,在启动 Flink 之后,需要去 Flink 的页面中检查下 Flink 的状态。这里可以从 RM 的页面中,直接跳转(点击 Tracking UI)。这时候 Flink 的页面如图
yarn-session.sh启动命令参数如下:
[admin@node21 flink-1.6.1]$ yarn-session.sh --help Usage: Required -n,--container <arg> Number of YARN container to allocate (=Number of Task Managers) Optional -D <property=value> use value for given property -d,--detached If present, runs the job in detached mode -h,--help Help for the Yarn session CLI. -id,--applicationId <arg> Attach to running YARN session -j,--jar <arg> Path to Flink jar file -jm,--jobManagerMemory <arg> Memory for JobManager Container with optional unit (default: MB) -m,--jobmanager <arg> Address of the JobManager (master) to which to connect. Use this flag to connect to a different JobManager than the one specified i n the configuration. -n,--container <arg> Number of YARN container to allocate (=Number of Task Managers) -nl,--nodeLabel <arg> Specify YARN node label for the YARN application -nm,--name <arg> Set a custom name for the application on YARN -q,--query Display available YARN resources (memory, cores) -qu,--queue <arg> Specify YARN queue. -s,--slots <arg> Number of slots per TaskManager -st,--streaming Start Flink in streaming mode -t,--ship <arg> Ship files in the specified directory (t for transfer) -tm,--taskManagerMemory <arg> Memory per TaskManager Container with optional unit (default: MB) -yd,--yarndetached If present, runs the job in detached mode (deprecated; use non-YARN specific option instead) -z,--zookeeperNamespace <arg> Namespace to create the Zookeeper sub-paths for high availability mode
4. 提交任务
之后,我们可以通过这种方式提交我们的任务
[admin@node21 flink-1.6.1]$ ./bin/flink run -m yarn-cluster -yn 2 ./examples/batch/WordCount.jar --input /opt/wcinput/wc.txt --output /opt/wcoutput/
以上命令在参数前加上y前缀,-yn表示TaskManager个数。
在这个模式下,同样可以使用-m yarn-cluster提交一个”运行后即焚”的detached yarn(-yd)作业到yarn cluster。
5. 停止yarn cluster
yarn application -kill application_1539058959130_0001
6. Yarn模式的HA
应用最大尝试次数(yarn-site.xml),您必须配置为尝试应用的最大数量的设置yarn-site.xml,当前YARN版本的默认值为2(表示允许单个JobManager失败)。
<property> <name>yarn.resourcemanager.am.max-attempts</name> <value>4</value> <description>The maximum number of application master execution attempts</description> </property>
申请尝试(flink-conf.yaml),您还必须配置最大尝试次数conf/flink-conf.yaml
: yarn.application-attempts:10
示例:高度可用的YARN会话
- 配置HA模式和zookeeper法定人数在
conf/flink-conf.yaml
:high-availability: zookeeper high-availability.zookeeper.quorum: node21:2181,node22:2181,node23:2181 high-availability.storageDir: hdfs:///flink/recovery high-availability.zookeeper.path.root: /flink yarn.application-attempts: 10
- 配置ZooKeeper的服务器中
conf/zoo.cfg
(目前它只是可以运行每台机器的单一的ZooKeeper服务器):server.1=node21:2888:3888 server.2=node22:2888:3888 server.3=node23:2888:3888
- 启动ZooKeeper仲裁:
$ bin / start-zookeeper-quorum.sh
- 启动HA群集:
$ bin / yarn-session.sh -n 2
五.错误异常
1.身份认证失败
[root@node21 flink-1.6.1]# flink run examples/streaming/SocketWindowWordCount.jar --port 9000 Starting execution of program ------------------------------------------------------------ The program finished with the following exception: org.apache.flink.client.program.ProgramInvocationException: Job failed. (JobID: b7a99ac5db242290413dbebe32ba52b0) at org.apache.flink.client.program.rest.RestClusterClient.submitJob(RestClusterClient.java:267) at org.apache.flink.client.program.ClusterClient.run(ClusterClient.java:486) at org.apache.flink.streaming.api.environment.StreamContextEnvironment.execute(StreamContextEnvironment.java:66) at org.apache.flink.streaming.examples.socket.SocketWindowWordCount.main(SocketWindowWordCount.java:92) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.flink.client.program.PackagedProgram.callMainMethod(PackagedProgram.java:529) at org.apache.flink.client.program.PackagedProgram.invokeInteractiveModeForExecution(PackagedProgram.java:421) at org.apache.flink.client.program.ClusterClient.run(ClusterClient.java:426) at org.apache.flink.client.cli.CliFrontend.executeProgram(CliFrontend.java:804) at org.apache.flink.client.cli.CliFrontend.runProgram(CliFrontend.java:280) at org.apache.flink.client.cli.CliFrontend.run(CliFrontend.java:215) at org.apache.flink.client.cli.CliFrontend.parseParameters(CliFrontend.java:1044) at org.apache.flink.client.cli.CliFrontend.lambda$main$11(CliFrontend.java:1120) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1754) at org.apache.flink.runtime.security.HadoopSecurityContext.runSecured(HadoopSecurityContext.java:41) at org.apache.flink.client.cli.CliFrontend.main(CliFrontend.java:1120) Caused by: java.net.ConnectException: Connection refused (Connection refused) at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at org.apache.flink.streaming.api.functions.source.SocketTextStreamFunction.run(SocketTextStreamFunction.java:96) at org.apache.flink.streaming.api.operators.StreamSource.run(StreamSource.java:87) at org.apache.flink.streaming.api.operators.StreamSource.run(StreamSource.java:56) at org.apache.flink.streaming.runtime.tasks.SourceStreamTask.run(SourceStreamTask.java:99) at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:300) at org.apache.flink.runtime.taskmanager.Task.run(Task.java:711) at java.lang.Thread.run(Thread.java:748)
通过查看日志,发现有如下报错
2018-10-20 02:32:19,668 ERROR org.apache.flink.shaded.curator.org.apache.curator.ConnectionState - Authentication failed
解决法案:添加定时任务认证kerberos
转载请注明:SuperIT » 大数据环境搭建步骤详解(Hadoop,Hive,Zookeeper,Kafka,Flume,Hbase,Spark, flink等安装与配置