这个是笔者大学时期的大数据课程使用三台CentOS7.6虚拟机搭建完全分布式集群的案例,已成功搭建完全分布式集群,并测试跑实例。

6.安装JDK

以下操作现在master上操作,然后远程复制到slave01、slave02即可。

6.1 将压缩包发送到master节点机器上,并解压

利用WinSCP,将JDK压缩包从windows系统传至master主节点机器上,并将其放于/opt/software目录

注意:将JDK压缩包从windows系统传至master主节点机器上,可以使用WinSCP或者Xftp实现发送。

sudo mkdir -p /usr/java
cd /usr/java
sudo tar -zxvf /opt/software/jdk-8u162-linux-x64.tar.gz -C /usr/java/
#将jdk解压到/usr/java/下

6.2 master配置/etc/profile文件

sudo vim /etc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_162
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH

修改环境变量配置文件后,需要是配置文件生效
source /etc/profile

查看jdk版本
java -version

6.3 master配置/etc/profile文件

将JDK复制到slave1和slave2中,

sudo scp -r /usr/java root@slave01:/usr/

sudo scp -r /usr/java root@slave02:/usr/

在slave1和slave2上分别配置java的环境变量(即/etc/profile),并使环境变量生效,并java -version验证。

sudo vim /etc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_162
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH

source /etc/profile
java -version
在slave1从节点机器上

在slave2从节点机器上

注意:编写jdk的环境变量时,版本号一定要一致。

7.安装zookeeper

以下操作现在master上操作,然后远程复制到slave01、slave02即可。

7.1创建工作目录

mkdir -p /usr/zookeeper
cd /usr/zookeeper

利用WinSCP,将zookeeper压缩包从windows系统传至master主节点机器上,并将其放于/opt/software目录

sudo cp /home/hadoop/tmp/zookeeper-3.4.10.tar.gz /opt/software/

解压zookeeper到/usr/zookeeper文件夹下
sudo tar -zxvf /opt/software/zookeeper-3.4.10.tar.gz -C /usr/zookeeper

在zookeeper的目录下,创建配置中所需的zkdata和zkdatalog两个文件夹。

cd /usr/zookeeper/zookeeper-3.4.10
sudo mkdir zkdata
sudo mkdir zkdatalog

7.2配置zoo.cfg文件

由于没有zoo.cfg文件,所以进入zookeeper配置文件夹conf,将zoo_sample.cfg文件拷贝一份命名为zoo.cfg,Zookeeper 在启动时会找这个文件作为默认配置文件。

cd /usr/zookeeper/zookeeper-3.4.10/conf/
mv zoo_sample.cfg zoo.cfg

对zoo.cfg文件进行配置:vim zoo.cfg

修改如下:(红色为增加内容)
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/zookeeper/zookeeper-3.4.10/zkdata
clientPort=2181
dataLogDir=/usr/zookeeper/zookeeper-3.4.10/zkdatalog
server.1=LBJ:2888:3888
server.2=slave01:2888:3888
`server.3=slave02:2888:3888“

7.3进入zkdata文件夹,创建文件myid,用于表示是几号服务器

在master主机中,设置服务器id为1。(集群中设置LBJ为1号服务器,slave01为2号服务器,slave02为3号服务器)

cd /usr/zookeeper/zookeeper-3.4.10/zkdata
sudo vim myid

7.4远程复制分发安装文件

配置好的zookeeper,拷贝到集群中的各个结点对应的目录下:
sudo scp -r /usr/zookeeper root@slave01:/usr/
sudo scp -r /usr/zookeeper root@slave02:/usr/

7.5 slave01、slave02设置myid

分别在我们配置的dataDir指定的目录即:zkdata下面,没有myid,自己创建一个myid文件,里面内容为一个数字,用来标识当前主机,这个数字要与zoo.cfg文件中配置的server.x中的x 一一对应。

cd /usr/zookeeper/zookeeper-3.4.10/zkdata
sudo vim myid
在slave01上

在slave02上

7.6 三台机器配置zookeeper环境变量

三台机器同步操作
修改/etc/profile文件,配置zookeeper环境变量。

sudo vim /etc/profile
#zookeeper
export ZOOKEEPER_HOME=/usr/zookeeper/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER_HOME/bin

在master主节点上

使环境变量生效: source /etc/profile

在slave01上

在slave02上

7.7 开启zookeeper集群

三台机器都切换到zookeeper/zookeeper-3.4.10目录下,执行启动zookeeper集群的脚本

cd /usr/zookeeper/zookeeper-3.4.10
bin/zkServer.sh start #开启zookeeper集群操作

在master上

hadoop用户权限不够,需要切换到root用户下

在slave01上

在slave02上

7.8 查看开启zookeeper后三台机器zookeeper集群状态

bin /zkServer.sh status #查看状态

在master上

在slave01上

在slave02上

小结:三个节点的zookeeper状态是随机选定的,一个是leader,两个是follower,到这,zookeeper安装成功。

7.9 安装zookeeper遇到问题

开启zookeeper集群过程中,我遇到了上述问题,我猜想肯定是我的配置文件出错了,所以我回去仔细检查,果然发现了问题,原来我的目录写错了,多了一个zookeeper。

小结:这提醒我们一定要注意配置文件的正确性,少一个字母,多一个字母都不行。

8 安装hadoop集群

温馨提示:在老师和同学们反复建议下,我们最好使用hadoop-2.7.3版本,否则使用的版本过高,后续的操作会不一样,我这里使用的是hadoop-2.7.3版本,后面还要解决hadoop与hive版本的jar包冲突问题。安装hadoop先在master上配置,然后远程复制到slave01或slave02 即可。

8.1 解压hadoop安装包并配置环境变量

使用WinSCP将hadoop-2.7.3的压缩包从windows系统传至master主节点机器上,并放置在/opt/software目录中,同时创建 /usr/hadoop目录,后续将hadoop-2.7.3的压缩包解压到/usr/hadoop 即可。

将hadoop-2.7.3.tar.gz 复制到/opt/software/下
cp /tmp/hadoop-2.7.3.tar.gz /opt/software/

解压到/usr/hadoop
tar -zxvf /opt/software/hadoop-2.7.3.tar.gz -C /usr/hadoop/

配置环境变量

vim /etc/profile #大多数的环境变量都在这里配置,标明注释,以免混乱

/etc/profile 的后面加上:
#hadoop
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.3
export CLASSPATH=$CLASSPATH:$HADOOP_HOME/lib
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

配置文件生效: source /etc/profile

8.2 修改hadoop的各配置文件

配置hadoop的配置文件需要在$HADOOP_HOME/etc/hadoop
cd $HADOOP_HOME/etc/hadoop
8.2.1 修改hadoop的hadoop-env.sh、yarn-env.sh环境配置文件
1.修改hadoop的hadoop-env.sh
vim hadoop-env.sh
修改JAVA_HOME内容:

export JAVA_HOME=/usr/java/jdk1.8.0_162

2.修改hadoop的yarn-env.sh
vim yarn-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_162

8.2.2 配置hadoop的配置文件(均为核心文件)
hadoop的各个组件的都是使用XML进行配置,这些文件存放在hadoop的etc/hadoop目录下。

Common组件 core-site.xml
HDFS组件 hdfs-site.xml
MapReduce组件 mapred-site.xml
yarn组件 yarn-site.xml

1.编辑 core-site.xml

vim core-site.xml
(节点地址文件名与临时文件地址)

<property><name>fs.default.name</name> <value>hdfs://LBJ:9000</value></property><property><name>hadoop.tmp.dir</name> <value>/usr/hadoop/hadoop-2.7.3/hdfs/tmp</value><description>A base for other temporary directories.</description></property><property><name>io.file.buffer.size</name> <value>131072</value></property><property><name>fs.checkpoint.period</name> <value>60</value></property><property><name>fs.checkpoint.size</name> <value>67108864</value></property>

2.编辑 mapred-site.xml

hadoop配置文件中是没有这个文件的,所以需要将mapred-site.xml.template样本文件复制为mapred-site.xml,对其进行编辑:

vim mapred-site.xml

<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>

3.编辑 vim yarn-site.xml

vim yarn-site.xml

<property> <name>yarn.resourcemanager.address</name> <value>LBJ:18040</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>LBJ:18030</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>LBJ:18088</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>LBJ:18025</value> </property> <property><name>yarn.resourcemanager.admin.address</name><value>LBJ:18141</value> </property> <property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value> </property> <property><name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name><value>org.apache.hadoop.mapred.ShuffleHandler</value> </property>

4.编辑 hdfs-site.xml

vim hdfs-site.xml

<property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/hadoop/hadoop-2.7.3/hdfs/name</value> <final>true</final></property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/hadoop/hadoop-2.7.3/hdfs/data</value> <final>true</final> </property> <property><name>dfs.namenode.secondary.http-address</name> <value>LBJ:9001</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property>

注:dfs.replication:因为hadoop是具有可靠性的,它会备份多个文本,这里value就是指备份的数量(小于等于从节点的数量)。

8.2.3 编辑slaves、master文件
v i slaves

v i master #如果没有这个该文件创建即可,编辑添加主节点LBJ

注:这里的命令是vi而不是vim,不然会导致子节点启动不起来。

8.2.4 远程分发hadoop给slave01、slave02
sudo scp -r /usr/hadoop root@slave01:/usr/

sudo scp -r /usr/hadoop root@slave02:/usr/

8.2.5 配置slave01、slave02的hadoop环境变量
1.在slave01上

vim /etc/profile

在/etc/profile的末尾添加:

#hadoop
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.3
export CLASSPATH=$CLASSPATH:$HADOOP_HOME/lib
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

生效: source /etc/profile

2.在slave02上

vim /etc/profile

/etc/profile的末尾添加:

#hadoop
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.3
export CLASSPATH=$CLASSPATH:$HADOOP_HOME/lib
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

8.3 在主节点上格式化hadoop和开启hadoop,并查看结点状态

注:以下操作,仅在master主节点上进行。

8.3.1格式化hadoop

hadoop namenode -format

hadoop格式化成功!!!

8.3.2 开启hadoop
在 /usr/hadoop/hadoop-2.7.3下

cd /usr/hadoop/hadoop-2.7.3

开启hadoop

sbin/start-all.sh

8.3.3 在各主从机上查看hadoop结点的状态

jps


8.3.4 关闭hadoop集群

sbin/stop-all.sh

8.4 运行完全分布式例程(参考厦门大学大数据库实验室博客)

1)切换到hadoop-2.7.3目录:cd /usr/hadoop/hadoop-2.7.3/
2)先开启集群: ./sbin/start-all.sh
3)并开启historyserver:sbin/mr-jobhistory-daemon.sh start historyserver

4)在master上
bin/hdfs dfs -mkdir -p /user/hadoop
bin/hdfs dfs -mkdir -p input
bin/hdfs dfs -put /usr/hadoop/hadoop-2.7.3/etc/hadoop/*.xml input
bin/hdfs dfs -ls ./input #查看传输的文件

5)运行例程:
hadoop jar /usr/hadoop/hadoop-2.7.3/share/hadoop/ mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'

注:结果需要等待几分钟
结果:

6)查看运行结果:
bin/hdfs dfs -cat output/*

三台CentOS7.6虚拟机搭建Hadoop完全分布式集群(二)笔记到此完结,笔者归纳、创作不易,大佬们给个3连再起飞吧