大数据环境搭建
配置相关
节点信息
hostname | ip | linux |
---|---|---|
master | 192.168.100.101 | CentOS7 |
slave1 | 192.168.100.102 | CentOS7 |
slave2 | 192.168.100.103 | CentOS7 |
软件版本
软件名 | 版本号 |
---|---|
JDK | 1.8 |
Hadoop | 2.7.7 |
Zookeeper | 3.4.6 |
Hive | 2.3.4 |
Scala | 2.11 |
Spark | 2.1.1 |
Sqoop | 1.4.2 |
Flume | 1.7.0 |
Kafka | 2.0.0 |
Flink | 1.10.2 |
环境变量配置位置:/root/profile
软件包位置:/usr/local/src/software
软件安装位置:/usr/local/src
JDK
1.解压
[root@master ~]# tar -zxvf /usr/local/src/software/jdk1.8_162 -C /usr/local/src/
[root@master ~]# mv /usr/local/src/jdk1.8_162 /usr/local/src/jdk8
2.配置环境变量
[root@master ~]# vi /root/profile
export JAVA_HOME=/usr/local/src/jdk8
export PATH=$PATH:$JAVA_HOME/bin
[root@master ~]# source /root/profile
[root@master ~]# java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
3.分发并配置环境变量
[root@master ~]# scp -r /usr/local/src/jdk8 slave1:/usr/local/src/
[root@master ~]# scp -r /usr/local/src/jdk8 slave2:/usr/local/src/
Hadoop
1.解压
[root@master ~]# tar -zxvf /usr/local/src/software/hadoop-2.7.7 -C /usr/local/src/
[root@master ~]# mv /usr/local/src/hadoop-2.7.7 /usr/local/src/hadoop
2.配置环境变量
[root@master ~]# vi /root/profile
export HADOOP_HOME=/usr/local/src/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
[root@master ~]# source /root/profile
[root@master ~]# hadoop version
Compiled by stevel on 2018-07-18T22:47Z
Compiled with protoc 2.5.0
From source with checksum 792e15d20b12c74bd6f19a1fb886490
This command was run using /usr/local/src/hadoop-2.7.7/share/hadoop/common/hadoop-common-2.7.7.jar
3.修改配置文件
修改core-site.xml
[root@master ~]# vi /usr/local/src/hadoop/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/src/hadoop/tmp</value>
</property>
</configuration>
修改hdfs-site.xml
[root@master ~]# vi /usr/local/src/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
<!--指定namenode web访问端口-->
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
</property>
<!--指定secondarynamenode web访问端口-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
</property>
<!--指定副本数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--指定namenode数据存储路径-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/src/hadoop/tmp/name</value>
</property>
<!--指定datanode数据存储路径-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/src/hadoop/tmp/data</value>
</property>
</configuration>
修改mapred-site.xml
注意所在目录
[root@master hadoop]# cp etc/hadoop/mapred-examplate-site.xml etc/hadoop/mapred-site.xml
<configuration>
<!--指定mappreduce运行在yarn-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--配置历史服务-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
修改yarn-site.xml
[root@master ~]# vi /usr/local/src/hadoop/etc/hadoop/yarn-site.xml
<configuration>
<!--指定yarn走shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>
修改slaves
[root@master ~]# vi /usr/local/src/hadoop/etc/hadoop/slaves
master
slave1
slave2
修改hadoop-env.sh
配置JAVA_HOME
[root@master ~]# vi /usr/local/src/hadoop/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/local/src/jdk
修改yarn-env.sh
[root@master ~]# vi /usr/local/src/hadoop/etc/hadoop/yarn-env.sh
export JAVA_HOME=/usr/local/src/jdk
分发并配置环境变量
[root@master ~]# scp -r /usr/local/src/hadoop slave1:/usr/local/src
[root@master ~]# scp -r /usr/local/src/hadoop slave2:/usr/local/src
环境变量配置略
启动hadoop
初始化namenode
[root@master ~]# hadoop namenode -format
启动
[root@master ~]# start-all.sh
查看各节点启动情况
master:
slave1:
slave2:
在浏览器上访问可视化页面:http://192.168.128.101:50070/
安装Zookeeper
1.解压
[root@master ~]# tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local/src/
[root@master ~]# mv zookeeper-3.4.5/ zookeeper/
2.配置环境变量
[root@master ~]# vi /root/profile
export ZOOKEEPER_HOME=/usr/local/src/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
3.修改配置文件
将zookpeeper的目录下的conf文件夹中的zoo_sample.cfg文件重命名
[root@master ~]# mv zoo_sample.cfg zoo.cfg
进入zoo.cfg
[root@master ~]# vim zoo.cfg
在文件中修改datadir的路径和添加server的配置
例如可以改为
同时创建dataDir属性值所指定的目录
在zkData目录下创建myid文件,修改值为1,如:
[root@master ~]# cd /usr/local/src/zookeeper/data/
[root@master data]# touch myid
[root@master data]# echo 1 > myid
然后在其他两个节点上进行相同的操作并配置环境变量,只不过要把myid的值改为2和3,
4.启动zookeeper
安装完成后
在zookpeeper目录下
在三个节点上分别执行命令,启动服务: zkServer.sh start
在三个节点上分别执行命令,查看状态: zkServer.sh status
正确结果应该是:三个节点中其中一个是
leader ,另外两个是 follower
在三个节点上分别执行命令:
jps
检查三个节点是否都有
QuromPeerMain 进程
master:
slave1:
slave2:
zookeeper安装完成
5.zookeeper启停脚本
start-zk.sh
#!/bin/sh
for host in master slave1 slave2
do
ssh $host "source /root/.bash_profile ;/usr/local/src/zookeeper/bin/zkServer.sh start"
echo "$host zk is running"
done
stop-zk.sh
#!/bin/sh
for host in master slave1 slave2
do
echo "$host zk is stopping"
ssh $host "source /root/.bash_profile ;/usr/local/src/zookeeper/bin/zkServer.sh stop"
done
给脚本赋权:
chmod +x start-zk.sh和chmod +x stop-zk.sh
Hadoop的HA搭建
需要先把之前格式化生成的文件删除,并且修改hadoop的配置文件,基本等同于重新搭建了一个hadoop集群
删除之前的缓存文件
[root@master hadoop]# rm -rf tmp/ logs/
修改配置文件
1.修改hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/src/hadoop/tmp/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/src/hadoop/tmp/data</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>hadoopcluster</value>
</property>
<property>
<name>dfs.ha.namenodes.hadoopcluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoopcluster.nn1</name>
<value>master:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoopcluster.nn2</name>
<value>slave1:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.hadoopcluster.nn1</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.hadoopcluster.nn2</name>
<value>slave1:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;slave1:8485;slave2:8485/hadoopcluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/src/hadoop/tmp/jn</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>shell(/bin/true)</value>
</property>
<property>
<name>dfs.ha.fencing.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.permissions.enable</name>
<value>false</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.hadoopcluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
2.修改core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoopcluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/src/hadoop/tmp</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
</configuration>
3.修改yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--启用resourcemanager ha-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--声明两台resourcemanager的地址-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster-yarn1</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>slave1</value>
</property>
<!--指定zookeeper集群的地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
<!--启用自动恢复-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--指定resourcemanager的状态信息存储在zookeeper集
群-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
mapred-site.xml之前配置过不用修改
hadoop-env.sh之前配置过不用修改
yarn-site.sh之前配置过不用修改
slaves之前配置过不用修改
初始化
在保证zookeeper启动的情况下
启动各节点的journalnode
[root@master hadoop]# sbin/hadoop-daemon.sh start journalnode
[root@slave1 hadoop]# sbin/hadoop-daemon.sh start journalnode
[root@slave2 hadoop]# sbin/hadoop-daemon.sh start journalnode
启动成功后,进行格式化
[root@master hadoop]# bin/hdfs namenode -format
格式化成功
显示格式化成功后,启动master上的NameNode
sbin/hadoop-daemon.sh start namenode
启动成功后,在slave1上进行元数据的同步
在slave1的hadoop文件夹下输入
bin/hdfs namenode -bootstrapStandby
如图显示同步成功后:
把master上的NameNode关闭
关闭master上的NameNode后,我们还需要初始化zookpeeper的状态
bin/hdfs zkfc -formatZK
如图所示代表初始化成功:
启动
当我们上面的步骤都完成后,我们可以开始启动集群进行测试HA环境的搭建是否成功
先在master上启动所有节点
[root@master hadoop]# sbin/start-all.sh
还需要手动启动jobhistoryserver
[root@master hadoop]# sbin/mr-jobhistory-daemon.sh start historyserver
然后在slave1上还布置了一个resourcemanager,这个也是在start-all.sh时无法启动,我们需要在slave1下手动启动
在slave1的hadoop目录下,执行
[root@slave1 hadoop]# sbin/yarn-daemon.sh start resourcemanager
这就是启动HadaoopHA上要启动的节点
master:
slave1:
slave2:
web端的显示信息:
现在在活动的节点是master上的namenode,resourcemanager我们可以手动kill掉,看看故障是否会自动转移,实现ha的基本意义
kill掉master上的namenode,查看网页端
发现slave1上的namenode变为了active,也就是自动故障转移了,resourcemanager的就不在演示了
这里基本可以说明hadoop的ha配置完成了
hive
解压
# 注意:Hive只需要在master节点上安装配置
[root@master ~]# cd /usr/local/src/software/
[root@master software]# tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /usr/local/src/
[root@master software]# cd ..
[root@master src]# mv apache-hive-1.2.1-bin/ hive
安装mysql
hive它有自己的内置数据库derby,但是hive 使用derby 数据库存在不支持多个连接的问题,
所以我们一般会使用mysql来代替hive的元数据库
我们的mysql版本为5.7.18,安装文件如下:
mysql-community-client-5.7.18-1.el7.x86_64.rpm
mysql-community-common-5.7.18-1.el7.x86_64.rpm
mysql-community-libs-5.7.18-1.el7.x86_64.rpm
mysql-community-server-5.7.18-1.el7.x86_64.rpm
我们按照顺序安装即可
注之前的liunx带的MariaDB要卸载
[root@master ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.52-2.el7.x86_64
然后卸载
[root@master ~]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
[root@master 5.7.18]#rpm -ivh mysql-community-common-5.7.18-1.el7.x86_64.rpm
[root@master 5.7.18]# rpm -ivh mysql-community-libs-5.7.18-1.el7.x86_64.rpm
[root@master 5.7.18]# rpm -ivh mysql-community-client-5.7.18-1.el7.x86_64.rp
m
[root@master 5.7.18]# rpm -ivh mysql-community-server-5.7.18-1.el7.x86_64.rp
m
安装之后查看安装情况
[root@master 5.7.18]# rpm -qa | grep mysql
mysql-community-common-5.7.18-1.el7.x86_64
mysql-community-client-5.7.18-1.el7.x86_64
mysql-community-libs-5.7.18-1.el7.x86_64
mysql-community-server-5.7.18-1.el7.x86_64
之后自己修改一下mysql的密码即可
修改过程可以看这个博客 https://blog.csdn.net/qq_35354260/article/details/83182900
[root@master ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.18 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, 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的驱动包(mysql-connector-java-5.1.26.jar)把这个驱动包放置在hive目录下的lib目录下。
修改配置文件
[root@master software]# cd ..
[root@master src]# cd hive/
[root@master hive]# cd conf/
[root@master conf]# vim hive-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value>
<description>JDBC connect string for a JDBC metastore</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>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456(填写mysql的用户密码,这里是root用户的密码)</value>
</property>
<property>
<name>hive.exec.scratchdir</name>
<value>/usr/local/src/set/hive/tmp</value>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/usr/local/src/set/hive/tmp/local</value>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/usr/local/src/set/hive/tmp/resources</value>
</property>
<!--是否开启静态分区-->
<property>
<name>hive.exec.dynamic.partition</name>
<value>true</value>
</property>
<!--动态分区模式-->
<property>
<name>hive.exec.dynamic.partition.mode</name>
<value>nonstrict</value>
</property>
<!--所有执行MR的节点最大可以创建动态分区数-->
<property>
<name>hive.exec.max.dynamic.partitions</name>
<value>100000</value>
</property>
<!--每个执行MR的节点最大可以创建动态分区数-->
<property>
<name>hive.exec.max.dynamic.partitions.pernode</name>
<value>100000</value>
</property>
<!--是否在控制台打印表头信息-->
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<!--是否在控制台显示当前数据库-->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<!--配置hive元数据服务-->
<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
</property>
</configuration>
[root@master conf]# vim hive-env.sh
export HADOOP_HOME=/usr/local/src/hadoop
export JAVA_HOME=/usr/local/src/jdk1.8.0_121
初始化hive元数据库
[root@master hive]# schematool -initSchema -dbType mysql
显示如下就是成功
这样
Hive 的元数据库就配置完成
注:
如果没成功的话.可能是hadoop目录下的/share/hadoop/yarn/lib/ 中的jline-0.9.94.jar文件太老了,我们需要将hive的lib中的jline-2.12.jar放到hadoop的/share/hadoop/yarn/lib/中,同时将老版本的jline删除
另外注:如果hive的初始化失败,可能是在mysql中没赋权的原因,需要在mysql中配置
mysql > GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456' WITH GRANT OPTION;
才能顺利初始化
测试
进入Hive 命令行 执行命令 创建一个名为 test 的表 查询该表的记录数:
hive> create table test(id int);
hive> select count(*) from test;
如果查询结果为0,则成功
hive安装完成
Scala
解压
[root@master ~]# cd /usr/local/src/software/
[root@master software]# tar -zxvf scala-2.11.11.tgz -C /usr/local/src/
配置环境变量
[root@master ~]# vi /root/profile
export HIVE_HOME=/usr/local/src/hive
export PATH=$PATH:$HIVE_HOME/bin
查看版本
[root@master scala-2.11.6]# scala -version
Scala code runner version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL
分发并配置环境变量
[root@master ~]# scp -r /usr/local/src/scala slave1:/usr/local/src
[root@master ~]# scp -r /usr/local/src/scala slave2:/usr/local/src
环境变量配置同上
Spark
此处介绍4种部署模式,按需求选择配置即可
本地模式搭建
直接解压配置环境变量运行即可
StandAlone独立部署模式
使用 Spark 自身节点运行的集群模式,也就是所谓的独立部署(Standalone)模式。
Spark 的 Standalone 模式体现了经典的 master-slave 模式。
集群规划:
master | slave1 | slave2 |
---|---|---|
Worker Master | Worker | Worker |
解压
[root@master ~]# cd /usr/local/src/software/
[root@master software]# tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz -C /usr/local/src/
[root@master software]# mv /usr/local/src/spark-2.1.1-bin-hadoop2.7 /usr/local/src/spark
配置环境变量
[root@master ~]# vi /root/profile
export SPARK_HOME=/usr/local/src/spark
export PATH=$PATH:$SPARK_HOME/bin
修改配置文件
1.重命名slaves.template文件名
[root@master ~]# mv /usr/local/src/spark/conf/slaves.template /usr/local/src/conf/slaves
2.修改slaves文件,添加 work 节点
master
slave1
slave2
3.修改 spark-env.sh.template 文件名为 spark-env.sh
[root@master ~]# mv spark-env.sh.template spark-env.sh
4.修改 spark-env.sh 文件,添加 JAVA_HOME 环境变量和集群对应的 master 节点
export JAVA_HOME=/opt/module/jdk8
SPARK_MASTER_HOST=master
SPARK_MASTER_PORT=7077
5.分发spark安装目录
分发到其余节点,并配置环境变量
[root@master ~]# scp -r /usr/local/src/spark slave1:/usr/local/src
[root@master ~]# scp -r /usr/local/src/spark slave2:/usr/local/src
6.启动
[root@master spark]# sbin/start-all.sh
SparkHA 搭建
解压
[root@master ~]# cd /usr/local/src/software/
[root@master software]# tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz -C /usr/local/src/
[root@master software]# mv /usr/local/src/spark-2.1.1-bin-hadoop2.7 /usr/local/src/spark
配置环境变量
[root@master ~]# vi /root/profile
export SPARK_HOME=/usr/local/src/spark
export PATH=$PATH:$SPARK_HOME/bin
修改配置文件(spark的HA)
[root@master spark]# cd conf/
root@master conf]# mv spark-env.sh.template spark-env.sh
[root@master conf]# vim spark-env.sh
export JAVA_HOME=/usr/local/src/jdk8
export SPARK_MASTER_PORT=7077
export HADOOP_HOME=/usr/local/src/hadoop
export HADOOP_CONF_DIR=/usr/local/src/hadoop/etc/hadoop
export SCALA_HOME=/usr/local/src/scala-2.11.11
export SPARK_DAEMON_JAVA_OPTS="
-Dspark.deploy.recoveryMode=ZOOKEEPER
-Dspark.deploy.zookeeper.url=master:2181,slave1:2181,slave2:2181
-Dspark.deploy.zookeeper.dir=/spark"
[root@master conf]# mv slaves.template slaves
[root@master conf]# vim slaves
master
slave1
slave2
5.分发spark安装目录
分发到其余节点,并配置环境变量
[root@master ~]# scp -r /usr/local/src/spark slave1:/usr/local/src
[root@master ~]# scp -r /usr/local/src/spark slave2:/usr/local/src
6.启动
[root@master spark]# sbin/start-all.sh
Spark on Yarn 搭建
解压
[root@master ~]# cd /usr/local/src/software/
[root@master software]# tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz -C /usr/local/src/
[root@master software]# mv /usr/local/src/spark-2.1.1-bin-hadoop2.7 /usr/local/src/spark
配置环境变量
[root@master ~]# vi /root/profile
export SPARK_HOME=/usr/local/src/spark
export PATH=$PATH:$SPARK_HOME/bin
修改配置文件
1.修改 hadoop 配置文件/opt/module/hadoop/etc/hadoop/yarn-site.xml, 并分发到其他节点
添加如下配置
<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认
是 true -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认
是 true -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
分发
[root@master ~]# scp /usr/local/src/hadoop/etc/hadoop/yarn-site.xml slave1:/usr/local/src/hadoop/etc/hadoop/
2.修改 conf/spark-env.sh,添加 JAVA_HOME 和 YARN_CONF_DIR 配置
export JAVA_HOME=/opt/module/jdk1.8.0_144
YARN_CONF_DIR=/opt/module/hadoop/etc/hadoop
5.分发spark安装目录
分发到其余节点,并配置环境变量
[root@master ~]# scp -r /usr/local/src/spark slave1:/usr/local/src
[root@master ~]# scp -r /usr/local/src/spark slave2:/usr/local/src
spark-submit提交参数
参数名 | 参数说明 |
---|---|
--master | master 的地址,提交任务到哪里执行,例如 spark://host:port, yarn, local |
--deploy-mode | 在本地 (client) 启动 driver 或在 cluster 上启动,默认是 client |
--class | 应用程序的主类,仅针对 java 或 scala 应用 |
--name | 应用程序的名称 |
--jars | 用逗号分隔的本地 jar 包,设置后,这些 jar 将包含在 driver 和 executor 的 classpath 下 |
--packages | 包含在driver 和executor 的 classpath 中的 jar 的 maven 坐标 |
--exclude-packages | 为了避免冲突 而指定不包含的 package |
--repositories | 远程 repository |
--conf PROP=VALUE | 指定spark 配置属性的值,例如-conf spark.executor.extraJavaOptions="-XX:MaxPermSize=256m" |
--properties-file | 加载的配置文件,默认为 conf/spark-defaults.conf |
--driver-memory | Driver内存,默认 1G |
--driver-java-options | 传给 driver 的额外的 Java 选项 |
--driver-library-path | 传给 driver 的额外的库路径 |
--driver-class-path | 传给 driver 的额外的类路径 |
--driver-cores | Driver 的核数,默认是1。在 yarn 或者 standalone 下使用 |
--executor-memory | 每个 executor 的内存,默认是1G |
--total-executor-cores | 所有 executor 总共的核数。仅仅在 mesos 或者 standalone 下使用 |
--num-executors | 启动的 executor 数量。默认为2。在 yarn 下使用 |
--executor-core | 每个 executor 的核数。在yarn或者standalone下使用 |
Sqoop
注意:Sqoop只需要在master节点上安装配置
解压
[root@master ~]# cd /usr/local/src/software/
[root@master software]# tar -zxvf sqoop-1.4.2.bin__hadoop-2.0.0-alpha.tar.gz -C /usr/local/src/
[root@master software]# cd ..
[root@master src]# mv sqoop-1.4.2.bin__hadoop-2.0.0-alpha/ sqoop-1.4.6
配置环境变量
[root@master ~]# vi /root/profile
export SQOOP_HOME=/usr/local/src/sqoop
export PATH=$PATH:$SQOOP_HOME/bin
测试环境变量
[root@master ~]# source /root/profile
[root@master ~]# sqoop version
出现类似上图即成功,如果出现警告信息,需要注释一些配置文件
执行Sqoop中import命令后报错
Warning: /opt/module/sqoop/bin/../../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /opt/module/sqoop/bin/../../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
解决方案:
在$SQOOP_HOME/bin目录下面修改configure-sqoop文件,注释掉以下内容:
#if [ -z "${HCAT_HOME}" ]; then
# if [ -d "/usr/lib/hive-hcatalog" ]; then
# HCAT_HOME=/usr/lib/hive-hcatalog
# elif [ -d "/usr/lib/hcatalog" ]; then
# HCAT_HOME=/usr/lib/hcatalog
# else
# HCAT_HOME=${SQOOP_HOME}/../hive-hcatalog
# if [ ! -d ${HCAT_HOME} ]; then
# HCAT_HOME=${SQOOP_HOME}/../hcatalog
# fi
# fi
#fi
#if [ -z "${ACCUMULO_HOME}" ]; then
# if [ -d "/usr/lib/accumulo" ]; then
# ACCUMULO_HOME=/usr/lib/accumulo
# else
# ACCUMULO_HOME=${SQOOP_HOME}/../accumulo
# fi
#fi
## Moved to be a runtime check in sqoop.
#if [ ! -d "${HCAT_HOME}" ]; then
# echo "Warning: $HCAT_HOME does not exist! HCatalog jobs will fail."
# echo 'Please set $HCAT_HOME to the root of your HCatalog installation.'
#fi
#if [ ! -d "${ACCUMULO_HOME}" ]; then
# echo "Warning: $ACCUMULO_HOME does not exist! Accumulo imports will fail."
# echo 'Please set $ACCUMULO_HOME to the root of your Accumulo installation.'
#fi
然后先后执行start-dfs.sh与start-yarn.sh启动hadoop集群,Sqoop功能恢复正常。
修改配置文件
[root@master sqoop-1.4.6]# cd conf/
[root@master conf]# mv sqoop-env-template.sh sqoop-env.sh
[root@master conf]# vim sqoop-env.sh
# Set Hadoop-specific environment variables here.
#Set path to where bin/hadoop is available
export HADOOP_HOME=/usr/local/src/hadoop-2.7.7
#set the path to where bin/hbase is available
# 我这里没有安装Hbase就不用配置了
#export HBASE_HOME=
#Set the path to where bin/hive is available
export HIVE_HOME=/usr/local/src/hive
#Set the path for where zookeper config dir is
export ZOOCFGDIR=/usr/local/src/zookeeper
添加mysql驱动
在修改完配置文件后,把mysql的jar包上传的sqoop的lib目录下
也就是在安装hive时使用的jar包
验证连接
验证sqoop连接mysql数据库是否成功
mysql数据库的密码为123456
命令行输入
sqoop-list-databases --connect jdbc:mysql://master:3306 --username root --password 123456
成功后显示所有数据库
sqoop安装测试完成
Kafka
解压
[root@master ~]# cd /usr/local/src/software
[root@master software]# tar -zxvf kafka_2.11-2.0.0.tgz -C /usr/local/src/
[root@master ~]# mv /usr/local/src/kafka_2.11-2.0.0/ /usr/local/src/kafka
配置环境变量
[root@master ~]# vi /root/profile
export KAFKA_HOME=/usr/local/src/kafka
export PATH=$PATH:$KAFKA_HOME/bin
生效环境变量
[root@master ~]# source /root/profile
修改配置文件
[root@master kafka_2.11]# cd config/
[root@master config]# vim server.properties
broker.id=0
listeners=PLAINTEXT://192.168.128.100:9092
advertised.listeners=PLAINTEXT://192.168.128.100:9092
zookeeper.connect=192.168.128.100:2181,192.168.128.101:2181,192.168.128.102:2181
分发kafka目录到各节点
[root@master ~]# scp -r /usr/local/src/kafka slave1:/usr/local/src
[root@master ~]# scp -r /usr/local/src/kafka slave2:/usr/local/src
而在另外两个节点上,对server.properties要有几处修改
broker.id 分别修改成: 1 和 2
listeners 在ip那里分别修改成子节点对应的,即 PLAINTEXT://192.168.128.101:9092 和 PLAINTEXT://192.168.128.102:9092
advertised.listeners 也在ip那里分别修改成子节点对应的,即 PLAINTEXT://192.168.128.101:9092 和 PLAINTEXT://192.168.128.102:9092
zookeeper.connect 不需要修改
启动测试
kafka在启动之前一定要启动zookpeeper,否则启动kafka会报错
[root@master kafka]# bin/kafka-server-start.sh config/server.properties &
[root@slave1 kafka]# bin/kafka-server-start.sh config/server.properties &
[root@slave2 kafka]# bin/kafka-server-start.sh config/server.properties &
启动后,开始测试
创建主题
kafka发出消息和接收消息都是基于topic,所以要先创建一个topic,才能向里面发消息
命令行输入
kafka-topics.sh --create --zookeeper 192.168.128.100:2181,192.168.128.101:2181,192.168.128.102:2181
--topic Test --replication-factor 1 --partitions 1
参数说明:
- --create 表示创建topic
- --partitions 表示指定我们topic的分区数
- --replication-factor 指定副本数
- --topic 指定topic的名字
- --zookeeper 指定zookeeper的地址
topic的信息保存在zookeeper中
创建test主题
启动生产者与消费者
创建成功后在master上输入以下命令启动生产者
通过命令行实现数据的发送 producer 生产者kafka-console-producer.sh
就是用来测试用的脚本,可以模拟kafka消息的发送端
[root@master ~]# kafka-console-producer.sh --broker-list 192.168.128.100:9092,
192.168.128.101:9092,192.168.128.102:9092 --topic Test
说明:
在server.properties文件中的配置,默认监听端口是9092
--broker-list 指定我们kafka集群的地址
--topic 指定我们的消息发送到哪个topic里面去
输入命令后回车,会出现一个尖括号。在后边输入信息回车,就会发送出去输入的信息。
然后在slave1和slave2上启动消费者
通过命令行实现数据的接收 consumer 消费者
[root@slave1 ~]# kafka-console-consumer.sh --bootstrap-server 192.168.128.101:9092
--topic Test --from-beginning
[root@slave2 ~]# kafka-console-consumer.sh --bootstrap-server 192.168.128.102:9092
--topic Test --from-beginning
参数说明:
- --bootstrap-server 表示我们的kafak集群的地址,在旧版本中使用的是--zookeeper参数,两者至少使用一个
- --from-beginning 表示我们从最开始的数据进行消费
- --topic指定我们topic的名字
在producer端发送数据,在consumer端可以收到数据
在主节点上输入的,会自动同步在其他两台节点上
这里我们的kafka也就搭建完成了。
关闭kafka
在命令行下,按ctrl加c,退出命令行,输入
[root@master kafka_2.11]# bin/kafka-server-stop.sh
[root@slave1 kafka_2.11]# bin/kafka-server-stop.sh
[root@slave2 kafka_2.11]# bin/kafka-server-stop.sh
出现以下信息
按回车即可退出
可以使用jps查看一下当前进程
kafka进程停止了,代表kafka已经关闭
Flume
解压
[root@master software]# tar -zxvf apache-flume-1.7.0-bin.tar.gz -C /usr/local/src/
[root@master src]# mv apache-flume-1.7.0-bin flume
配置环境变量
[root@master ~]# vi /root/profile
export FLUME_HOME=/usr/local/src/flume
export PATH=$PATH:$FLUME_HOME/bin
生效环境变量
[root@master ~]# source /root/profile
修改配置文件
[root@master flume]# cd conf/
[root@master conf]# mv flume-env.sh.template flume-env.sh
[root@master conf]# vim flume-env.sh
export JAVA_HOME=/usr/local/src/jdk8
这里flume就算已经配置完成了
flume不需要修改太多东西,更多的都是自己自定义需要监听的目录或者端口
测试
首先需要知晓flume的四个参数配置,分别为:
- source 数据采集 采集日志数据,将采集到的日志数据传输给channel
- channel 数据队列,类似管道 存储source传递过来的数据
- sink 数据输出 从channel中获取数据,将数据输出到目标位置(HDFS、HBase、Source)
- Event 传输数据的单元,Flume中采集数据并传输的最小单位
以监听本地目录上传到hdfs作为测试:
[root@master flume-1.6.0]# mkdir job/
[root@master flume-1.6.0]# cd job/
[root@master job]# touch test.conf
[root@master job]# vim test.conf
a1.sources = r1
a1.channels = c1
a1.sinks = k1
a1.sources.r1.type=spooldir
a1.sources.r1.spoolDir=/usr/local/src/set/test
a1.sinks.k1.type=hdfs
a1.sinks.k1.hdfs.path=hdfs://master:9000/test
a1.channels.c1.type=file
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1
监听的test目录.在这个目录创建的文件会被上传到hdfs的test目录中
启动
[root@master flume]#bin/flume-ng agent -f job/test.conf -n a1