大数据环境搭建

179 阅读10分钟

大数据平台环境搭建

(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
NameNodeResourceManagerDataNode
DataNodeDataNodeNodeManager
NodeManagerNodeManagerSecondaryNameNode

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文件夹下有文件生成

搭建完成