2、学大数据笔记-Xshelll工具连接,JDK,Hadoop3安装,环境配置

324 阅读9分钟

一、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三节点集群