一、xhell连接Centos7
1、下载xshell4和xftp4
2、安装xshell,xftp4
点击--->next--->free for home/school--->同意协议,next--->next---->next--->install--->finish
xftp安装和xshell安装类似
复制代码
3、xshell,xftp4使用
运行xshell--->点击新建(以后再连接就是选择哪个文件夹)--->主机:192.168.200.10,名称:basecontos7--->用户身份验证:用户名root,密码root--->确定--->创建出如下的会话连接(basecentos),点击连接
第一次连接虚拟机时xshell需要保存连接用户的用户名和密码,下次登录时就可以不要在输入,方便后期登录。
复制代码
登录成功
4、安装jdk
点击
这个图标,打开打开xftp工具,如下
把下载好的jdk1.8文件 拖动放在linux目录下
回到xshell窗口,输入 ll 可以看到刚才放入的jdk
执行: [root@localhost ~]# rpm -ivh jdk-8u211-linux-x64.rpm
开始安装jdk
5、安装jdk环境变量
执行: [root@localhost ~]# find / -name java #找到java的安装目录
最后两个,是java(jdk)的安装目录
执行: [root@localhost ~]# vi .bash_profile
如下图配置,JAVA_HOME路径对应上面java安装目录
wq!强制保存退出
#使用source命令使配置的环境变量生效
[root@localhost ~]# source .bash_profile
#使用java -version命令查看java环境变量配置是否成功
[root@localhost ~]# java -version
#显示java version "1.8.0_211" 表示java环境变量(JAVA_HOME)已经配置成功.
6、配置时间同步
#yum是个linux下的一个在线软件安装工具
执行: [root@localhost ~]# yum install -y ntpdate 等到显示Complete! 软件安装成功
#使用crontab -e命令添加定时时间同步配置
执行: [root@localhost ~]# crontab -e
7、安装网络工具net-tools
net-tools是linux系同下的一个网络故障排查工具,工作中我们经常使用它查看集群网络运行情况
执行: [root@localhost ~]# yum install -y net-tools
等到显示Complete! 软件安装成功
8、克隆虚拟机
在xhell输入 init 0 关闭centos7 ,断开xhell连接
在虚拟机管理软件VMware Workstation主界面
BaseCentos7--->右键--->管理--->克隆--->下一步--->虚拟机当前状态,下一步--->创建连接克隆,下一步--->输入名称node1,node2,node3,克隆三台--->完成
9、配置主机名,IP
分别启动三台虚拟机,node1,node2,node3
分别执行命令: hostnamectl set-hostname nodeX(虚拟机名,第一台node1,类推)
执行退出:logout ,在登陆,用户已经由localhost变成了node1,node2,node3
三节点ip规划如下
节点名称 ip
node1 192.168.200.11
node2 192.168.200.12
node3 192.168.200.13
修改ip配置;
执行: [root@node1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
分别修改三台ip,修改完成后执行: systemctl restart network 重启网卡
在xshell中创建三台虚拟机连接会话:分别主机改成:192.168.200.11 192.168.200.12 192.168.200.13
连接三台虚拟机--->接收并保存--->node1,node2,node3分别显示小绿点,标示连接成功
二、root用户的免密登录配置
1、生成公钥和私钥
执行: [root@node1 ~]# ssh-keygen -t rsa #<--回车
2、配置hosts文件
#hosts文件中配置三台机器ip和主机名的映射关系,其他两台机器按照相同的方式操作.三台机器都相同配置
执行: [root@node1 ~]# vi /etc/hosts
3、拷贝公钥文件
(1). 将node1的公钥拷贝到node2,node3上
(2). 将node2的公钥拷贝到node1,node3上
(3). 将node3的公钥拷贝到node1,node2上
执行: [root@node1 ~]# ssh-copy-id -i node2
其他同理,分别在node2 node3上执行
4、验证免密登录
执行: [root@node1 ~]# ssh node2
登录成功,验证成功,分别在三台机器上验证
5、添加本地认证公钥到认证文件中,分别执行
#进入到root用户的家目录下
[root@node1 ~]# cd ~
[root@node1 ~]# cd .ssh/
#讲生成的公钥添加到认证文件中
[root@node1 .ssh]# cat id_rsa.pub >> authorized_keys
复制代码
三、安装hadoop3
1、创建hadoop用户组和hadoop用户
#1.创建用户组hadoop
[root@node1 ~]# groupadd hadoop
#2.创建用户hadoop并添加到hadoop用户组中
[root@node1 ~]# useradd -g hadoop hadoop
#3.使用id命令查看hadoop用户组和hadoop用户创建是否成功
[root@node1 ~]# id hadoop
#用户uid 用户组id gid 用户组名
uid=1000(hadoop) gid=1000(hadoop) groups=1000(hadoop)
#设置hadoop用户密码为hadoop
[root@node1 ~]# passwd hadoop
Changing password for user hadoop.
New password: #输入hadoop后回车
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: #再次输入hadoop后回车
passwd: all authentication tokens updated successfully.
[root@node1 ~]# chown -R hadoop:hadoop /home/hadoop/
[root@node1 ~]# chmod -R 755 /home/hadoop/
#把root用户的环境变量文件复制并覆盖hadoop用户下的.bash_profile
[root@node1 ~]# cp .bash_profile /home/hadoop/
#免密登录
[hadoop@node1 ~] su - hadoop
[hadoop@node1 ~] source.bash_profile
#使用su - hadoop切换到hadoop用户下执行如下操作
[hadoop@node1 ~]# ssh-keygen -t rsa #<--回车
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #<--回车
#会在root用户的家目录下生成.ssh目录,此目录中会保存生成的公钥和私钥
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): #<--回车
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:gpDw08iG9Tq+sGZ48TXirWTY17ajXhIea3drjy+pU3g root@node1
The key's randomart image is:
+---[RSA 2048]----+
|. . |
| * = |
|. O o |
| . + . |
| o . + S. |
| ..+..o*. E |
|o o+++*.=o.. |
|.=.+oo.=oo+o |
|+.. .oo.o=o+o |
+----[SHA256]-----+
You have new mail in /var/spool/mail/root
[hadoop@node1 ~]#
#修改.ssh目录权限
[hadoop@node1 ~]$ chmod -R 755 .ssh/
[hadoop@node1 ~]$ cd .ssh/
[hadoop@node1 .ssh]$ chmod 644 *
[hadoop@node1 .ssh]$ chmod 600 id_rsa
[hadoop@node1 .ssh]$ chmod 600 id_rsa.pub
[hadoop@node1 .ssh]$
#免密登录
执行: su - hadoop 切换到hadoop下
1. 将node1的公钥拷贝到node2,node3上
2. 将node2的公钥拷贝到node1,node3上
3. 将node3的公钥拷贝到node1,node2上
#复制到node2上
[hadoop@node1 ~]# ssh-copy-id -i node2
#复制到node3上
[hadoop@node1 ~]# ssh-copy-id -i node3
#添加本地认证公钥到认证文件中
[hadoop@node1 ~]# cd .ssh/
#讲生成的公钥添加到认证文件中
[hadoop@node1 .ssh]# cat id_rsa.pub >> authorized_keys
复制代码
2、配置hadoop
在一台机器上配置好后复制到其他机器上即可,这样保证三台机器的hadoop配置是一致的.
从xshell打开xftp4,上传hadoop3安装包,进行解压
#1.创建hadoop安装目录
[root@node1 ~]# mkdir -p /opt/bigdata
#2.解压hadoop-3.1.2.tar.gz
[root@node1 ~]# tar -xzvf hadoop-3.1.2.tar.gz -C /opt/bigdata/
#配置环境变量
[hadoop@node1 ~]# su - hadoop
[hadoop@node1 ~]# vi .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
JAVA_HOME=/usr/java/jdk1.8.0_211-amd64
HADOOP_HOME=/opt/bigdata/hadoop-3.1.2
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export JAVA_HOME
export HADOOP_HOME
export PATH
~
:wq!
#验证环境变量
#1.使环境变量生效
[hadoop@node1 ~]# source .bash_profile
#2.显示hadoop的版本信息
[hadoop@node1 ~]# hadoop version
#3.显示出hadoop版本信息表示安装和环境变量成功.
Hadoop 3.1.2
Source code repository https://github.com/apache/hadoop.git -r 1019dde65bcf12e05ef48ac71e84550d589e5d9a
Compiled by sunilg on 2019-01-29T01:39Z
Compiled with protoc 2.5.0
From source with checksum 64b8bdd4ca6e77cce75a93eb09ab2a9
This command was run using /opt/bigdata/hadoop-3.1.2/share/hadoop/common/hadoop-common-3.1.2.jar
[hadoop@node1 ~]#
复制代码
3、配置hadoop-env.sh
这个文件只需要配置JAVA_HOME的值即可,在文件中找到export JAVA_HOME字眼的位置,删除最前面的#
export JAVA_HOME=/usr/java/jdk1.8.0_211-amd64
[root@node1 ~]# cd /opt/bigdata/hadoop-3.1.2/etc/hadoop/
You have new mail in /var/spool/mail/root
[root@node1 hadoop]# pwd
/opt/bigdata/hadoop-3.1.2/etc/hadoop
[root@node1 hadoop]# vi hadoop-env.sh
复制代码
4、配置core-site.xml
切换到cd /opt/bigdata/hadoop-3.1.2/etc/hadoop/目录下
[root@node1 ~]# cd /opt/bigdata/hadoop-3.1.2/etc/hadoop/
[root@node1 hadoop]# vi core-site.xml
<configuration>
<!-- 指定hdfs的namenode主机的hostname -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
<!-- io操作流的配置 -->
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<!--hadoop集群临时数据存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/bigdata/hadoop-3.1.2/tmpdata</value>
</property>
</configuration>
复制代码
wq!保存
5、配置hdfs-site.xml
[root@node1 hadoop]# vi hdfs-site.xml
<configuration>
<!--namenode元数据存储目录-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/bigdata/hadoop-3.1.2/hadoop/hdfs/name/</value>
</property>
<!--指定block块的的大小-->
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<!-- -->
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
<!--工作节点的数据块存储目录 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/bigdata/hadoop-3.1.2/hadoop/hdfs/data/</value>
</property>
<!--block的副本数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
复制代码
6、配置mapred-site.xml
[root@node1 hadoop]# vi mapred-site.xml
<!--指定运行mapreduce的环境是yarn -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*, $HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
复制代码
7、配置yarn-site.xml
[root@node1 hadoop]# vi yarn-site.xml
<configuration>
<!--指定resourcemanager的位置-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>node1:18040</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>node1:18030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>node1:18025</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>node1:18141</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>node1:18088</value>
</property>
</configuration>
复制代码
8、编辑works
此文件用于配置集群有多少个数据节点,我们把node2,node3作为数据节点,node1作为集群管理节点.
[root@node1 hadoop]# vi workers
#将localhost这一行删除掉
node2
node3
~
复制代码
四、远程复制hadoop到集群机器
#1.进入到root用户家目录下
[root@node1 hadoop]# cd ~
#2.使用scp远程拷贝命令将root用户的环境变量配置文件复制到node2
[root@node1 ~]# scp .bash_profile root@node2:~
.bash_profile 100% 338 566.5KB/s 00:00
#3.使用scp远程拷贝命令将root用户的环境变量配置文件复制到node3
[root@node1 ~]# scp .bash_profile root@node3:~
.bash_profile 100% 338 212.6KB/s 00:00
[root@node1 ~]#
#4.进入到hadoop的share目录下
[root@node1 ~]# cd /opt/bigdata/hadoop-3.1.2/share/
You have new mail in /var/spool/mail/root
[root@node1 share]# ll
total 0
drwxr-xr-x 3 1001 1002 20 Jan 29 12:05 doc
drwxr-xr-x 8 1001 1002 88 Jan 29 11:36 hadoop
#5.删除doc目录,这个目录存放的是用户手册,比较大,等会儿下面进行远程复制的时候时间比较长,删除后节约复制时间
[root@node1 share]# rm -rf doc/
[root@node1 share]# cd ~
You have new mail in /var/spool/mail/root
[root@node1 ~]# scp -r /opt root@node2:/
[root@node1 ~]# scp -r /opt root@node3:/
#使集群所有机器环境变量生效(23都需要)
[hadoop@node2 hadoop-3.1.2]# cd ~
[hadoop@node2 ~]# source .bash_profile
[hadoop@node2 ~]# hadoop version
Hadoop 3.1.2
Source code repository https://github.com/apache/hadoop.git -r 1019dde65bcf12e05ef48ac71e84550d589e5d9a
Compiled by sunilg on 2019-01-29T01:39Z
Compiled with protoc 2.5.0
From source with checksum 64b8bdd4ca6e77cce75a93eb09ab2a9
This command was run using /opt/bigdata/hadoop-3.1.2/share/hadoop/common/hadoop-common-3.1.2.jar
[hadoop@node2 ~]#
复制代码
五、修改hadoop安装目录的权限
node2,node3也需要进行如下操作
#1.修改目录所属用户和组为hadoop:hadoop
[root@node1 ~]# chown -R hadoop:hadoop /opt/
You have new mail in /var/spool/mail/root
You have new mail in /var/spool/mail/root
#2.修改目录所属用户和组的权限值为755
[root@node1 ~]# chmod -R 755 /opt/
[root@node1 ~]# chmod -R g+w /opt/
[root@node1 ~]# chmod -R o+w /opt/
[root@node1 ~]#
复制代码
6、格式化hadoop
#切换
[root@node1 ~]# su - hadoop
[hadoop@node1 hadoop]$ hdfs namenode -format
复制代码
7、启动集群
[hadoop@node1 ~]$ start-all.sh
WARNING: Attempting to start all Apache Hadoop daemons as hadoop in 10 seconds.
WARNING: This is not a recommended production deployment configuration.
WARNING: Use CTRL-C to abort.
Starting namenodes on [node1]
Starting datanodes
Starting secondary namenodes [node1]
Starting resourcemanager
Starting nodemanagers
#使用jps显示java进程
[hadoop@node1 ~]$ jps
40852 ResourceManager
40294 NameNode
40615 SecondaryNameNode
41164 Jps
[hadoop@node1 ~]$
在浏览器地址栏中输入:http://192.168.200.11:9870查看namenode的web界面.(3.0版本端口号是9870 ,2.0版本是50070),能打开如下页面,说明启动成功
复制代码
8、运行mapreduce程序
#1.使用hdfs dfs -ls / 命令浏览hdfs文件系统,集群刚开始搭建好,由于没有任何目录所以什么都不显示.
[hadoop@node1 ~]$ hdfs dfs -ls /
#2.创建测试目录
[hadoop@node1 ~]$ hdfs dfs -mkdir /test
#3.在此使用hdfs dfs -ls 发现我们刚才创建的test目录
[hadoop@node1 ~]$ hdfs dfs -ls /
Found 1 items
drwxr-xr-x - hadoop supergroup 0 2019-06-30 17:23 /test
#4.使用touch命令在linux本地目录创建一个words文件
[hadoop@node1 ~]$ touch words
#5.文件中输入如下内容
[hadoop@node1 ~]$ vi words
i love you
are you ok
#6.将创建的本地words文件上传到hdfs的test目录下
[hadoop@node1 ~]$ hdfs dfs -put words /test
#7.查看上传的文件是否成功
[hadoop@node1 ~]$ hdfs dfs -ls -r /test
Found 1 items
-rw-r--r-- 3 hadoop supergroup 23 2019-06-30 17:28 /test/words
#/test/words 是hdfs上的文件存储路径 /test/output是mapreduce程序的输出路径,这个输出路径是不能已经存在的路径,mapreduce程序运行的过程中会自动创建输出路径,数据路径存在的话会报错,这里需要同学注意下.
[hadoop@node1 ~]$ hadoop jar /opt/bigdata/hadoop-3.1.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar wordcount /test/words /test/output
[hadoop@node1 ~]$ hdfs dfs -ls -r /test/output
Found 2 items
-rw-r--r-- 3 hadoop supergroup 28 2019-06-30 17:32 /test/output/part-r-00000
-rw-r--r-- 3 hadoop supergroup 0 2019-06-30 17:32 /test/output/_SUCCESS
[hadoop@node1 ~]$ hdfs dfs -text /test/output/part-r-00000
are 1
i 1
love 1
ok 1
you 2
复制代码
自此,hadoop3三节点集群搭建启动完成,下一个学习搭建hadoop2.0三节点集群