Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

参考: https://blog.****.net/qq_38924171/article/details/100186327

https://blog.****.net/qq_38924171/article/details/99995856

1 集群环境准备

环境版本及介质版本:

Centos7+Hadoop2.8.5+Mysql8+Hive2.3.7

注意Hadoop版本必须要和Hive版本兼容,具体匹配信息可以去Hive官网查询

http://hive.apache.org/downloads.htmlCentos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

1.1 修改hostname

克隆出三台Centos7虚拟机,修改主机名称hostname,分别为:

namenode:   master    

datanode:   slave1 slave2

vi /etc/hostname

将localhost改为master

然后reboot重启

另外两台分别改为slave1和slave2

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

1.2 关闭防火墙

装有iptables的情况下:

service iptables stop--关闭防火墙

chkconfig iptables off--重启服务器不启动防火墙

service iptables status--查看防火墙状态

 

未安装iptables情况下:

systemctl stop firewalld.service--关闭防火墙

systemctl disable firewalld.service--重启服务器不启动防火墙

Firewall-cmd --state--查看防火墙状态

 

1.3 配置域名映射

vi /etc/hosts:

10.211.55.15   master

10.211.55.16   slave1

10.211.55.17   slave2

 

并将hosts文件拷贝到其他两台服务器上ysqld

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

检查是否可以ping通

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

1.4所有服务器安装jdk

上传jdk安装包master,使用scp命令将jdk安装包发送到其他两台服务器

scp /root/jdk-8u60-linux-x64.gz slave1:/root/

scp /root/jdk-8u60-linux-x64.gz slave2:/root/

 

对三台服务器上的jdk压缩包解压

tar -zxvf jdk-8u60-linux-x64.gz

修改master的环境变量/etc/profile

vi /etc/profile

export JAVA_HOME=/root/apps/jdk1.8.0_60/

export PATH=$PATH:$JAVA_HOME/bin

将修改后的profile文件scp到其他两台服务器,分别编译,执行java -version确认环境变量修改成功

 

  1.  Hadoop环境部署

上传hadoop的安装包

解压hadoop安装包

tar -zxvf hadoop-2.8.5.tar.gz

2.1 修改配置文件

  1. 修改hadoop-env.sh

export JAVA_HOME=/root/jdk1.8.0_60/

 

  1. 修改core-site.xml

<configuration>

 

<property><!-- hdfs dfs命令默认访问文件系统 -->

<name>fs.defaultFS</name>

<value>hdfs://master:9000/</value>

</property>

 

<property>

<name>hadoop.tmp.dir</name>

<value>/root/hdptmp/</value>

</property>

 

</configuration>

 

 

  1. 修改hdfs-site.xml

<configuration>

<property><!-- namenode存储路径 -->

 

<name>dfs.namenode.name.dir</name>

<value>/root/hdp-data/name/</value>

</property>

 

<property><!-- datanode存储路径 -->

<name>dfs.datanode.data.dir</name>

<value>/root/hdp-data/data/</value>

</property>

 

</configuration>

 

补充参数:

dfs.replication  默认值3     ## 副本数量,该参数其实用于客户端软件

dfs.blocksize   默认值134217728   ##块大小,该参数其实用于客户端软件

 

2.2 启动hdfs集群

  1. 第一次启动需要初始化namenode的元数据存储目录进行格式化(重要!!!)

hadoop  namenode  -format

 

2、启动namenode

进入hadoop安装目录,进入sbin目录,里面有一个脚本可用于启动hadoop的进程

hadoop-daemon.sh

启动namenode:

hadoop-daemon.sh start namenode

 

如报错命令不认识,则应该把hadoop是sbin目录配置到linux的系统环境变量PATH中

  1. 启动datanode

先将hadoop安装包从第一台配置好的机器上复制到另外2台机器

在后2台机器上配置好path环境变量

输入命令启动datanode

hadoop-daemon.sh start datanode

 

  1. 访问namenode的web页面

浏览器:http://master:50070

可以看到2台datanode在线,即集群启动成功

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

2.3 批量启动集群

  1. 先配置master机器到所有机器的ssh免密登陆

ssh-******   ## 生成**对

ssh-copy-id slave1

ssh-copy-id slave2

 

检查:从master上: ssh slave1 看是否要密码,无需登录密码,直接出现红框内容,免密登陆配置完成:

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

  1. 修改slaves文件,将需要让脚本自动启动的datanode域名填入salves文件

cd /root/apps/hadoop-2.8.0/etc/hadoop

[[email protected] hadoop]# vi slaves

master

slave1

slave2

 

  1. 用hadoop安装目录中的sbin目录中的start-dfs.sh即可自动批启动集群

启动:start-all.sh

停止:stop-all.sh

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

 

2.4 HDFS常用命令汇总

  1. 上传文件

hadoop fs -put test.txt /

hadoop fs -copyFromLocal test.txt /test.txt.2

 

  1. 下载文件

hadoop fs -get /test.txt.2

hadoop fs -copyToLocal /test.txt.2

 

  1. 创建目录

hadoop fs -mkdir /aaa

hadoop fs -mkdir -p /bbb/xxx

 

  1. 删除目录

hadoop fs -rm -r /aaa

 

  1. 移动/重命名

hadoop fs -mv /test.txt.2 /test.txt.3

hadoop fs -mv /test.txt.3 /bbb/test.txt.4

 

  1. 拷贝文件

hadoop fs -cp /test.txt /bbb/

 

  1. 查看目录下的子文件夹和文件

hadoop fs -ls /bbb/xxx/

hadoop fs -ls -R /    ##递归显示指定路径下的所有文件和文件夹信息

 

  1. 查看《文本》文件内容

hadoop  fs  -cat  /test.txt

hadoop  fs  -tail  /test.txt

 

9、下载多个文件在本地生成一个合并文件

hadoop  fs  -getmerge  /test/*.dat  ./xx.dat

[[email protected] ~]# hadoop fs

Usage: hadoop fs [generic options]

        [-appendToFile <localsrc> ... <dst>]

        [-cat [-ignoreCrc] <src> ...]

        [-checksum <src> ...]

        [-chgrp [-R] GROUP PATH...]

        [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]

        [-chown [-R] [OWNER][:[GROUP]] PATH...]

        [-copyFromLocal [-f] [-p] [-l] [-d] <localsrc> ... <dst>]

        [-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]

        [-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] <path> ...]

        [-cp [-f] [-p | -p[topax]] [-d] <src> ... <dst>]

        [-createSnapshot <snapshotDir> [<snapshotName>]]

        [-deleteSnapshot <snapshotDir> <snapshotName>]

        [-df [-h] [<path> ...]]

        [-du [-s] [-h] [-x] <path> ...]

        [-expunge]

        [-find <path> ... <expression> ...]

        [-get [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]

        [-getfacl [-R] <path>]

        [-getfattr [-R] {-n name | -d} [-e en] <path>]

        [-getmerge [-nl] [-skip-empty-file] <src> <localdst>]

        [-help [cmd ...]]

        [-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [<path> ...]]

        [-mkdir [-p] <path> ...]

        [-moveFromLocal <localsrc> ... <dst>]

        [-moveToLocal <src> <localdst>]

        [-mv <src> ... <dst>]

        [-put [-f] [-p] [-l] [-d] <localsrc> ... <dst>]

        [-renameSnapshot <snapshotDir> <oldName> <newName>]

        [-rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ...]

        [-rmdir [--ignore-fail-on-non-empty] <dir> ...]

        [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]

        [-setfattr {-n name [-v value] | -x name} <path>]

        [-setrep [-R] [-w] <rep> <path> ...]

        [-stat [format] <path> ...]

        [-tail [-f] <file>]

        [-test -[defsz] <path>]

        [-text [-ignoreCrc] <src> ...]

        [-touchz <path> ...]

        [-truncate [-w] <length> <path> ...]

        [-usage [cmd ...]]

namenode如果发现丢失的block数量超过0.1%时,会自动进入安全模式。

namenode也会自动退出安全模式;

 

如果namenode自动退出安全模式没有成功,可以用运维命令,强行退出安全模式:

 

强行进入安全模式:

hdfs dfsadmin -safemode enter

 

强行退出安全模式:

hdfs dfsadmin -safemode leave

 

 

2.4 Hadoop部署常见问题

  1. 主机名:不能带下划线: “_”

症状:启动失败,报错:there is not valid host:port 无效的主机名和端口号

 

  1. 输入hadoop命令,报错:command not found

原因是:linux查找命令执行的搜索机制

可以把hadoop命令所在的目录配入PATH环境变量

或者指定路径来执行这个命令

 

 

  1. 第一次启动前忘了初始化namenode的元数据目录

症状:namenode启动失败,报错:元数据目录不存在或者不可访问

storage directory does not exist or is not accessible.

 

  1. 防火墙忘了关

症状:网页无法连接;  

或者namenode不识别datanode

 

  1. 启动datanode失败

报错:datanode上的clusterID与namenode上的clusterID不一致

原因: namenode再次被format后,生成了一个新的clusterID,导致与原来的datanode上的clusterID不一致

解决办法:将master和slave1上的clusterID修改一致

所谓的命令行客户端,是hadoop软件中自带的一个客户端程序,通过命令的形式来使用

客户端,该命令是老版本:

hadoop  fs   

新版本:

hdfs  dfs

客户端程序改在哪里运行呢?

客户端程序可以在任何机器上运行(集群内的机器、集群外的机器、linux、windows、mac),前提是,那个机器上安装了hadoop软件

 

注意:

hadoop的命令行客户端,可以访问各种文件系统:本地文件系统

                                             HDFS文件系统

                                             亚马逊分布式文件系统

当你直接  hdfs  dfs  -ls  /

它就不知道你要访问的是哪一个文件系统了!!!

默认访问的是本机的本地文件系统!

 

如果要访问一个指定的文件系统,需要在目标路径前加上这个文件系统的URI

URI :  http://www.taobao.com:80/abc.html

         jdbc:mysql://xx:3306/db1

         hdfs://nn1.hdp:9000/

 

如果要让hdfs客户端默认就访问我们想指定的文件系统,那么就在core-site.xml配置文件中,覆盖一个参数:

fs.defaultFS = file:///

改成:

fs.defaultFS = hdfs://master:9000/

 

core-site.xml

<property>

  <name>fs.defaultFS</name>

  <value>hdfs://master:9000/</value>

</property>

 

 

 

  1.  Mysql元数据库部署

安装Mysql前需要卸载原有Mysql

3.1 卸载原有Mysql

  1. 找出原Mysql安装目录

rpm -qa | grep mysql

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

  1. 依次删除上述文件

yum remove mysql80-community-release-el7-3.noarch

yum remove mysql-community-server-8.0.21-1.el7.x86_64

yum remove mysql-community-common-8.0.21-1.el7.x86_64

yum remove mysql-community-client-8.0.21-1.el7.x86_64

yum remove mysql-community-libs-8.0.21-1.el7.x86_64

  1. 删除配置文件

rm -rf /var/lib/mysql

rm /etc/my.cnf

rm -rf /usr/share/mysql-8.0

3.2 yum源安装mysql8.0

1、在Mysql官网获取yum源:https://dev.mysql.com/downloads/repo/yum/,注意版本:

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

 

  1. 将repo文件上传到master服务器,并执行命令安装:

yum install mysql80-community-release-el7-3.noarch.rpm

 

  1. 安装完毕后,进入/etc/yum.repos.d,可以看到刚加入的repo
  2. Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

完毕后,更新yum缓存

yum clean all

yum makecache

 

  1. 因为官网最新的repo源中,包括了mysql的许多版本,可以通过cat /etc/yum.repos.d/mysql-community.repo ,修改各版本的enabled的值来确定安装哪个版本

cat /etc/yum.repos.d/mysql-community.repo

 

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

上图可看到,5.6和5.7的版本,enabled值为0,为不安装;8.0及其它工具,enabled值为1,为安装。默认安装最高版本,可以不修改。

  1. 执行安装命令

yum install mysql-community-server

如出现缺少依赖的情况,安装对应依赖即可

3.3 登陆Mysql及修改密码

注意:官方源中安装的mysql默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。否则会提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements错误

  1. 启动Mysql

systemctl start mysqld

设置开机自启

systemctl enable mysqld

systemctl daemon-reload

查看Mysql服务状态

systemctl status mysqld

 

  1. 修改Mysql登陆密码
  1. 查看默认初始密码:

grep 'temporary password' /var/log/mysqld.log

 

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

  1. 修改密码方法一:

mysql -uroot -p

Enter password:#输入密码,密码为查看的初始密码

use mysql

ALTER user 'root'@'localhost' IDENTIFIED BY '[email protected]';

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

  1. 修改密码方法二:

通过Mysql自带修改密码脚本修改,直接输入

/usr/bin/mysql_secure_installation  #修改密码的脚本

 

具体过程为,先输入初始密码,再输入新密码,可交互性高

注意,输入新密码后,会出现几个问句

  • Remove anonymous users?是否移除默认用户,建议no
  • Disallow root login remotely?是否不允许root用户远程连接,想要远程连接,必须no
  • Reload privilege tables now?是否现在加载表,建议yes
  1. 登陆Mysql

mysql -uroot -p

3.4 远程登陆

  1. 登陆Mysql数据库,切换到mysql库

use mysql

  1. 查看root用户属性

select host,user from user;

 

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

  1. root用户的host默认为localhost,需要改为%,即可允许远程登录数据库

update user set host='%' where user='root';

修改完成后,使用以下命令让修改立刻生效

flush privileges;

  1. 使用Navicat登陆时报错

Authentication plugin 'caching_sha2_password' cannot be loaded:

这是由于navicat密码加密方式为caching_sha2_password,而mysql默认加密格式为mysql_native_password

只需修改root用户密码加密方式与navicat相同即可

执行命令

update user set plugin='mysql_native_password' where user='root';

flush privileges;

 

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

3.5 出现问题解决

因为已经改变了root用户密码的加密方式,导致mysql不能正确解密原先设置的密码,导致密码失效,无法登陆到mysql

下面介绍一种,无密码登录mysql,及忘记密码后,修改密码的方法

1、修改配置文件,跳过权限验证,进入 vi /etc/my.cnf,在[mysqld]中,添加一行 skip-grant-tables

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

保存退出后,重启mysql服务

systemctl restart mysqld

此时mysql数据库,可以进行无密码登录

  1. 无密码登录mysql,先把密码设置为空

mysql -uroot -p

Enter password:#输入密码,此时密码为空,可直接Enter

use mysql

update user set authentication_string='' where user='root';  

删除第一步中添加的代码skip-grant-tables

  1. 执行修改密码脚本

/usr/bin/mysql_secure_installation  #修改密码的脚本

具体操作步骤看3.3中修改密码方法二

此时,可用新更改的密码登录mysql

Navicat与mysql密码加密方式相同,也有了正确的密码,root用户也可以被远程访问,Navicat连接数据库成功

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

  1.  Hive部署

4.1 介质下载安装

下载链接:http://hive.apache.org/downloads.html

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

 

 

 

下载传到虚拟机上后,然后解压到安装目录

tar -zxvf apache-hive-2.3.6-bin.tar.gz

4.2 环境变量和配置文件配置

1、环境变量配置

vi /etc/profile

export HIVE_HOME=/opt/app/apache-hive-2.3.6-bin

export HIVE_CONF_DIR=$HIVE_HOME/conf

export PATH=$PATH:$HIVE_HOME/bin

source /etc/profile  #使配置文件生效

  1. 配置hive

在集群上建立目录,并赋予权限

hdfs dfs -mkdir -p  /user/hive/warehouse

hdfs dfs -chmod -R 777 /user/hive/warehouse

hdfs dfs -mkdir -p /tmp/hive

hdfs dfs -chmod -R 777 /tmp/hive

在本地建立tmp目录保存临时数据

在/opt/app/apache-hive-2.3.6-bin目录下,建立tmp文件夹

mkdir tmp

chmod -R 777 tmp/

  1. 修改配置文件

进入hive根目录下的conf文件夹

cd /opt/app/apache-hive-2.3.6-bin/conf/

有hive-default.xml.template和hive-env.sh.template 两个模板文件,我们复制成新的文件并进行修改

cp hive-default.xml.template hive-site.xml

cp hive-env.sh.template hive-env.sh

可下载到本地修改完成后再上传,注意下载上传用户为文件所有用户,防止权限变化

  1. hive-site.xml配置修改

1.修改用户名,将文件中,所有,${system:user.name}    替换为   root

2.修改临时目录,将文件中,所有,${system:java.io.tmpdir}    替换为   /opt/app/apache-hive-2.3.6-bin/tmp

3.修改4个与数据库有关的地方

3.1搜索 ConnectionDriverName,修改jdbc驱动

<property>

    <name>javax.jdo.option.ConnectionDriverName</name>

    <value>com.mysql.cj.jdbc.Driver</value>   ##这是mysql8.0的驱动,mysql5的驱动为com.mysql.jdbc.Driver

  </property>

3.2搜索 ConnectionURL,修改与数据库连接的URL,ip地址改为数据库所在ip,/后跟数据库名,如不存在则会在后面初始化hive时进行创建

 <property>

    <name>javax.jdo.option.ConnectionURL</name>

    <value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true</value>

  </property>

3.3搜索 ConnectionUserName,修改登录数据库的用户

<property>

    <name>javax.jdo.option.ConnectionUserName</name>

    <value>root</value>

  </property>

3.4 搜索ConnectionPassword,修改对应用户的密码

  <property>

    <name>javax.jdo.option.ConnectionPassword</name>

    <value>对应用户的密码</value>

  </property>

4. 搜索hive.metastore.uris,设置元数据服务

<property>

    <name>hive.metastore.uris</name>

    <value>thrift://master:9083</value>

</property>

  1. 将jdbc驱动放入hive根目录下的lib文件夹当中,驱动下载地址:

https://dev.mysql.com/downloads/connector/j/

 选择不依赖平台版本,任意下载一个,进行解压

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

 

 

 

2)hive-env.sh配置修改

加入以下代码,引入jdk、hadoop、hive环境变量

export JAVA_HOME=/opt/app/jdk1.8.0_211

export HADOOP_HOME=/opt/app/hadoop-2.7.7

export HIVE_HOME=/opt/app/apache-hive-2.3.6-bin

export HIVE_CONF_DIR=$HIVE_HOME/conf

export HIVE_AUX_JARS_PATH=$HIVE_HOME/lib

 

别的服务器想安装hive,并访问metastore的server,除了以上的配置外,还需在hive-site.xml中,,修改以下设置

<property>

<name>hive.metastore.uris</name>

<value>thrift://master:9083</value>

</property>

 

<property>

  <name>hive.metastore.local</name>

  <value>false</value>

</property>

 

<!--hiveserver2的相关属性配置-->

 <property>

    <name>hive.server2.authentication</name>

    <value>NONE</value>

</property>

4.3 启动测试hive

  1. 对元数据库进行初始化,执行命令:

schematool -initSchema -dbType mysql

  1. 启动hive客户端

hive --service metastore &

  1. 在hive根目录下进入bin目录,输入./hive,进入hive命令行模式,输入show databases;出现结果为启动成功Centos7部署Hadoop2.8.5+Mysql8+Hive2.3.7

 

 

 

参考: https://blog.****.net/qq_38924171/article/details/100186327

https://blog.****.net/qq_38924171/article/details/99995856