- 集群资源配置说明
一、集群基本配置
1.IP分配
/etc/hostname. /etc/hosts 192.168.0.130 sa0 192.168.0.131 sa1 192.168.0.132 sa2 192.168.0.133 sa3 192.168.0.134 sa4 192.168.0.135 sa5
2.免密码登录
>生产公钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
>发送公钥
ssh-copy-id sa0
3.关闭防火墙
- systemctl disable firewalld
- systemctl stop firewalld
- service firewalld stop
二 、配置批量分发指令和分发文件
1.xcall.sh
实现向集群中发送指令
#!/bin/bash
params=$@
i=0
for(( i = 0 ; i <= 5 ; i = $i + 1 )); do
echo ======== sa$i $params ===========
ssh sa$i $params
-
2.xrsycn.sh
实现发送文件的功能
#!/bin/bash
if [[ $# -lt 1 ]] ; then echo no params ; exit ; fi
p=$1
echo p=$p
dir=
dirname $p``filename=
basename $p``cd $dir
fullpath=
pwd -P .``user=
whoami``for (( i = 0 ; i <= 5 ; i = $i + 1 )) ; do
echo ========== sa$i ==========
rsync -lr $p ${user}@sa$i:$fullpath
done;
三、zookeeper搭建
解析tar包
tar -zxvf zookeeper-3.4.9.tar.gz -C /soft/
设置环境变量
打开/etc/profile文件,在文件最后添加一下内容
export ZK_HOME=/soft/zk
export PATH=$PATH:$ZK_HOME/bin
环境变量生效
source /etc/profile
修改配置文件名称
cp zoo_sample.cfg zoo.cfg
zk 配置单机模式
打开配置文件zoo.cfg
dataDir=/home/centos01/zookeeper # zookeeper缓存目录
启动zk
zkServer.sh start
客户端连接
zkCli.sh -server localhost:2181
zk集群
sa0,sa1,sa2 #三台机器
dataDir=/home/centos01/zookeeper # zookeeper缓存目录
server.1=sa0:2888:3888 # 2888 服务器之间通信接口
server.2=sa1:2888:3888 # 3888 leader选举接口
-
创建myid
在/home/centos01/zookeeper目录下创建myid(0)-->标示集群的唯一属性
1.shell server.X X指服务器的代号
zookeeper的启动过程:
zkServer.sh start
$>netstat -anop | grep 2181
四、kafka 集群搭建
解压tar包
tar -zxvf kafka_2.12-2.2.2.tgz -C /soft/
设置环境变量
export KAFKA_HOME=/soft/kafka
export PATH=$PATH:$KAFKA_HOME/bin
环境变量生效
source /etc/profile
修改配置文件server.properties
vi server.propertie
broker.id=0 # 指定代理id
listeners=PLAINTEXT://192.168.1.131:9092 #用来监听链接的端口,producer或consumer将在此端口建立连接
log.dirs=log.dirs=/root/log/kafka/logs #kafka消息存放的路径
zookeeper.connect=s1:2181 #lian
log.cleaner.enable=true #日志清理是否打开
kafka集群
>sa1,sa2,sa3
配置文件信息
broker.id=0
listeners=PLAINTEXT://192.168.0.130:9092
log.dirs=/home/centos01/kafka/logs
zookeeper.connect=sa0:2181,sa1:2181,sa2:2181
启动过程:
kafka-server-start.sh -daemon server.properties
查看主题
kafka-topics.sh --zookeeper sa0:2181 --list
创建主题
kafka-topics.sh --create --zookeeper sa0:2181 --replication-factor 2 --partitions 3 --topic test
生产者
kafka-console-producer.sh --broker-list s1:9092 --topic test
消费者
kafka-console-consumer.sh --bootstrap-server s1:9092 --topic test --from-beginning
五、flume
wget http://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.8.0/apache-flume-1.8.0-bin.tar.gz
tar –zxvf apache-flume-1.8.0-bin.tar.gz
mv apache-flume-1.8.0-bin /usr/local/flume
六、hadoop集群
单机模式
$ sudo tar -zxvf hadoop-2.7.1.tar.gz -C /usr/local
$ cd /usr/local/
# 可省略
$ sudo mv ./hadoop-2.7.1/ ./hadoop # 将文件夹名改为hadoop
$ sudo chown -R hadoop ./hadoop # 修改文件权限
伪分布式模式
core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<!--hadoop.tmp.dir用于保存临时文件,如果没有配置这个参数,则默认使用的临时目录 -->
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<!-- 用于指定HDFS的访问地址 -->
<value>hdfs://localhost:9000</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<!--
dfs.replicaion:
指定副本数量,在分布式文件系统中,数据通常会被冗余的存储多份,
以保证可靠性和安全性,但是这里用的是伪分布式模式,节点只有一个,
也有就只有一个副本。 -->
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<!--dfs.namenode.name.di:设定名称节点元数据的保存目录 -->
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<!--dfs.datanode.data.dir:设定数据节点的数据保存目录 -->
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
【注意】:Hadoop的运行方式是由配置文件决定的,如果想从伪分布式模式切换回单机模式,只需删除core-site.xml
文件中的配置项即可
**
执行名称节点格式化
$ cd /usr/local/hadoop
$ ./bin/hdfs namenode -format
启动Hadoop
$ cd /usr/local/hadoop
$ ./sbin/start-dfs.sh
查看后发现JAVA_HOME路径已经设置,那就只能将/hadoop/etc/hadoop/hadoop-env.sh文件的JAVA_HOME改为绝对路径了。将export JAVA_HOME=$JAVA_HOME改为
export JAVA_HOME=/usr/lib/jvm/default-java
用jps
命令查看Hadoop是否启动成功,如果出现DataNode
、NameNode
、SecondaryNameNode
的进程说明启动成功。
如果还要问题,重复如下命令:
$ ./sbin/stop-dfs.sh # 关闭
$ rm -r ./tmp # 删除 tmp 文件,注意这会删除 HDFS中原有的所有数据
$ ./bin/hdfs namenode -format # 重新格式化名称节点
$ ./sbin/start-dfs.sh # 重启
使用浏览器查看HDFS信息
http://localhost:50070
运行Hadoop伪分布式实例
$ cd /usr/local/hadoop
$ ./bin/hdfs dfs -mkdir -p /user/hadoop # 在HDFS中创建用户目录
$ ./bin/hdfs dfs -mkdir input #在HDFS中创建hadoop用户对应的input目录
$ ./bin/hdfs dfs -put ./etc/hadoop/*.xml input #把本地文件复制到HDFS中
$ ./bin/hdfs dfs -ls input #查看文件列表
Found 8 items
-rw-r--r-- 1 hadoop supergroup 4436 2019-01-11 19:35 input/capacity-scheduler.xml
-rw-r--r-- 1 hadoop supergroup 1075 2019-01-11 19:35 input/core-site.xml
-rw-r--r-- 1 hadoop supergroup 9683 2019-01-11 19:35 input/hadoop-policy.xml
-rw-r--r-- 1 hadoop supergroup 1130 2019-01-11 19:35 input/hdfs-site.xml
-rw-r--r-- 1 hadoop supergroup 620 2019-01-11 19:35 input/httpfs-site.xml
-rw-r--r-- 1 hadoop supergroup 3518 2019-01-11 19:35 input/kms-acls.xml
-rw-r--r-- 1 hadoop supergroup 5511 2019-01-11 19:35 input/kms-site.xml
-rw-r--r-- 1 hadoop supergroup 690 2019-01-11 19:35 input/yarn-site.xml
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
....
$ ./bin/hdfs dfs -cat output/* #查看运行结果
1 dfsadmin
1 dfs.replication
1 dfs.namenode.name.dir
1 dfs.datanode.data.dir
再次运行需要删除output文件夹
$ ./bin/hdfs dfs -rm -r output # 删除 output 文件夹
关闭Hadoop
./sbin/stop-dfs.sh
下次启动时不需要再执行节点格式化命令(否则会报错),只需要直接运行start-dfs.sh
命令即可。
完全分布式模式
namenode sa0, sa5 # namenode
Datanode sa1,sa2,sa3,sa4 # datanode 节点
Journalnode sa1,sa2,da3 # journalnode 节点
-
core-site.xml 文件配置
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/centos01/hadoop</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>sa0:2181,sa1:2181,sa2:2181</value>
</property>
-
hdfs-site.xml文件配置
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>sa1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>sa5:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>sa1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>sa5:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://sa1:8485;sa2:8485;sa3:8485/mycluster</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/centos01/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/centos01/hadoop/journal</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
-
slaves文件配置
存放datanode节点
sa1
sa2
sa3
sa4
启动过程:
先启动
1.hadoop-daemon.sh start journalnode
// 在一台nn上执行
2. hdfs namenode -format
hadoop-daemon.sh start namenode
在另一台nn上执行
hdfs namenode -bootstrapStandby
hadoop-daemon.sh start namenode
先停止所有的Hadoop进行运行,在执行一下指令
bin/hdfs zkfc -formatZK
start-dfs.sh
Hbase 集群搭建
hbase集群
master:sa0,sa3
regsionServer: sa1,sa2,sa3
hbase-env.sh 文件配置
export JAVA_HOME=/soft/jdk/
export HBASE_CLASSPATH=$HBASE_CLASSPATH:/soft/hadoop/etc/hadoop
export HBASE_MANAGES_ZK=false
hbase-site.xml 文件配置
<configuration>
<property>
<name>hbase.root.dir</name>
<value>hdfs://mycluster/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>sa0,sa1,sa2</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/centos01/hbase</value>
</property>
-
regionservers 文件配置
sa1
sa2
sa3
同步hbase到其他主机
rsync -lr hbase-2.1.0 centos01@sa1:/soft
hbase和hadoop通用高可用集群
xcall.sh "ln -s /soft/hadoop/etc/hadoop/hdfs-site.xml /soft/hbase/conf/hdfs-site.xml"
启动habse
start-hbase.sh
sa3单独启动hbase
hbase-daemon.sh start master
webch查看
192.168.0.130:16010
storm集群
sa0, sa1, sa2, sa3
配置文件信息:
storm.zookeeper.servers:
- “sa0”
- “sa1”
- “sa2”storm.local.dir: "/home/centos01/storm"
supervisor.slots.ports:
- 6700
- 6701
- 6702
nimbus.host: "sa0"
drpc.servers:
- "sa0"
启动storm
sa0
storm nimbus&sa1 sa2 sa3
storm supervisor&
sa0
storm ui&
storm drpc
========spark集群搭建=========
sa0, sa1, sa2, sa3
======安装mysql======
sa5:
1.安装前,我们可以检测系统是否自带安装 MySQL:
rpm -qa | grep mysql
2.如果你系统有安装,那可以选择进行卸载:
rpm -e mysql // 普通删除模式
rpm -e —nodeps mysql // 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除
3.安装 MySQL:
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
sudo yum update
sudo yum install mysql-server
4.权限设置:
chown mysql:mysql -R /var/lib/mysql
5.初始化 MySQL:
sudo mysqld —initialize
6.启动 MySQL:
systemctl start mysqld
7.查看 MySQL 运行状态:
systemctl status mysqld
8.给root用户设置密码
mysql> SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘newpass’);
9.导入sql文件数据
mysql -u root -p
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source d:/dbname.sql
10.导出sql数据
mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql
#/usr/local/mysql/bin/ mysqldump -uroot -p abc > abc.sql 创建用户
insert into mysql.user(Host,User,Password) values(“0.0.0.0”,”root”,password(“root”));
====mysql的替代品====
1.安装
yum -y install mariadb-server mariadb
2.卸载
rpm -qa | grep mariadb
rpm -e mariadb // 普通删除模式
rpm -e —nodeps mariadb // 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除
3.启动mariadb
systemctl start mariadb
systemctl enable mariadb
4.可选
开启远程登录模型
首先停止
# service mysqld stop
执行安全模式
# mysqld_safe —skip-grant-table
hive 按照步骤
hive安装
1.下载hive
https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-1.2.2/apache-hive-1.2.2-bin.tar.gz
2.解压
tar -zxvf apache-hive-1.2.2-bin.tar.gz -C /soft/
$>cd /soft/hive-2.1.0 //
$>ln -s hive-2.1.0 hive //符号连接
3.配置环境变量
[/etc/profile]
HIVE_HOME=/soft/hive
PATH=...:$HIVE_HOME/bin
4.验证hive安装成功
hive --version
5.配置hive,使用mysql存放hive的元数据
5.1 拷贝mysql驱动到hive的lib目录下。
mysql-connector-java-5.1.34.tar.gz
mv mysql-connector-java-5.1.7-bin.jar /soft/hive/lib/
5.2 配置hive-site.xml
复制hive-default.xml.template为hive-site.xml, 清空之前的文件内容
[hive/conf/hive-site.xml]
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://s1:3306/hive2</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
</configuration>
5.3 在msyql中创建存放hive信息的数据库
mysql>create database hive2 ;
5.4初始化hive的元数据(表结构)到mysql中
$>cd /soft/hive/bin
$>schematool -dbType mysql -initSchema
[root@s1 bin]# schematool -dbType mysql -initSchema
Metastore connection URL: jdbc:mysql://s1:3306/hive2
Metastore Connection Driver : com.mysql.jdbc.Driver
Metastore connection User: root
Starting metastore schema initialization to 1.2.0
Initialization script hive-schema-1.2.0.mysql.sql
Initialization script completed
schemaTool completed
hive命令行操作
1.创建hive的数据库
$hive>hive --version //
$hive>hive --help //
$hive>create database mydb2 ; //
$hive>show databases ;
$hive>use mydb2 ;
$hive>create table mydb2.t(id int,name string,age int);
$hive>drop table t ;
$hive>drop table mydb2.t ;
$hive>select * from mydb2.t ; //查看指定库的表
$hive>exit ; //退出
$>hive //hive --service cli
$>hive //hive --service cli
hive命令
//创建表,external 外部表
$hive>CREATE external TABLE IF NOT EXISTS t2(id int,name string,age int)
COMMENT 'xx' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE ;
//查看表数据
$hive>desc t2 ;
$hive>desc formatted t2 ;
//加载数据到hive表
$hive>load data local inpath '/home/centos/customers.txt' into table t2 ; //local上传文件
$hive>load data inpath '/user/centos/customers.txt' [overwrite] into table t2 ; //移动文件
//复制表
mysql>create table tt as select * from users ; //携带数据和表结构
mysql>create table tt like users ; //不带数据,只有表结构
hive>create table tt as select * from users ;
hive>create table tt like users ;
//count()查询要转成mr
$hive>select count(*) from t2 ;
$hive>select id,name from t2 ;
//
$hive>select * from t2 order by id desc ; //MR
//启用/禁用表
$hive>ALTER TABLE t2 ENABLE NO_DROP; //不允许删除
$hive>ALTER TABLE t2 DISABLE NO_DROP; //允许删除
//分区表,优化手段之一,从目录的层面控制搜索数据的范围。
//创建分区表.
$hive>CREATE TABLE t3(id int,name string,age int) PARTITIONED BY (Year INT, Month INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;
//显式表的分区信息
$hive>SHOW PARTITIONS t3;
//添加分区,创建目录
$hive>alter table t3 add partition (year=2014, month=12);
//删除分区
hive>ALTER TABLE employee_partitioned DROP IF EXISTS PARTITION (year=2014, month=11);
//分区结构
hive>/user/hive/warehouse/mydb2.db/t3/year=2014/month=11
hive>/user/hive/warehouse/mydb2.db/t3/year=2014/month=12
//加载数据到分区表
hive>load data local inpath '/home/centos/customers.txt' into table t3 partition(year=2014,month=11);
//创建桶表
$hive>CREATE TABLE t4(id int,name string,age int) CLUSTERED BY (id) INTO 3 BUCKETS ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;
//加载数据不会进行分桶操作
$hive>load data local inpath '/home/centos/customers.txt' into table t4 ;
//查询t3表数据插入到t4中。
$hive>insert into t4 select id,name,age from t3 ;
//桶表的数量如何设置?
//评估数据量,保证每个桶的数据量block的2倍大小。
//连接查询
$hive>CREATE TABLE customers(id int,name string,age int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;
$hive>CREATE TABLE orders(id int,orderno string,price float,cid int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;
//加载数据到表
//内连接查询
hive>select a.*,b.* from customers a , orders b where a.id = b.cid ;
//左外
hive>select a.*,b.* from customers a left outer join orders b on a.id = b.cid ;
hive>select a.*,b.* from customers a right outer join orders b on a.id = b.cid ;
hive>select a.*,b.* from customers a full outer join orders b on a.id = b.cid ;
//explode,炸裂,表生成函数。
//使用hive实现单词统计
//1.建表
$hive>CREATE TABLE doc(line string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;
========集群启动的流程========
1.zk
2.
===================
sa0 sa1 sa2
flink集群搭建
====sa2=====
sa2
1. flink-conf.yaml
jobmanager.rpc.address: sa2
ES搭建步骤
1.下载tar包
2.解压/soft
3.建立软连接
ln -s elasticsearch-5.5.1 es
4.修改/etc/profile文件,添加PATH路径
export ES_HOME=/soft/es
export PATH=ES_HOME/bin
- 生效
source /etc/profile
6.修改配置文件
cluster.name: my-es
node.name: my-es01
path.data: /home/centos01/es/data
path.logs: /home/centos01/es/log
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 192.168.0.130
http.port: 9200
7.通过浏览器访问:
http://192.168.0.130:9200
遇到的问题
ES安装步骤出现的错误
ERROR: [2] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解决方案: 切到root 用户:进入到security目录下的limits.conf;执行命令 vim /etc/security/limits.conf 在文件的末尾添加下面的参数值:
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决方案:切换到root用户修改配置sysctl.conf 增加配置值: vm.max_map_count=655360
执行命令 sysctl -p 这样就可以了,然后重新启动ES服务 就可以了
es-Head插件
git
nodejs
es-head
git clone
===============
kibana 版本与 es 版本要一致
kibana安装步骤
1.下载tar包
2.解压tar包
3.建立软连接
4./etc/profile配置文件中添加修改配置信息
修改配置文件
1.
kibana所在服务器的地址
server.host:”192.168.0.130”
2.
es 所在的地址
elasticsearch.url “”
3.开启kibana
+