一 基础配置
1 修改主机名
3个虚拟机依次执行:
hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2
2 修改hosts文件
三台虚拟机依次执行ip a命令,查看ens35网络接口的IP地址
192.168.90.41 master
192.168.90.5 slave1
192.168.90.231 slave2
3个虚拟机依次执行su输入密码password切换到root用户
3个虚拟机依次执行 vi /etc/hosts命令修改hosts文件
192.168.90.41 master
192.168.90.5 slave1
192.168.90.231 slave2
3 设置时间同步
三台虚拟机依次执行vi /etc/sysconfig/ntpd命令,修改以下配置
YS_HWLOCK=yes
三台虚拟机依次执行systemctl start ntpd命令
三台虚拟机依次执行date命令,查看时间是否同步
注意:如果不连接互联网,ntp是无法时间同步成功的,如果3台主机时间相差太多,可手动执行例如date -s 11:14:25 命令设置系统时间为11:14:25
4 关闭防火墙
关闭防火墙(三台都要关闭),三台虚拟机依次执行
[root@master ~]# systemctl stop firewalld.service
[root@slave1 ~]# systemctl stop firewalld.service
[root@slave2 ~]# systemctl stop firewalld.service
关闭防火墙自启,三台虚拟机依次执行
[root@master ~]# systemctl disable firewalld.service
[root@slave1 ~]# systemctl disable firewalld.service
[root@slave2 ~]# systemctl disable firewalld.service
5 设置ssh免密
三台虚拟机依次执行
执行su hadoop命令 切换到hadoop用户
执行ssh-keygen -t rsa -P ""命令
创建公钥cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
给公钥执行权限
在master主机执行 chmod 700 ~/.ssh/authorized_keys
在slave1主机执行 chmod 700 ~/.ssh/authorized_keys
在slave2主机执行 chmod 700 ~/.ssh/authorized_keys
将公钥传输给 slave1 和 slave2
在master主机执行 scp ~/.ssh/authorized_keys hadoop@slave1:~/.ssh/
在master主机执行 scp ~/.ssh/authorized_keys hadoop@slave2:~/.ssh/
登陆测试
在master主机执行 ssh slave1 登陆成功后 执行exit命令退出
在master主机执行 ssh slave2 登陆成功后 执行exit命令退出
在master主机执行 ssh master 如果登陆不成功,按提示输入密码password,登陆成功后再执行exit命令退出
6 安装Java环境
解压安装jdk
在master主机执行su切换到root用户,依次执行以下命令
在master主机执行 tar -zxvf /opt/software/jdk-8u152-linux-x64.tar.gz -C /usr/local/src
在master主机执行 mv /usr/local/src/jdk1.8.0_152/ /usr/local/src/java
在master主机执行 chown -R hadoop:hadoop /usr/local/src/java
配置java 的环境变量
在master主机执行vi /etc/profile,增加以下内容
export JAVA_HOME=/usr/local/src/java
export PATH=$PATH:$JAVA_HOME/bin
生效环境变量
在master主机执行source /etc/profile
在master主机执行update-alternatives --install /usr/bin/java java /usr/local/src/java/bin/java 200
在master主机执行update-alternatives --set java /usr/local/src/java/bin/java
查看java 版本和执行jps
在master主机执行java -version
在master主机执行jps
发送java目录到slave1和slave2
在master主机执行scp -r /usr/local/src/java/ root@slave1:/usr/local/src/
在master主机执行scp -r /usr/local/src/java/ root@slave2:/usr/local/src/
发送profie文件到slave1和slave2
在master主机执行scp /etc/profile root@slave1:/etc/
在master主机执行scp /etc/profile root@slave2:/etc/
生效环境变量
在slave1主机执行su切换到root用户,依次执行以下命令
在slave1主机执行source /etc/profile
在slave1主机执行update-alternatives --install /usr/bin/java java /usr/local/src/java/bin/java 200
在slave1主机执行update-alternatives --set java /usr/local/src/java/bin/java
查看java 版本和执行jps
在slave1主机执行java -version
在slave1主机执行jps
在slave2主机执行su切换到root用户,依次执行以下命令
在slave2主机执行source /etc/profile
在slave2主机执行update-alternatives --install /usr/bin/java java /usr/local/src/java/bin/java 200
在slave2主机执行update-alternatives --set java /usr/local/src/java/bin/java
查看java 版本和执行jps
在slave2主机执行java -version
在slave2主机执行jps
二 安装配置ZooKeeper集群
1 在master主机解压并安装 zookeeper
在master主机执行su切换到root用户,依次执行以下命令
[root@master ~]# tar -zxvf /opt/software/zookeeper-3.4.8.tar.gz -C /usr/local/src/
[root@master ~]# cd /usr/local/src/
[root@master src]# mv zookeeper-3.4.8 zookeeper
创建 ZooKeeper 数据目录
在master主机执行mkdir /usr/local/src/zookeeper/data
在master主机执行mkdir /usr/local/src/zookeeper/logs
2 ZooKeeper参数配置
在master主机执行命令 cd /usr/local/src/zookeeper 切换到zookeeper目录
在master主机执行 vi /etc/profile 增加以下内容:
#zookeeper environment
export ZK_HOME=/usr/local/src/zookeeper
export PATH=$PATH:$ZK_HOME/bin
修改zoo.cfg配置文件
在master主机执行命令cd conf/
在master主机执行命令 cp zoo_sample.cfg zoo.cfg
在master主机执行命令 vi zoo.cfg 修改并增加如下配置:
#修改
dataDir=/usr/local/src/zookeeper/data
#增加
dataLogDir=/usr/local/src/zookeeper/logs
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
创建myid配置文件
在master主机执行命令 cd /usr/local/src/zookeeper/data 切换到data目录
在master主机执行命令 echo 1 > myid
分发ZooKeeper目录到slave1和slave2
在master主机执行命令scp -r /usr/local/src/zookeeper/ root@slave1:/usr/local/src/
在master主机执行命令scp -r /usr/local/src/zookeeper/ root@slave2:/usr/local/src/
分发环境变量profile文件并使其生效
在master主机执行scp /etc/profile root@slave1:/etc/
在master主机执行scp /etc/profile root@slave2:/etc/
在master主机执行命令source /etc/profile
在slave1主机执行命令source /etc/profile
在slave2主机执行命令source /etc/profile
修改myid配置文件
在slave1主机执行命令 cd /usr/local/src/zookeeper/data 切换到data目录
在slave1主机执行命令 echo 2 > myid
在slave2主机执行命令 cd /usr/local/src/zookeeper/data 切换到data目录
在slave2主机执行命令 echo 3 > myid
3 启动 ZooKeeper 集群
修改ZooKeeper目录的拥有者为hadoop用户
在master主机执行命令chown -R hadoop:hadoop /usr/local/src/zookeeper
在slave1主机执行命令chown -R hadoop:hadoop /usr/local/src/zookeeper
在slave2主机执行命令chown -R hadoop:hadoop /usr/local/src/zookeeper
在master主机执行su hadoop命令 切换到hadoop用户
在master主机执行source /etc/profile
在master主机执行zkServer.sh start
在slave1主机执行su hadoop命令 切换到hadoop用户
在slave1主机执行source /etc/profile
在slave1主机执行zkServer.sh start
在slave2主机执行su hadoop命令 切换到hadoop用户
在slave2主机执行source /etc/profile
在slave2主机执行zkServer.sh start
查看ZooKeeper状态
在master主机执行zkServer.sh status
在slave1主机执行zkServer.sh status
在slave2主机执行zkServer.sh status
有1个leader和2个follower说明ZooKeeper启动成功!
三 安装配置Hadoop HA集群
1 解压安装 Hadoop
在master主机执行su切换到root用户,依次执行以下命令
在master主机执行tar -zxvf /opt/software/hadoop-2.7.1.tar.gz -C /usr/local/src/
在master主机执行mv /usr/local/src/hadoop-2.7.1 /usr/local/src/hadoop
2 配置hadoop环境变量
在master主机执行 vi /etc/profile 增加以下内容:
#hadoop enviroment
export HADOOP_HOME=/usr/local/src/hadoop #HADOOP_HOME 指向 JAVA 安装目录
export HADOOP_PREFIX=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
3 配置hadoop-env.sh配置文件
在master主机执行cd /usr/local/src/hadoop/etc/hadoop 切换到hadoop的配置文件所在目录
在master主机执行vi hadoop-env.sh 再文件末尾增加以下内容:
export JAVA_HOME=/usr/local/src/java
4 配置 core-site.xml 配置文件
在master主机执行vi core-site.xml,在
5 配置 hdfs-site.xml 配置文件
在master主机执行vi hdfs-site.xml,在
sshfence
shell(/bin/true)
6 配置mapred-site.xml配置文件
在master主机执行 cp mapred-site.xml.template mapred-site.xml
在master主机执行vi mapred-site.xml 在
7 配置yarn-site.xml配置文件
8 配置slaves配置文件
在master主机执行vi slaves 删除第1行localhost 增加以下内容:
master
slave1
slave2
9 创建存放数据的目录
在master主机执行 mkdir -p /usr/local/src/hadoop/tmp/hdfs/nn
在master主机执行 mkdir -p /usr/local/src/hadoop/tmp/hdfs/dn
在master主机执行 mkdir -p /usr/local/src/hadoop/tmp/hdfs/jn
在master主机执行 mkdir -p /usr/local/src/hadoop/tmp/logs
10 分发hadoop目录到slave1和slave2
在master主机执行scp -r /etc/profile root@slave1:/etc/
在master主机执行scp -r /etc/profile root@slave2:/etc/
在master主机执行scp -r /usr/local/src/hadoop root@slave1:/usr/local/src/
在master主机执行scp -r /usr/local/src/hadoop root@slave2:/usr/local/src/
11 修改hadoop目录所有者和所有者组为hadoop
master,slave1和slave2主机都要先执行su命令切换到root用户
在master主机执行chown -R hadoop:hadoop /usr/local/src/hadoop/
在master主机执行chown -R hadoop:hadoop /usr/local/src/hadoop/
在master主机执行chown -R hadoop:hadoop /usr/local/src/hadoop/
12 使所有的配置参数和环境变量生效
master,slave1和slave2主机都要先执行su hadoop命令切换到hadoop用户
在master主机执行su hadoop
在master主机执行source /etc/profile
在slave1主机执行su hadoop
在slave1主机执行source /etc/profile
在slave2主机执行su hadoop
在slave2主机执行source /etc/profile
13 启动Hadoop HA集群
启动journalnode守护进程
master主机先要确保已经切换到hadoop用户,只需在master主机执行hadoop-daemons.sh start journalnode命令
在master,slave1和slave2依次执行jps命令检查是否都有JournalNode进程,3台虚拟机都有JournalNode进程说明启动成功
说明:如果提示master免密登陆自己出错,在master主机执行ssh master,按提示输入密码password,确保master免密登陆自己成功,然后exit退出再执行hadoop-daemons.sh start journalnode命令命令
14 格式化namenode
在master主机执行命令hdfs namenode -format 提示" Storage directory /usr/local/src/hadoop/tmp/hdfs/nn has been successfully formatted."说明格式化namenode成功
15 注册ZNode
在master主机执行命令hdfs zkfc -formatZK 提示“Successfully created /hadoop-ha/mycluster in ZK”说明注册ZNode成功
16 启动hdfs
在master主机执行命令start-dfs.sh
17 启动yarn
在master主机执行命令start-yarn.sh
18 同步master元数据
拷贝namenode的元数据到其它节点(在master主机执行)
在master主机执行scp -r /usr/local/src/hadoop/tmp/hdfs/nn/* slave1:/usr/local/src/hadoop/tmp/hdfs/nn/
在master主机执行scp -r /usr/local/src/hadoop/tmp/hdfs/nn/* slave2:/usr/local/src/hadoop/tmp/hdfs/nn/
19 在slave1上启动resourcemanager和namenode进程
在slave1主机执行yarn-daemon.sh start resourcemanager
在slave1主机执行hadoop-daemon.sh start namenode
20 启动 MapReduce 任务历史服务器
在master主机执行yarn-daemon.sh start proxyserver
在master主机执行mr-jobhistory-daemon.sh start historyserver
21 查看Hadoop HA的所有进程
在master主机执行jps命令,出现以下进程说明Hadoop HA启动成功
87633 DataNode
88864 Jps
87492 NameNode
84758 QuorumPeerMain
88822 JobHistoryServer
88201 NodeManager
88088 ResourceManager
87948 DFSZKFailoverController
87167 JournalNode
在slave1主机执行jps命令,出现以下进程说明Hadoop HA启动成功
81792 JournalNode
82802 NameNode
82310 NodeManager
82891 Jps
82730 ResourceManager
82205 DFSZKFailoverController
80591 QuorumPeerMain
82062 DataNode
在slave1主机执行jps命令,出现以下进程说明Hadoop HA启动成功
82272 NodeManager
80708 QuorumPeerMain
82061 DataNode
81823 JournalNode
82399 Jps
22 执行Hadoop HA的主备切换测试
1)NameNode主备切换测试
在master主机依次执行
[hadoop@master hadoop]$ hdfs haadmin -getServiceState master
active
[hadoop@master hadoop]$ hdfs haadmin -getServiceState slave1
standby
手动切换服务状态
在master主机执行 hadoop-daemon.sh stop namenode
在master主机查看状态
[hadoop@master ~]$ hdfs haadmin -getServiceState master
Operation failed: Call From master/192.168.90.41 to master:8020 failed on connection exception
[hadoop@master hadoop]$ hdfs haadmin -getServiceState slave1
active
在master主机执行 hadoop-daemon.sh start namenode
在master主机再次查看状态
[hadoop@master hadoop]$ hdfs haadmin -getServiceState master
standby
[hadoop@master hadoop]$ hdfs haadmin -getServiceState slave1
active
说明namenode主备切换成功!
2)ResourceManager主备切换测试
在master主机执行 yarn rmadmin -getServiceState rm1
active
在master主机执行 yarn rmadmin -getServiceState rm2
standby
在master主机执行 yarn-daemon.sh stop resourcemanager
stopping resourcemanager
在master主机执行 yarn rmadmin -getServiceState rm1
Operation failed: Call From master/192.168.90.41 to master:8033 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
在master主机执行 yarn rmadmin -getServiceState rm2
active
在master主机执行 yarn-daemon.sh start resourcemanager
在master主机执行 yarn rmadmin -getServiceState rm1
21/11/22 17:38:19 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
standby
说明resourcemanager主备切换成功!
四 安装配置Kafka集群
注意:必须确保实验二的ZooKeeper集群启动成功才能执行本实验!
1 解压缩Kafka安装包
在master主机执行su命令切换到root用户
在master主机执行 tar -zxvf /opt/software/kafka1.0.0.tgz -C /usr/local/src/
在master主机执行mv /usr/local/src/kafka_2.11-1.0.0/ /usr/local/src/kafka
2 修改配置文件server.properties
在master主机执行 cd /usr/local/src/kafka/config/
在master主机执行 vi server.properties
在server.properties文件下找到下列配置项,并修改为:
broker.id=0
zookeeper.connect=master,slave1,slave2
3 把 kafka目录发送到slave1和slave2主机
在master主机执行 scp -r /usr/local/src/kafka/ root@slave1:/usr/local/src/
在master主机执行 scp -r /usr/local/src/kafka/ root@slave2:/usr/local/src/
在slave1主机执行su命令切换到root用户
在slave2主机执行su命令切换到root用户
在master主机执行 chown -R hadoop:hadoop /usr/local/src/kafka
在slave1主机执行 chown -R hadoop:hadoop /usr/local/src/kafka
在slave2主机执行 chown -R hadoop:hadoop /usr/local/src/kafka
4 修改slave1和slave2中的server.properties文件
在slave1主机执行su命令切换到root用户
在slave1主机执行 cd /usr/local/src/kafka/config/
在slave1主机执行 vi server.properties
在server.properties文件下找到下列配置项,并修改为:
broker.id=1
在slave2主机执行su命令切换到root用户
在slave2主机执行 cd /usr/local/src/kafka/config/
在slave2主机执行 vi server.properties
在server.properties文件下找到下列配置项,并修改为:
broker.id=2
5 启动kafka服务
在master主机执行su hadoop命令切换到hadoop用户
在master启动kafka服务
在master主机执行命令/usr/local/src/kafka/bin/kafka-server-start.sh /usr/local/src/kafka/config/server.properties
在slave1主机执行su hadoop命令切换到hadoop用户
在slave1启动kafka服务
在slave1主机执行命令/usr/local/src/kafka/bin/kafka-server-start.sh /usr/local/src/kafka/config/server.properties
在slave2主机执行su hadoop命令切换到hadoop用户
在slave2启动kafka服务
在slave2主机执行命令/usr/local/src/kafka/bin/kafka-server-start.sh /usr/local/src/kafka/config/server.properties
5 测试Kafka是否运行正确
1)在XShell给master主机打开一个新终端,确保当前用户是hadoop
在master新终端执行 /usr/local/src/kafka/bin/kafka-topics.sh --create --zookeeper master:2181,slave1:2181,slave2:2181 --replication-factor 2 --topic hello --partitions 1
2)查看topic是否创建成功
在master主机新终端执行 /usr/local/src/kafka/bin/kafka-topics.sh --list --zookeeper master:2181,slave1:2181,slave2:2181
输出hello说明topic创建成功
3)在master中创建一个生产者
使用kafka-console-producer.sh 脚本来创建生产者
在master主机新终端执行/usr/local/src/kafka/bin/kafka-console-producer.sh --broker-list master:9092,slave1:9092,slave2:9092 --topic hello
执行后终端不要关闭
4)在slave1中创建一个消费者
在XShell给slave1主机打开一个新终端,确保当前用户是hadoop
在slave1主机新终端执行/usr/local/src/kafka/bin/kafka-console-consumer.sh --zookeeper master:2181,slave1:2181,slave2:2181 --topic hello --from-beginning
执行后该终端不要关闭
5)在创建的生产者中输入信息
在master主机新终端执行>hello kafka
6)在创建的消费者中查看信息
在slave1主机新终端查看消息,同样出现的消息说明消费者的消息接收成功,则说明kafka组件验证成功!
在创建消费者的终端中可以看到同样的输出信息
Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future
major release. Consider using the new consumer by passing [bootstrap-server] instead of
[zookeeper].
hello kafka
五 安装配置Spark集群
1 安装Scala
1) 解压缩Scala安装包
在master主机执行su命令切换到root用户
在master主机执行命令 tar -zxvf /opt/software/scala-2.11.8.tgz -C /usr/local/src/
在master主机执行命令 mv /usr/local/src/scala-2.11.8/ /usr/local/src/scala
2) 把Scala目录发送到slave1和slave2主机
在master主机执行 scp -r /usr/local/src/scala/ root@slave1:/usr/local/src/
在master主机执行 scp -r /usr/local/src/scala/ root@slave2:/usr/local/src/
3) 修改scala目录的用户权限
在slave1主机执行su命令切换到root用户
在slave2主机执行su命令切换到root用户
在master主机执行chown -R hadoop:hadoop /usr/local/src/scala
在slave1主机执行chown -R hadoop:hadoop /usr/local/src/scala
在slave2主机执行chown -R hadoop:hadoop /usr/local/src/scala
4) 修改profile文件
在master主机执行 vi /etc/profile 增加以下内容:
export SCALA_HOME=/usr/local/src/scala
export PATH=$PATH:$SCALA_HOME/bin
发送profie文件到slave1和slave2
在master主机执行scp /etc/profile root@slave1:/etc/
在master主机执行scp /etc/profile root@slave2:/etc/
在master主机执行su hadoop命令切换到hadoop用户
在slave1主机执行su hadoop命令切换到hadoop用户
在slave2主机执行su hadoop命令切换到hadoop用户
在master主机执行source /etc/profile
在slave1主机执行source /etc/profile
在slave2主机执行source /etc/profile
5) 验证Scala安装是否成功
在master,slave1和slave2主机执行scala -version命令,都能出现以下信息说明Scala安装成功
Scala code runner version 2.11.8 -- Copyright 2002-2016, LAMP/EPFL
在master,slave1和slave2主机执行scala命令,都能进入scala终端提示更能说明Scala安装成功
Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_152).
Type in expressions for evaluation. Or try :help.
scala>
2 安装Spark
1) 解压缩Spark安装包
在master主机执行su命令切换到root用户
在master主机执行命令 tar -zxvf /opt/software/spark-2.0.0-bin-hadoop2.6.tgz -C /usr/local/src/
在master主机执行命令 mv /usr/local/src/spark-2.0.0-bin-hadoop2.6/ /usr/local/src/spark
2) 修改profile文件
在master主机执行 vi /etc/profile 增加以下内容:
export SPARK_HOME=/usr/local/src/spark
export PATH=$PATH:$SPARK_HOME/bin:$PATH
3)修改Spark配置参数
在master主机执行 cd /usr/local/src/spark/conf/
在master主机执行cp spark-env.sh.template spark-env.sh
在master主机执行 vi spark-env.sh 文件末尾增加以下内容:
export JAVA_HOME=/usr/local/src/java
export HADOOP_HOME=/usr/local/src/hadoop
export SCALA_HOME=/usr/local/src/scala
export SPARK_MASTER_IP=master
export SPARK_MASTER_PORT=7077
export SPARK_DIST_CLASSPATH=$(/usr/local/src/hadoop/bin/hadoop classpath)
export HADOOP_CONF_DIR=/usr/local/src/hadoop/etc/hadoop
export SPARK_YARN_USER_ENV="CLASSPATH=/usr/local/src/hadoop/etc/hadoop"
export YARN_CONF_DIR=/usr/local/src/hadoop/etc/hadoop
在master主机执行 cp slaves.template slaves
在master主机执行vi slaves 删除最后一行的localhost并修改为以下内容:
master
slave1
slave2
4)把 Spark目录发送到slave1和slave2主机
在master主机执行 scp -r /usr/local/src/spark/ root@slave1:/usr/local/src/
在master主机执行 scp -r /usr/local/src/spark/ root@slave2:/usr/local/src/
发送profie文件到slave1和slave2
在master主机执行scp /etc/profile root@slave1:/etc/
在master主机执行scp /etc/profile root@slave2:/etc/
5)修改Spark目录的用户权限
在slave1主机执行su命令切换到root用户
在slave2主机执行su命令切换到root用户
在master主机执行chown -R hadoop:hadoop /usr/local/src/spark
在slave1主机执行chown -R hadoop:hadoop /usr/local/src/spark
在slave2主机执行chown -R hadoop:hadoop /usr/local/src/spark
在master主机执行su hadoop命令切换到hadoop用户
在slave1主机执行su hadoop命令切换到hadoop用户
在slave2主机执行su hadoop命令切换到hadoop用户
在master主机执行source /etc/profile
在slave1主机执行source /etc/profile
在slave2主机执行source /etc/profile
6)启动Hadoop集群
注意:必须确保实验二的ZooKeeper集群和实验三的Hadoop HA已经启动成功!
7)以集群模式运行 SparkPi 实例程序
启动 SparkPi 实例程序
在master主机执行cd /usr/local/src/spark/ 切换到spark目录
在master主机执行./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client --driver-memory 512M --executor-memory 512M --executor-cores 1 examples/jars/spark-examples_2.11-2.0.0.jar 40
在运行结果中可以找到我们需要的pi值,如下所示:
20/07/04 05:48:48 INFO scheduler.DAGScheduler: Job 0 finished: reduce at SparkPi.scala:38,
took 3.866892 s
Pi is roughly 3.141053785263446
六 安装配置运行Flume
注意:必须确保实验三的Hadoop HA集群启动成功才能执行本实验!
1 解压缩Flume安装包
在master主机执行su命令切换到root用户
在master主机执行 tar zxvf /opt/software/apache-flume-1.6.0-bin.tar.gz -C /usr/local/src/
在master主机执行 mv /usr/local/src/apache-flume-1.6.0-bin/ /usr/local/src/flume
2 创建agent代理文件
在master主机执行cd /usr/local/src/flume/conf
在master主机执行vi hdfs_sink.conf 添加以下内容:
#指定 sources 的别名
a1.sources = r1
#指定 sinks 的别名
a1.sinks = k1
#指定 channels 的别名
a1.channels = c1
# Describe/configure the source
#指定 sources 的类型
a1.sources.r1.type = syslogtcp
#指定 sources 的端口
a1.sources.r1.port = 5140
#指定 sources 的主机名
a1.sources.r1.host = localhost
# Describe the sink
#指定 sinks 的类型
a1.sinks.k1.type = hdfs
#指定 sinks 的 hdfs 的路径
a1.sinks.k1.hdfs.path = hdfs://master:8020/user/flume/syslogtcp
#指定 sinks 的 hdfs 的文件名前缀
a1.sinks.k1.hdfs.filePrefix = Syslog
#指定时间戳需要四舍五入
a1.sinks.k1.hdfs.round = true
#四舍五入到小于当前时间的最高倍数
a1.sinks.k1.hdfs.roundValue = 10
# 使用本地时间戳
a1.sinks.k1.hdfs.useLocalTimeStamp=true
#四舍五入值的单位,秒、分钟或小时
a1.sinks.k1.hdfs.roundUnit = minute
# Use a channel which buffers events in memory
#指定 channels 的类型
a1.channels.c1.type = memory
# Bind the source and sink to the channel
#将 sources 和 channels 连接
a1.sources.r1.channels = c1
#将 sinks 和 channels 连接
a1.sinks.k1.channel = c1
3 启动flume进程
在master主机执行命令 /usr/local/src/flume/bin/flume-ng agent -c /usr/local/src/flume/conf/ -f /usr/local/src/flume/conf/hdfs_sink.conf -n a1 -Dflume.root.logger=DEBUG,console
向监听端口发送信息
4 用XSHell工具打开一个新的master主机终端
在新的master终端执行命令 nc localhost 5140
随意输入一些字符串
aaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbb
cccccccccccccccccccccccccc
5 在任何主机执行命令 hadoop fs -ls /user/flume/syslogtcp 显示日志文件,例如
-rw-r--r-- 2 hadoop supergroup 182 2021-11-23 16:53 /user/flume/syslogtcp/Syslog.1637657587754
-rw-r--r-- 2 hadoop supergroup 141 2021-11-23 16:55 /user/flume/syslogtcp/Syslog.1637657725980
执行命令 hadoop fs -cat /user/flume/syslogtcp/Syslog.1637657587754
执行命令 hadoop fs -cat /user/flume/syslogtcp/Syslog.1637657725980
日志文件中会显示之前输入的字符串
aaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbb
cccccccccccccccccccccccccc
七 安装配置运行Hive
注意:必须确保实验三的Hadoop HA集群启动成功才能执行本实验!
1 卸载MariaDB
查看Linux已安装的mariadb数据库
在master主机执行su命令切换到root用户
在master主机执行命令 rpm -qa | grep mariadb 会显示mariadb-libs-5.5.56-2.el7.x86_64
卸载mariadb-libs-5.5.56-2.el7.x86_64
在master主机执行命令 rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
在master主机执行命令 rpm -qa | grep mariadb 无显示
2 使用rpm安装mysql
在master主机执行命令 cd /opt/software/mysql-5.7.18
在master主机执行命令 rpm -ivh mysql-community-common-5.7.18-1.el7.x86_64.rpm
在master主机执行命令 rpm -ivh mysql-community-libs-5.7.18-1.el7.x86_64.rpm
在master主机执行命令 rpm -ivh mysql-community-client-5.7.18-1.el7.x86_64.rpm
在master主机执行命令 rpm -ivh mysql-community-server-5.7.18-1.el7.x86_64.rpm
在master主机执行命令 rpm -qa | grep mysql 检查mysql已安装
mysql-community-client-5.7.18-1.el7.x86_64
mysql-community-libs-5.7.18-1.el7.x86_64
mysql-community-common-5.7.18-1.el7.x86_64
mysql-community-server-5.7.18-1.el7.x86_64
3 修改mysql配置文件
在master主机执行命令 vi /etc/my.cnf 注意以下配置已存在则进行修改,如果不存在则需要新增
default-storage-engine=innodb
innodb_file_per_table
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server=utf8
5 启动mysql服务和查看mysql状态
在master主机执行命令 systemctl start mysqld
在master主机执行命令 systemctl status mysqld 提示active (running)说明mysql启动成功
6 设置mysql密码
在master主机执行命令cat /var/log/mysqld.log | grep password 查看初始密码:
2021-11-23T09:11:17.308380Z 1 [Note] A temporary password is generated for root@localhost: Bbh6SgbTPH=?
在master主机执行命令 mysql_secure_installation 重新设定密码和配置
先输入初始密码Bbh6SgbTPH=?
再设定符合安全规则的密码Password123$
后面遇到提示依次输入y n y y
7 登陆MySQL终端
在master主机执行命令 mysql -uroot -pPassword123$
8 创建Hive用户与元数据
mysql>create database hive_db;
mysql>create user hive identified by 'Password123$';
mysql>grant all privileges on *.* to hive@'%' identified by 'Password123$' with grant option;
mysql>grant all privileges on *.* to 'root'@'%'identified by 'Password123$' with grant option;
mysql>flush privileges;
mysql>quit
八 安装配置运行Hive
1)解压Hive安装包
在master主机切换到root用户执行以下命令:
在master主机执行命令tar -zxvf /opt/software/apache-hive-2.0.0-bin.tar.gz -C /usr/local/src/
在master主机执行命令mv /usr/local/src/apache-hive-2.0.0-bin /usr/local/src/hive
在master主机执行命令 chown -R hadoop:hadoop hive
2)编辑/etc/profile 文件。
在master主机执行命令 vi /etc/profile 增加以下配置参数:
# set Hive environment
export HIVE_HOME=/usr/local/src/hive
export PATH=$HIVE_HOME/bin:$PATH
export HIVE_CONF_DIR=$HIVE_HOME/conf
在master主机执行命令source /etc/profile 使得Hive环境变量在系统全局范围生效
3)配置Hive参数
修改 Hadoop的core-site.xml 文件
在master主机执行命令cd /usr/local/src/hadoop/etc/hadoop
在master主机执行命令 vi core-site.xml 在
在master主机执行命令 scp core-site.xml slave1:/usr/local/src/hadoop/etc/hadoop/
在master主机执行命令 scp core-site.xml slave2:/usr/local/src/hadoop/etc/hadoop/
10 启动hiveserver2服务
在master主机执行命令hiveserver2 启动hiveserver2服务,等待时间较长
11 添加远程访问节点
假设在slaves1节点进行远程访问,首先需要在slaves1上添加 Hive 组件,从master节点复制即可
在master主机执行命令 scp -r /usr/local/src/hive root@slave1:/usr/local/src/
在slaves1主机执行su命令切换到root用户
在slaves1主机执行命令 chown -R hadoop:hadoop /usr/local/src/hive
在master主机执行命令 scp /etc/profile slave1:/etc
在slaves1主机执行 su hadoop命令切换到hadoop用户
在slaves1主机执行命令 source /etc/profile
进行远程访问
通过jdbc连接到beeline就可以对 hive进行操作
在slaves1主机执行 su hadoop命令切换到hadoop用户
在slaves1主机执行 beeline -u jdbc:hive2://master:10000 进入beeline终端
Beeline version 2.0.0 by Apache Hive
beeline>
也可以在Hive WebUI页面上查看访问的客户端http://master:10002/hiveserver2.jsp
九 安装配置运行Hbase集群
1 解压Hive安装包
在master主机切换到root用户执行以下命令:
在master主机执行命令 tar -zxvf /opt/software/hbase-1.2.1-bin.tar.gz -C /usr/local/src/
在master主机执行命令 mv /usr/local/src/hbase-1.2.1 /usr/local/src/hbase
在master主机执行命令 chown -R hadoop:hadoop hive
2 编辑/etc/profile 文件。
在master主机执行命令 vi /etc/profile 增加以下配置参数:
# set hbase environment
export Hbase_HOME=/usr/local/src/hbase
export PATH=$PATH:$Hbase_HOME/bin
3 修改Hbase配置文件
在master主机执行命令 cd /usr/local/src/hbase/conf
在master主机执行命令 vi hbase-env.sh 增加以下内容:
export JAVA_HOME=/usr/local/src/java
export HADOOP_HOME=/usr/local/src/hadoop
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export Hbase_MANAGES_ZK=false
export Hbase_LOG_DIR=${Hbase_HOME}/logs
export Hbase_PID_DIR=${Hbase_HOME}/pid
在master主机执行命令 vi hbase-site.xml 在
在master主机执行命令 vi regionservers 删除原有的localhost,增加以下内容:
slave1
slave2
将Hadoop的core-site.xml和hdfs-site.xml两个配置文件拷贝到Hbase的conf子目录
在master主机执行命令cp /usr/local/src/hadoop/etc/hadoop/core-site.xml /usr/local/src/hbase/conf/
在master主机执行命令cp /usr/local/src/hadoop/etc/hadoop/hdfs-site.xml /usr/local/src/hbase/conf/
4 分发Hbase目录到slave1和slave2
在master主机执行命令 scp -r /usr/local/src/hbase root@slave1:/usr/local/src
在master主机执行命令 scp -r /usr/local/src/hbase root@slave2:/usr/local/src
在master主机执行 chown -R hadoop:hadoop /usr/local/src/hbase
在slave1主机执行 chown -R hadoop:hadoop /usr/local/src/hbase
在slave2主机执行 chown -R hadoop:hadoop /usr/local/src/hbase
5 发送profie文件到slave1和slave2
在master主机执行scp /etc/profile root@slave1:/etc/
在master主机执行scp /etc/profile root@slave2:/etc/
在master主机执行su hadoop命令切换到hadoop用户
在slave1主机执行su hadoop命令切换到hadoop用户
在slave2主机执行su hadoop命令切换到hadoop用户
在master主机执行source /etc/profile
在slave1主机执行source /etc/profile
在slave2主机执行source /etc/profile
6 启动Hbase集群
必须确保实验二的ZooKeeper集群和实验三的Hadoop HA已经启动成功,才能启动Hbase集群!
在master主机执行su hadoop命令切换到hadoop用户
在master主机执行start-hbase.sh命令启动Hbase集群
在3台主机依次执行jps命令查看Hbase进程:
master主机已运行HMaster进程
slave1主机已运行HRegionServer进程
slave1主机已运行HRegionServer进程
说明Hbase集群启动成功!
十 Sqoop数据导入导出
必须确保实验三的Hadoop HA已经启动成功,才能执行本实验!
1 解压缩Sqoop安装包
在master主机执行su命令切换到root用户
在master主机执行 tar zxvf /opt/software/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /usr/local/src/
在master主机执行 mv /usr/local/src/sqoop-1.4.7.bin__hadoop-2.6.0/ /usr/local/src/sqoop
2) 修改profile文件
在master主机执行 vi /etc/profile 增加以下内容:
export SQOOP_HOME=/usr/local/src/sqoop
export PATH=$PATH:$SQOOP_HOME/bin:$PATH
3)修改sqoop-env.sh文件
在master主机执行命令cd /usr/local/src/sqoop/conf/
在master主机执行命令 cp sqoop-env-template.sh sqoop-env.sh
在master主机执行命令vi sqoop-env.sh 增加以下内容:
export HADOOP_COMMON_HOME=/usr/local/src/hadoop
export HADOOP_MAPRED_HOME=/usr/local/src/hadoop
在master主机执行su hadoop命令切换到hadoop用户
在master主机执行命令source /etc/profile
在master主机执行命令sqoop version
在master主机执行命令 cp /opt/software/mysql-connector-java-5.1.46.jar /usr/local/src/sqoop/lib/
在master主机执行命令 sqoop list-databases --connect jdbc:mysql://master:3306 --username root --password Password123$ 显示当前MySQL的所有数据库如下:
information_schema
hive_db
mysql
mysql_hdfs
performance_schema
sys
2 MySQL表中数据导入到HDFS
在master主机执行su hadoop命令切换到hadoop用户
在master主机执行mysql -u root -pPassword123$ 命令进入MySQL的终端
在MySQL的终端执行命令创建数据库mysql_hdfs
mysql> create database mysql_hdfs;
查看数据库是否存在
mysql> show databases;
切换当前数据库为mysql_hdfs
mysql> use mysql_hdfs;
在mysql_hdfs建数据库上创建表users
mysql> create table users(id varchar(11), name varchar(11), age int, sex varchar(11));
在users表中插入数据
mysql> insert into users value('0001', 'jbw', 23, 'man');
mysql> insert into users value('0010', 'jbw4', 23, 'man');
查看表users中数据是否存在
mysql> select * from users;
+------+------+------+------+
| id | name | age | sex |
+------+------+------+------+
| 0001 | jbw | 23 | man |
| 0010 | jbw4 | 23 | man |
+------+------+------+------+
退出MySQL终端
mysql> exit;
将MySQL中的users表的数据导入到HDFS的/sqoop/users目录中
在master主机执行 sqoop import --connect jdbc:mysql://master:3306/mysql_hdfs -username root -password Password123$ --table users --columns id,name,age,sex -m 1 --target-dir '/sqoop/users'
查看sqoop数据是否导入成功
在master主机执行 hadoop fs -ls /sqoop/users/
Found 2 items
-rw-r--r-- 2 hadoop supergroup 0 2021-11-24 10:28 /sqoop/users/_SUCCESS
-rw-r--r-- 2 hadoop supergroup 33 2021-11-24 10:28 /sqoop/users/part-m-00000
在master主机执行 hadoop fs -cat /sqoop/users/part-m-00000
0001,jbw,23,man
0010,jbw4,23,man
0010,jbw4,23,man
0001,jbw,23,man
3 MySQL表中数据导入到HDFS
在master主机执行su hadoop命令切换到hadoop用户
在master主机执行mysql -u root -pPassword123$ 命令进入MySQL的终端
切换当前数据库为mysql_hdfs
mysql> use mysql_hdfs;
在mysql_hdfs建数据库上创建表users2
mysql> create table users2(id varchar(11), name varchar(11), age int, sex varchar(11));
退出MySQL终端
mysql> exit;
将HDFS的/sqoop/users目录中的数据导出到MySQL中的users表中
在master主机执行 sqoop export --connect jdbc:mysql://master:3306/mysql_hdfs --username root --password Password123$ --table users2 --export-dir /sqoop/users/part-m-00000 --input-fields-terminated-by ','
重新进入MySQL终端查看数据库表users2中的数据
在master主机执行mysql -u root -pPassword123$ 命令进入MySQL的终端
mysql> use mysql_hdfs;
mysql> select * from users2;
+------+------+------+------+
| id | name | age | sex |
+------+------+------+------+
| 0001 | jbw | 23 | man |
| 0010 | jbw4 | 23 | man |
+------+------+------+------+



