一、xhell连接Centos7
1、下载xshell4和xftp4
2、安装xshell,xftp4
点击--->next--->free for home/school--->同意协议,next--->next---->next--->install--->finishxftp安装和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 hadoopChanging password for user hadoop.New password: #输入hadoop后回车BAD PASSWORD: The password is shorter than 8 charactersRetype 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@node1The 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 functionsif [ -f ~/.bashrc ]; then. ~/.bashrcfi# User specific environment and startup programsJAVA_HOME=/usr/java/jdk1.8.0_211-amd64HADOOP_HOME=/opt/bigdata/hadoop-3.1.2PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbinexport JAVA_HOMEexport HADOOP_HOMEexport PATH~ :wq!#验证环境变量#1.使环境变量生效[hadoop@node1 ~]# source .bash_profile #2.显示hadoop的版本信息[hadoop@node1 ~]# hadoop version#3.显示出hadoop版本信息表示安装和环境变量成功.Hadoop 3.1.2Source code repository /apache/hadoop.git -r 1019dde65bcf12e05ef48ac71e84550d589e5d9aCompiled by sunilg on -01-29T01:39ZCompiled with protoc 2.5.0From source with checksum 64b8bdd4ca6e77cce75a93eb09ab2a9This 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这一行删除掉node2node3~ 复制代码
四、远程复制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]# lltotal 0drwxr-xr-x 3 1001 1002 20 Jan 29 12:05 docdrwxr-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 versionHadoop 3.1.2Source code repository /apache/hadoop.git -r 1019dde65bcf12e05ef48ac71e84550d589e5d9aCompiled by sunilg on -01-29T01:39ZCompiled with protoc 2.5.0From source with checksum 64b8bdd4ca6e77cce75a93eb09ab2a9This 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/rootYou 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 datanodesStarting secondary namenodes [node1]Starting resourcemanagerStarting nodemanagers#使用jps显示java进程[hadoop@node1 ~]$ jps40852 ResourceManager 40294 NameNode40615 SecondaryNameNode41164 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 itemsdrwxr-xr-x - hadoop supergroup0 -06-30 17:23 /test#4.使用touch命令在linux本地目录创建一个words文件[hadoop@node1 ~]$ touch words#5.文件中输入如下内容[hadoop@node1 ~]$ vi wordsi love youare you ok#6.将创建的本地words文件上传到hdfs的test目录下[hadoop@node1 ~]$ hdfs dfs -put words /test#7.查看上传的文件是否成功[hadoop@node1 ~]$ hdfs dfs -ls -r /testFound 1 items-rw-r--r-- 3 hadoop supergroup 23 -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/outputFound 2 items-rw-r--r-- 3 hadoop supergroup 28 -06-30 17:32 /test/output/part-r-00000-rw-r--r-- 3 hadoop supergroup0 -06-30 17:32 /test/output/_SUCCESS[hadoop@node1 ~]$ hdfs dfs -text /test/output/part-r-00000are1i1love1ok1you2复制代码
自此,hadoop3三节点集群搭建启动完成,下一个学习搭建hadoop2.0三节点集群