一 虚拟机安装
全部文件在C:\Users\Administrator\LinuxSystemInstall下
1. 先使用VMware来模拟一个硬件环境(cpu,内存,网卡,硬盘,显示器)
- 典型安装
- 稍后安装操作系统
- 选择Linux CentOS 7 64位
- 命令:CentOS_7.7_64_nz202 规范:版本_型号_bit位_hostname
- 选择磁盘大小:50G和拆分多个文件
- 选择自定义硬件:
-内存:2G
-CPU:2核
-CD/DVD: 引用CentOS映像文件, 注意:路径下不能有中文,否则引用失效
-网络适配器:NAT模式
-移除:声卡,打印机。没有必要模拟这些硬件
- 关闭,完成到此为止:一个硬件环境模拟成功。
2. 开始安装CentOS操作系统
- 开启此虚拟机 (如果提示虚拟技术被禁用等单词,需要去bios界面设置为可用)
- 双击进入界面,选择install CentOS 7
- 选择语言:中文简体
- 系统的安装位置:选择"我要配置分区",然后完成
然后自定义分区:
/boot---->300MB
/swap---->2048MB 1024MB也可以
/-------->剩下的全部给根目录
- 点击完成,接收更改
- 网络与主机名:进入后选择配置-->常规-->勾选上自动连接-->保存
主机名:nz202 应用---->完成
- 选择开始安装
- 配置root超级管理员的密码
设置新密码:123456
确定新密码:123456
- 创建普通用户(可选)
- 一直等到出现"重新引导或者reboot",
- 出现登录窗口:
提示效果:
nz202 login: <------输入用户名,比如root 然后回车
Password: <------输入用户的密码,123456.然后回车, 注意密码是隐藏的,没有*****
[root@nz202 ~]# <------出现此提示符,表明登录成功
二 hadoop(全分布式)
1 要求及环境需求
要求
hll01: namenode,datanode,ResourceManager,nodemanager
hll02: datanode,nodemanager,secondarynamenode
hll03: datanode,nodemanager
一个datanode对应一个nodemanager
环境需求
-1. 三台机器的防火墙必须是关闭的.network最好也是关闭的
-2. 确保三台机器的网络配置畅通(NAT模式,静态IP,主机名的配置)
-3. 确保/etc/hosts文件配置了ip和hostname的映射关系
-4. 确保配置了三台机器的免密登陆认证(克隆会更加方便)ssh localhost
-5. 确保所有机器时间同步
-6. jdk和hadoop的环境变量配置
-7. 时间一致
2 环境需求搭建
-1、关闭防火墙及network
[root@hll01 ~]# systemctl stop firewalld
[root@hll01 ~]# systemctl disable firewalld
[root@hll01 ~]# systemctl stop NetworkManager
[root@hll01 ~]# systemctl disable NetworkManager
#最好也把selinux关闭掉,这是linux系统的一个安全机制,进入文件中将SELINUX设置为disabled
[root@hll01 ~]# vi /etc/selinux/config
.........
SELINUX=disabled
情况说明: 如果安装好三台机器,三台机器的防火墙都需要单独关闭和设置开机不启动。如果准备使用克隆方式,只关闭hll01机器即可。下面的配置也是如此。
-2、静态IP和主机名配置
--1. 配置静态IP(确保NAT模式)
[root@hll01 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
............
BOOTPROTO=static #将dhcp改为static
............
ONBOOT=yes #将no改为yes
IPADDR=192.168.10.101 #添加IPADDR属性和ip地址
PREFIX=24 #添加NETMASK=255.255.255.0或者PREFIX=24
GATEWAY=192.168.10.2 #添加网关GATEWAY
DNS1=114.114.114.114 #添加DNS1和备份DNS
DNS2=8.8.8.8
--2. 重启网络服务
[root@hll01 ~]# systemctl restart network
--3. 修改主机名(如果修改过,请略过这一步)
[root@localhost ~]# hostnamectl set-hostname hll01
注意:配置完ip和主机名后,最好reboot一下
-3、 配置/etc/hosts文件
[root@hll01 ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.101 hll01 #添加本机的静态IP和本机的主机名之间的映射关系
192.168.10.102 hll02
192.168.10.103 hll03
-4、免密登陆认证
-1. 使用rsa加密技术,生成公钥和私钥。一路回车即可
[root@hll01 ~]# cd ~
[root@hll01 ~]# ssh-keygen -t rsa
-2. 进入~/.ssh目录下,使用ssh-copy-id命令
[root@hll01 ~]# cd ~/.ssh
[root@hll01 .ssh]# ssh-copy-id root@hll01
-3. 进行验证
[hadoop@hll01 .ssh]# ssh hll01
#下面的第一次执行时输入yes后,不提示输入密码就对了
[hadoop@hll01 .ssh]# ssh localhost
[hadoop@hll01 .ssh]# ssh 0.0.0.0
注意:三台机器提前安装好的情况下,需要同步公钥文件。如果使用克隆技术。那么使用同一套密钥对就方便多了。
-5、时间同步
1. 选择hll01这台机器充当时间服务器,必须安装ntp.x86_64
[root@hll01 html]# yum list installed | grep ntp <--查看是否安装了,
[root@hll01 html]# yum -y install ntp.x86_64 <--如果没有安装,则安装???
2. 保证ntpd服务是运行的(设置开机自启动)
[root@hll01 ~]# systemctl status ntpd
[root@hll01 ~]# systemctl start ntpd <---开启ntpd服务
[root@hll01 ~]# systemctl enable ntpd <---设置ntpd开机自启动
3.命令行时间同步
ntpdate -u ntp1.aliyun.com <---同步阿里云的时间服务器
-6. jdk和hadoop的环境变量配置
-1. 上传和解压两个软件包
[root@hll01 ~]# tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local/
[root@hll01 ~]# tar -zxvf hadoop-2.7.6.tar.gz -C /usr/local/
-2. 进入local里,给两个软件更名
[root@hll01 ~]# cd /usr/local/
[root@hll01 local]# mv 1.8.0_221/ jdk
[root@hll01 local]# mv hadoop-2.7.6/ hadoop
[hadoop@hll01 local]# vi /etc/profile
.....省略...........
#java environment
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
#hadoop environment
export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
[root@hll01 local]# source /etc/profile
错误注意:
如果profile中的内容修改错误之后source 所有的命令都将不能用
解决方法:运行/bin/vi /etc/profile
修改之后重启reboot
3 Hadoop的配置文件
3.1 配置core-site.xml文件
[root@hll01 ~]# cd $HADOOP_HOME/etc/hadoop/
[root@hll01 hadoop]# vi core-site.xml
<configuration>
<!-- hdfs的地址名称:schame,ip,port-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hll01:8020</value>
</property>
<!-- hdfs的基础路径,被其他属性所依赖的一个基础路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>
参考:core-default.xml
3.2 再配置hdfs-site.xml文件
[root@hll01 hadoop]# vi hdfs-site.xml
<configuration>
<!-- namenode守护进程管理的元数据文件fsimage存储的位置-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name</value>
</property>
<!-- 确定DFS数据节点应该将其块存储在本地文件系统的何处-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data</value>
</property>
<!-- 块的副本数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 块的大小(128M),下面的单位是字节-->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<!-- secondarynamenode守护进程的http地址:主机名和端口号。参考守护进程布局-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hll02:50090</value>
</property>
<!-- namenode守护进程的http地址:主机名和端口号。参考守护进程布局-->
<property>
<name>dfs.namenode.http-address</name>
<value>hll01:50070</value>
</property>
</configuration>
参考:hdfs-default.xml
3.3 然后配置mapred-site.xml文件
如果只是搭建hdfs,只需要配置core-site.xml和hdfs-site.xml文件就可以了,但是我们过两天要学习的MapReduce是需要YARN资源管理器的,因此,在这里,我们提前配置一下相关文件。
[root@hll01 hadoop]# cp mapred-site.xml.template mapred-site.xml
[root@hll01 hadoop]# vi mapred-site.xml
<configuration>
<!-- 指定mapreduce使用yarn资源管理器-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 配置作业历史服务器的地址-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hll01:10020</value>
</property>
<!-- 配置作业历史服务器的http地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hll01:19888</value>
</property>
</configuration>
参考:mapred-default.xml
3.4 配置yarn-site.xml文件
[root@hll01 hadoop]# vi yarn-site.xml
<configuration>
<!-- 指定yarn的shuffle技术-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定resourcemanager的主机名-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hll01</value>
</property>
<!--下面的可选-->
<!--指定shuffle对应的类 -->
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!--配置resourcemanager的内部通讯地址-->
<property>
<name>yarn.resourcemanager.address</name>
<value>hll01:8032</value>
</property>
<!--配置resourcemanager的scheduler的内部通讯地址-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hll01:8030</value>
</property>
<!--配置resoucemanager的资源调度的内部通讯地址-->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hll01:8031</value>
</property>
<!--配置resourcemanager的管理员的内部通讯地址-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hll01:8033</value>
</property>
<!--配置resourcemanager的web ui 的监控页面-->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hll01:8088</value>
</property>
</configuration>
参考:yarn-default.xml
3.5 配置hadoop-env.sh脚本文件
[root@hll01 hadoop]# vi hadoop-env.sh
.........
# The java implementation to use.
export JAVA_HOME=/usr/local/jdk
.........
3.6 配置slaves文件
此文件用于指定datanode守护进程所在的机器节点主机名
[root@hll01 hadoop]# vi slaves
hll01
hll02
hll03
3.7 配置yarn-env.sh文件,
此文件可以不配置,不过,最好还是修改一下yarn的jdk环境比较好
[root@hll01 hadoop]# vi yarn-env.sh
.........
# some Java parameters
export JAVA_HOME=/usr/local/jdk
if [ "$JAVA_HOME" != "" ]; then
#echo "run java in $JAVA_HOME"
JAVA_HOME=$JAVA_HOME
fi
.........
3.8 另外两台机器配置说明
当把hll01机器上的hadoop的相关文件配置完毕后,我们有以下两种方式来选择配置另外几台机器的hadoop.
方法1:“scp”进行同步
提示:本方法适用于多台虚拟机已经提前搭建出来的场景。
--1. 同步hadoop到slave节点上
[root@hll01 ~]# cd /usr/local
[root@hll01 local]# scp -r ./hadoop hll02:/usr/local/
[root@hll01 local]# scp -r ./hadoop hll03:/usr/local/
--2. 同步/etc/profile到slave节点上
[root@hll01 local]# scp /etc/profile hll02:/etc/
[root@hll01 local]# scp /etc/profile hll03:/etc/
--3. 如果slave节点上的jdk也没有安装,别忘记同步jdk。
--4. 检查是否同步了/etc/hosts文件
**方法2:**克隆hll01虚拟机
提示:本方法适用于还没有安装slave虚拟机的场景。通过克隆hll01节点的方式,来克隆一个hll02和hll03机器节点,这种方式就不用重复安装环境和配置文件了,效率非常高,节省了大部分时间(免密认证的秘钥对都是相同的一套)。
优点:克隆到的机器是同一对密钥对
--1. 打开一个新克隆出来的虚拟机,修改主机名
[root@hll01 ~]# hostnamectl set-hostname hll02
--2. 修改ip地址
[root@hll01 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
.........省略.........
IPADDR=192.168.10.102 <==修改为hll02对应的ip地址
.........省略........
--3. 重启网络服务
[root@hll01 ~]# systemctl restart network
--4. 其他新克隆的虚拟机重复以上1~3步
--5. 免密登陆的验证
从hll01机器上,连接其他的每一个节点,验证免密是否好使,同时去掉第一次的询问步骤
--6. 建议:每台机器在重启网络服务后,最好reboot一下。
4 格式化NameNode
[root@hll01 ~]# hdfs namenode -format
5 启动集群
1. 启动脚本
-- start-dfs.sh :用于启动hdfs集群的脚本
-- start-yarn.sh :用于启动yarn守护进程
-- start-all.sh :用于启动hdfs和yarn
2. 关闭脚本
-- stop-dfs.sh :用于关闭hdfs集群的脚本
-- stop-yarn.sh :用于关闭yarn守护进程
-- stop-all.sh :用于关闭hdfs和yarn
3. 单个守护进程脚本
-- hadoop-daemons.sh :用于单独启动或关闭hdfs的某一个守护进程的脚本
-- hadoop-daemon.sh :用于单独启动或关闭hdfs的某一个守护进程的脚本
reg:
hadoop-daemon.sh [start|stop] [namenode|datanode|secondarynamenode]
-- yarn-daemons.sh :用于单独启动或关闭hdfs的某一个守护进程的脚本
-- yarn-daemon.sh :用于单独启动或关闭hdfs的某一个守护进程的脚本
reg:
yarn-daemon.sh [start|stop] [resourcemanager|nodemanager]
6 jps查看
--1. 在qhll01上运行jps指令,会多出有如下进程
resoucemanager
nodemanager
--2. 在hll02上运行jps指令,会多出有如下进程
nodemanager
--3. 在hll03上运行jps指令,会多出有如下进程
nodemanager
7 webui查看
1. http://192.168.10.201:50070
2. http://192.168.10.101:8088
三 hive(本地模式)
1 配置安装mysql
在另一台机器上安装mysql
安装包准备
#查看mysql是否安装,如果安装了,卸载mysql
[root@hll01 hive] rpm -qa|grep mysql #如果出现下面的提示,就说明系统已经有了mysql,要卸载
mysql-libs-5.1.73-7.el6.x86_64
# 卸载mysql
[root@hll01 hive] rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64
安装mysql
-----》mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
1、准备mysql的软件包,上传到相应的目录下,比如root的家里
2、将mysql-5.7.28-1.el7.x86_64.rpmc-bundle.tar 打包文件,进行拆包
[root@hll01 ~]# tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
mysql-community-embedded-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-devel-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-5.7.28-1.el7.x86_64.rpm
mysql-community-test-5.7.28-1.el7.x86_64.rpm
mysql-community-common-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.28-1.el7.x86_64.rpm
mysql-community-client-5.7.28-1.el7.x86_64.rpm
mysql-community-server-5.7.28-1.el7.x86_64.rpm
3、安装mysql所依赖的环境perl,移除mysql的冲突软件mariadb
[root@hll01 ~]# yum -y install perl
[root@hll01 ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.64-1.el7.x86_64
[root@hll01 ~]# rpm -e mariadb-libs-5.5.64-1.el7.x86_64 --nodeps
4、按照mysql的依赖顺序来安装mysql的rpm包
[root@hll01 ~]# rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
[root@hll01 ~]# rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
[root@hll01 ~]# rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
[root@hll01 ~]# rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
--nodeps --force忽略依赖
---------------------------到此为止,mysql安装成功------------------------
5、查看mysql的服务项是否启动,发现是未启动的
[root@hll01 ~]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
6、启动服务项,然后再次确认一下
[root@hll01 ~]# systemctl start mysqld
[root@hll01 ~]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since 五 2020-05-29 11:25:57 CST; 9s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 2406 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
Process: 2355 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 2409 (mysqld)
CGroup: /system.slice/mysqld.service
└─2409 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
5月 29 11:25:52 hll01 systemd[1]: Starting MySQL Server...
5月 29 11:25:57 hll01 systemd[1]: Started MySQL Server.
7、查询mysql的初始密码(密码保存在/var/log/mysqld.log文件中,此文件是服务项启动后生成的)
[root@hll01 ~]# cat /var/log/mysqld.log | grep password
8、使用初始密码进行登录
[root@hll01 ~]# mysql -uroot -p
9、登录成功后,要降低密码策略机制,改为low,也可以将密码长度6.
set global validate_password_policy=low;
set global validate_password_length=6;
查看密码策略
show variables like '%validate_password%';
10、修改密码
alter user root@localhost identified by '单引号里新密码'
11、如果想要远程连接mysql,需要进行远程授权操作(注意,一定要关闭防火墙)
grant all privileges on *.* to root@"%" identified by '111111' with grant option;
2 配置hive的环境
1)解压hive并配置环境变量
[root@hll01 local]# tar -zxvf apache-hive-2.1.1-bin.tar.gz -C /usr/local
#修改hive安装路径名,方便以后使用
[root@hll01 local]# mv apache-hive-2.1.1-bin/ hive
[root@hll01 local]# vi /etc/profile
# 添加如下内容:
export HIVE_HOME=/usr/local/hive
export PATH=$HIVE_HOME/bin:$PATH
#让profile生效
[root@hll01 local]# source /etc/profile
2) 配置hive-env.sh
如果不存在,就用hive.env.sh.template复制一个
export HIVE_CONF_DIR=/usr/local/hive/conf
export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/local/hadoop
export HIVE_AUX_JARS_PATH=/usr/local/hive/lib
3) 配置hive-site.xml
hive2.1.1中默认是没有hive-site.xml
,可以把conf/hive-default.xml.template
拷贝过来使用
[root@hll01 conf]# cp hive-default.xml.template hive-site.xml
[root@hll01 conf]# vi hive-site.xml
把hive-site.xml 中所有包含 ${system:Java.io.tmpdir}替换成/usr/local/hive/iotmp.
如果系统默认没有指定系统用户名,那么要把配置${system:user.name}替换成当前用户名root
- 找到下面四个属性进行修改对应的值。
<!--配置mysql的连接字符串-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hll03:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<!--配置mysql的连接驱动-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<!--配置登录mysql的用户-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<!--配置登录mysql的密码-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>password to use against metastore database</description>
</property>
注意:hive的元数据在mysql库里创建的数据库hive的编码最好设置成latin1.
show variables like 'character%';
-
将mysql的驱动包
mysql-connector-java-5.1.28-bin.jar
上传到$HIVE_HOME/lib下(注意:驱动是jar结尾,不是tar结尾) -
执行执行先要初始化数据库
[root@hll01 hive]# bin/schematool -initSchema -dbType mysql
- 启动hive
(注:启动之前要启动hdfs sbin/start-dfs.sh 和yarn sbin/start-yarn.sh )
[root@hll01 hive]# bin/hive
#进入后可以执行下面命令进行操作:
hive>show dataases; #查看数据库
hive>show tables; #查看表
四 hbase(全分布式)
1 安装zookeeper
[root@hll01 software]# tar -zxvf zookeeper-3.4.5.tar.gz -C /opt/apps/
[root@hll01 zookeeper-3.4.5]# vi myid
1
[root@hll01 conf]# mv zoo_sample.cfg zoo.cfg
[root@hll01 conf]# vi zoo.cfg
dataDir=/opt/apps/zookeeper-3.4.5
server.1=hll01:2888:3888
server.2=hll02:2888:3888
server.3=hll03:2888:3888
[root@hll01 apps]# scp -r zookeeper-3.4.5/ hll02:/opt/apps/
[root@hll01 apps]# scp -r zookeeper-3.4.5/ hll03:/opt/apps/
启动zookeeper并保证启动完成
2 安装HBase
1. hbase-env.sh
export HBASE_MANAGES_ZK=false
2. hbase-site.xml
<configuration>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hll01:9000/hbase</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hll01,hll02,hll03</value>
</property>
</configuration>
3. regionservers
hll01
hll02
hll03
4. 将配置文件重新分发给集群的其他节点
[root@hll01 local]# scp -r hbase/ hll02:/usr/local/
[root@hll01 local]# scp -r hbase/ hll03:/usr/local/
5. 在hll01的hbase的conf目录下创建backup-masters
hll02
tip:
如果这里暂时不能自动启动,
[root@hll02 bin]# ./hbase-daemon.sh start master
3 测试
[root@hll01 apps]# start-hbase.sh
http://192.168.49.200:16010/master-status
测试一下
[root@hll01 apps]# hbase shell
list_namespace