大数据平台环境搭建
(Linux Shell)
1.0 Linux环境配置
1.1 设置静态IP地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改以下内容:
BOOTPROTO="static" //静态IP
ONBOOT="yes" //开机自启动
在文件末尾添加:
IPADDR= // ip地址
NETMASK=255.255.255.0 //子网掩码
GATEWAY= //网关
DNS1= //dns
1.2 修改完成保存退出
service network restart //重启网络服务
1.3 修改主机名
vim /etc/hostname //三台主机都要修改
1.4 修改主机映射
vim /etc/hosts //在文件最后添加上三台主机的IP和主机名
ip 主机名 //格式
1.5 防火墙
systemctl status firewalld //查看防火墙状态
systemctl stop firewalld //临时关闭防火墙
systemctl disable firewalld //禁用防火墙
1.6 修改 selinux
vi /etc/sysconfig/selinux
SELINUX=disabled //修改内容
1.7 修改完成重启主机
reboot
1.8免密登录设置(每台都要做相同操作)
ssh-keygen -t rsa //生成公钥,一路回车,都设为默认值
ls ~/.ssh //系统会自动在~/.ssh目录下生成公钥(id_rsa.pub)和私钥(id_rsa)
ssh-copy-id -i ~/.ssh/id_rsa.pub 主机名 //将公钥分发到另外两台主机
ssh 主机名 //验证免密是否完成
2.0.1 Hadoop完全分布式搭建
2.0.2 解压Hadoop、Jdk压缩包
tar -zxvf hadoop-2.7.7.tar.gz
tar -zxvf jdk1.8.0_301.tar.gz
2.0.3 配置环境变量
vi /etc/profile
在文件末尾添加:
export JAVA_HOME=jdk安装路径
export HADOOP_HOME=hadoop安装路径
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:PATH
保存退出:
source /etc/profile //使修改生效
验证是否修改成功:
java -version
hadoop version
2.0.4 服务器功能规划
| 主机1 | 主机2 | 主机3 |
|---|---|---|
| NameNode | ResourceManager | DataNode |
| DataNode | DataNode | NodeManager |
| NodeManager | NodeManager | SecondaryNameNode |
2.0.5 分别修改hadoop配置文件 slaves、core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml
(1)slaves
vi slaves
删除原有内容,添加三台主机名
(2)core-site.xml
vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://主机1:8020</value>
</property>
<properety>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop2.7/data/tmp</value>
</property>
</configuration>
// fs.defaultFS为NameNode的地址 需提前创建
(3)hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>主机3:50090</value>
</property>
</configuration>
//dfs.namenode.secondary.http-address是指定secondaryNameNode的http访问地址和端口号,这里将主机3规划为SecondaryNameNode服务器
(4)yarn-site.xml
vim yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>sparkTL:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>sparkTL:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>sparkTL:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>sparkTL:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>sparkTL:8088</value>
</property>
</configuration>
(5)mapred-site.xml
cp mapred-site.xml.template mapred.site.xml //复制文件
vim maored.site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name> //设置mapreduce任务运行在yarn上
<value>yarn</value>
</property>
</configuration>
2.0.6 分发Hadoop文件
scp -r hadoop2.7 主机1:/usr/local
scp -r hadoopw.7 主机2:/usr/local //通过scp分发
2.0.7 格式NameNode
hdfs namenode -format //在主机1上执行格式化命令
注意:如果需要重新格式化NameNode,需要将原来NameNode和DataNode下的文件全部删除,不然会报错, NameNode和DataNode所在目录是core-site.xml中hadoop.tmp.dir、dfs.namenode.name.dir、dfs.datanode.data.dir属性配置的。
原因:因为每次格式化,默认创建是一个集群ID,并写入NameNode和DataNode的VERSION文件(目录:dfs/name/current和dfs/name/current)中,重新格式化时,默认会生成一个新的集群ID,如果不删除原来的目录,会导致namenode中的VERSION文件中是新的集群ID,而DataNode中是旧的集群ID,不一致时会报错。
另一种方法是格式化是指定集群ID参数,指定为旧的集群ID
2.1.0 启动集群
(1)启动HDFS
start-dfs.sh
(2) 启动YARN
start-yarn.sh
(3)在主机2上启动ResourceManager
yarn-daemon.sh start resourcemanager
(4) 查看 Web页面
http://主机1ID:50070 //HDFS
http://主机1ID:8088 //YARN
(5)测试job
用hadoop自带的wordcount例子在本地模式下测试跑mapreduce
1.准备mapreduce输入文件wc.input
vim wc.input
hadoop mapreduce hive
hbase spark storm
sqoop hadoop hive
spark hadoop
2.在HDFS创建input目录
hdfs dfs -mkdir /input
3.将wc.input上传到HDFS
hdfs dfs -put /usr/input/wc.input
4.运行hadoop自带的mapreduce Demo
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /input/wc.input /output
运行成功可以查看已经生成output文件夹
3.0 Hadoop HA安装
(1)检查ntp服务是否安装
rpm -qa | grep ntp
ntpdate-4.2.6p5-1.el6.centos.x86_64 //用来和某台服务器进行同步
ntp-4.2.6p5-1.el6.centos.x86_64 //用来提供时间同步服务
(2) 修改配置文件ntp.conf
vim /etc/ntp.conf
restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap //去掉该行注释,并讲网段改为集群网段,这里是100网段
#server 0.centos.pool.ntp.org iburst //将server域名配置注释掉
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
(3) 修改配置文件ntpd
vim /etc/sysconfig/ntpd
SYNC_CLOCK=yes //添加一行配置
(5)启动ntp服务
chkconfig ntpd on //这样每次机器启动时,ntp服务都会自动启动
4.0 Zookeeper分布式机器部署
(1)解压安装包
tar -zxvf zookeeper-3.4.8.tar.gz
(2)修改配置
复制conf下的zoo_sample.cfg副本,改名为zoo.cfg
cp conf/zoo_sample.cfg conf/zoo.cfg
vim zoo.cfg
dataDir=/usr/local/zookeeper3.4/data/zData //设置zookeeper的数据文件存放目录
server.1=主机1:2888:3888 //指定zookeeper集群中各个机器的信息
server.2=主机2:2888:3888
server.3=主机3:2888:3888
创建myid文件
在dataDir所指定的目录下创一个名为myid的文件,文件内容为server.后面的数字
touch data/zData/myid
echo 1 > data/zData/myid //将数字写进myid文件
cat data/zData/myid //查看是否写入成功
将配置文件分发到其他机器
scp -r /usr/local/zookeeper3.4 主机2:/usr/local
scp -r /usr/local/zookeeper3.4 主机3:/usr/local
修改其他主机的文件
echo 2 > /usr/local/zookeeper3.4/data/zData/myid
echo 3 > /usr/local/zookeeper3.4/data/zData/myid
4.1 启动zookeeper
bin/zkServer.sh start //需要在各个机器上分别启动zookeeper
QuorumPeerMain //启动成功会出现该进程
zookeeper命令
bin/zkCli.sh //进入zk shell模式,输入任意字符,可以列出所有的zookeeper命令
5.0 Spark安装配置
(1)解压spark安装包、配置环境变量
tar -zxvf spark-2.1.1-bin-hadoop2.7.gz
mv spark-2.1.1-bin-hadoop2.7 spark2.1 //重命名
vim /etc/profile //配置环境变量
export SPARK_HOME=/usr/local/spark2.1/
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
(2)修改配置文件
复制spark2.1/conf下的spark-env.sh.template文件并命名为spark-env.sh
vim spark-env.sh
在文件末尾添加:
export JAVA_HOME=/usr/local/java1.8 //jdk安装路径
export HADOOP_CONF_DIR=/usr/local/hadoop2.7/etc/hadoop/ //Hadoop配置文件的路径
export SPARK_MASTER_IP=192.168.72.132 //spark主节点的IP或机器名
export SPARK_MASTER_PORT=7077 //spark主节点的端口号
export SPARK_WORKER_CORES=1 //每台节点机器使用核数
export SPARK_WORKER_MEMORY=512m //worker节点能给予Executors的内存数
export SPARK_EXECUTOR_MEMORY=512m //每个Executors的内存
export SPARK_EXECUTOR_CORES=1 //Executors的核数
export SPARK_WORKER_INSTANCES=1 //每个节点的Worker进程数
(3)修改slaves文件
复制slaves.template文件重命名为slaves
vim slaves
将各子节点机器名添加进去:
主机1
主机2
主机3
(4)配置日志文件
复制spark-default.conf.template文件重命名为spark-default.conf
vim spark-default.conf
添加以下内容:
spark.主机1 spark://主机1:7077 //Spark主节点所在机器及端口号
spark.enventLog.enabled true //是否打开任务日志功能,默认为false
spark.eventLog.dir hdfs://主机名:8020/spark-logs //任务日志默认存放位置,配置为一个HDFS路径即可
spark.history.fs.logDirectory hdfs://主机名:8020/spark-logs //存放历史应用日志文件的目录
(5) 将配置好的spark目录复制到子节点
scp -r /usr/local/spark2.1 主机2:/usr/local/
scp -r /usr/local/spark2.1 主机3:/usr/local/
(6)创建spark-logs目录
hdfs dfs -mkdir /spark-logs
(7)启动Spark集群
sbin/start-all.sh //需要先启动Hadoop集群
(8)测试spark-shell和spark-sql
spark-shell //:q 退出命令
spark-sql //:quit;
6.0 Fink安装配置
(1)解压
tar -zxvf apache-flink-1.10.2.tar.gz
mv apache-flink-1.10.2 flink //重命名
(2)配置Flink
cd /usr/local/flink/deps/conf
配置zoo.cfg
vim zoo.cfg
server.1=主机1:2888:3888
server.2=主机2:2888:3888
server.3=主机3:2888:3888
配置slaves
vim slaves
主机2
主机3
<!-- 提供一个集群中worker节点的列表。因此,就像配置HDFS,编辑conf/slaves文件,然后输入每个worker节点的 IP/Hostname。每一个worker结点之后都会运行一个 TaskManager。-->
配置flink-conf.yarml
vim flink-conf.yarml
<!--设置jobmanager.rpc.address配置项为你的master节点地址。另外为了明确 JVM 在每个节点上所能分配的最大内存,我们需要配置jobmanager.heap.mb和taskmanager.heap.mb,值的单位是 MB。如果对于某些worker节点,你想要分配更多的内存给Flink系统,你可以在相应节点上设置FLINK_TM_HEAP环境变量来覆盖默认的配置。-->
jobmanager.rpc.address:主机1 //Master的主机名或IP
jobmanager.rpc.port: 6123 //JobManager监听端口
jobmanager.heap.size: 1024 //JobManager的内存参数
taskmanager.heap.mb: 8192 //每台taskmanager可用的总内存
rest.port: 8084 //指定flink端口
配置环境时遇到报错:ERROR org.apache.flink.runtime.entrypoint.ClusterEntrypoint - Could not star
原因:flink端口号8081被占用
解决:将8081换成8084
配置masters
主机1:8081
(3)将文件分发到另外两台主机
scp -r /usr/local/flink/ sparkTL1:/usr/local
scp -r /usr/local/flinl/ sparkTL2:/usr/local
(4)启动flink
在主节点flink的bin目录下:
./start-cluster.sh
jps
17566 StandaloneSessionClusterEntrypoint
(5) 查看web页面
主机1:8084
7.0 Kafka安装配置
(1)解压文件
tar -zxvf kafka_2.12-2.0.0.tgz
mv kafka_2.12-2.0.0 kafka //改名
报错:因为是在官网下载的源码安装,导致配置完启动失败
解决:重新下载安装包,不带src
(2)分发文件
scp -r kafka 主机2:/usr/local
scp -r kafka 主机3:/usr/local
(3)配置文件
进入/usr/local/kafka/config目录下修改server.properties
vim server.properties
broker.id=0 //当前机器在集群中的唯一标识,和zookeeper的myid性质一样
listeners=PLAINTEXT://主机1IP:9092 //kafka的tcp侦听ip地址
log.dirs=/usr/local/kafka/log //消息存放的目录,必须保证目录存在
zookeeper.connect=主机1:2181,主机2:2181,主机3:2181 //设置zookeeper的连接端口
将server.properties分发到另外两台从机
scp -r server.properties 主机2:/usr/local/kafka/config
scp -r server.properties 主机2:/usr/local/kafka/config
注意:因为主机2和主机3的kafka是通过scp发送的,所以除了要自己去修改主机和从机的broker.id还要自己去修改listenres,改成从机对应的IP地址。
(4)启动kafka
进入Kafka的bin目录
./kafka-server-start.sh /usr/local/kafka/config/server.properties &
注意:三个节点均要启动;启动无报错,即搭建成功,可以生产和消费消息,来检测是否搭建成功。
(5)测试
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic dgp //创建一个测试主题
./kafka-topics.sh --list --zookeeper localhost:2181 //查看主题
./kafka-console-producer.sh --broker-list 主机1:9092 --topic dgp
8.0 Flume安装配置
(1)解压
tar -zxvf apache-flume-1.7.0-bin.tar.gz
规划:三台主机的主机名分别为master,slave1,slave2(防火墙已关闭)
由slave1和slave2收集日志信息,传给master,再由master上传到hdfs上
(2)配置flume-env.sh文件
# 进入到conf文件夹下
cd apache-flume-1.8.0-bin/conf/
# 拷贝出来一个flume-env.sh文件
cp flume-env.sh.template flume-env.sh
# 修改flume-env.sh文件
vim flume-env.sh
#修改java路径
export JAVA_HOE=
(3)配置slave.conf文件
在conf下创建一个新的slave.conf文件
touch slave.conf
#修改
vim slave.conf
# 主要作用是监听目录中的新增数据,采集到数据之后,输出到avro (输出到agent)
# 注意:Flume agent的运行,主要就是配置source channel sink
# 下面的a1就是agent的代号,source叫r1 channel叫c1 sink叫k1
a1.sources = r1
a1.sinks = k1
a1.channels = c1
#具体定义source
a1.sources.r1.type = spooldir
#先创建此目录,保证里面空的
a1.sources.r1.spoolDir = /logs
#对于sink的配置描述 使用avro日志做数据的消费
a1.sinks.k1.type = avro
# hostname是最终传给的主机名称或者ip地址
a1.sinks.k1.hostname = master
a1.sinks.k1.port = 44444
#对于channel的配置描述 使用文件做数据的临时缓存 这种的安全性要高
a1.channels.c1.type = file
a1.channels.c1.checkpointDir = /home/uplooking/data/flume/checkpoint
a1.channels.c1.dataDirs = /home/uplooking/data/flume/data
#通过channel c1将source r1和sink k1关联起来
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
(4)将flume分发到其他主机
scp -r /usr/local/flume/ 主机2:/usr/local
scp -r /usr/local/flume/ 主机3:/usr/local
(5)修改主机1中flume的配置
vim master.conf
# 获取slave1,2上的数据,聚合起来,传到hdfs上面
# 注意:Flume agent的运行,主要就是配置source channel sink
# 下面的a1就是agent的代号,source叫r1 channel叫c1 sink叫k1
a1.sources = r1
a1.sinks = k1
a1.channels = c1
#对于source的配置描述 监听avro
a1.sources.r1.type = avro
# hostname是最终传给的主机名称或者ip地址
a1.sources.r1.bind = master
a1.sources.r1.port = 44444
#定义拦截器,为消息添加时间戳
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.TimestampInterceptor$Builder
#对于sink的配置描述 传递到hdfs上面
a1.sinks.k1.type = hdfs
#集群的nameservers名字
#单节点的直接写:hdfs://主机名(ip):9000/xxx
#ns是hadoop集群名称
a1.sinks.k1.hdfs.path = hdfs://主机1/flume/%Y%m%d
a1.sinks.k1.hdfs.filePrefix = events-
a1.sinks.k1.hdfs.fileType = DataStream
#不按照条数生成文件
a1.sinks.k1.hdfs.rollCount = 0
#HDFS上的文件达到128M时生成一个文件
a1.sinks.k1.hdfs.rollSize = 134217728
#HDFS上的文件达到60秒生成一个文件
a1.sinks.k1.hdfs.rollInterval = 60
#对于channel的配置描述 使用内存缓冲区域做数据的临时缓存
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
#通过channel c1将source r1和sink k1关联起来
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
(6)启动测试
若没有配置环境变量,到flume的bin目录下
.flume-ng agent -n a1 -c conf -f /usr/local/flume/conf/master.conf -Dflume.root.logger=INFO,console
启动另外两台主机的flume
首先需要在flume目录下创建logs目录
mkdir logs
主机2:
./flume-ng agent -n a1 -c conf -f /usr/local/flume/conf/slave.conf -Dflume.root.logger=INFO,console
主机3:
./flume-ng agent -n a1 -c conf -f /usr/local/flume/conf/slave.conf -Dflume.root.logger=INFO,console
(7) 测试
在主机2的/usr/tmp文件下新建个test文件
vim test
随便写一些内容
helloworld
testflume
保存退出
将其复制到logs文件夹下
cp test /usr/local/flume/logs/
查看主机1
查看HadoopWeb界面
若/flume文件夹下有文件生成