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.html
1.1 修改hostname
克隆出三台Centos7虚拟机,修改主机名称hostname,分别为:
namenode: master
datanode: slave1 slave2
vi /etc/hostname
将localhost改为master
然后reboot重启
另外两台分别改为slave1和slave2
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
检查是否可以ping通
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确认环境变量修改成功
- Hadoop环境部署
上传hadoop的安装包
解压hadoop安装包
tar -zxvf hadoop-2.8.5.tar.gz
2.1 修改配置文件
- 修改hadoop-env.sh
export JAVA_HOME=/root/jdk1.8.0_60/ |
- 修改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> |
- 修改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集群
- 第一次启动需要初始化namenode的元数据存储目录进行格式化(重要!!!)
hadoop namenode -format |
2、启动namenode
进入hadoop安装目录,进入sbin目录,里面有一个脚本可用于启动hadoop的进程
hadoop-daemon.sh
启动namenode:
hadoop-daemon.sh start namenode |
如报错命令不认识,则应该把hadoop是sbin目录配置到linux的系统环境变量PATH中
- 启动datanode
先将hadoop安装包从第一台配置好的机器上复制到另外2台机器
在后2台机器上配置好path环境变量
输入命令启动datanode
hadoop-daemon.sh start datanode |
- 访问namenode的web页面
可以看到2台datanode在线,即集群启动成功
2.3 批量启动集群
- 先配置master机器到所有机器的ssh免密登陆
ssh-****** ## 生成**对
ssh-copy-id slave1 ssh-copy-id slave2 |
检查:从master上: ssh slave1 看是否要密码,无需登录密码,直接出现红框内容,免密登陆配置完成:
- 修改slaves文件,将需要让脚本自动启动的datanode域名填入salves文件
cd /root/apps/hadoop-2.8.0/etc/hadoop
[[email protected] hadoop]# vi slaves master slave1 slave2 |
- 用hadoop安装目录中的sbin目录中的start-dfs.sh即可自动批启动集群
启动:start-all.sh
停止:stop-all.sh
2.4 HDFS常用命令汇总
- 上传文件
hadoop fs -put test.txt /
hadoop fs -copyFromLocal test.txt /test.txt.2
- 下载文件
hadoop fs -get /test.txt.2
hadoop fs -copyToLocal /test.txt.2
- 创建目录
hadoop fs -mkdir /aaa
hadoop fs -mkdir -p /bbb/xxx
- 删除目录
hadoop fs -rm -r /aaa
- 移动/重命名
hadoop fs -mv /test.txt.2 /test.txt.3
hadoop fs -mv /test.txt.3 /bbb/test.txt.4
- 拷贝文件
hadoop fs -cp /test.txt /bbb/
- 查看目录下的子文件夹和文件
hadoop fs -ls /bbb/xxx/
hadoop fs -ls -R / ##递归显示指定路径下的所有文件和文件夹信息
- 查看《文本》文件内容
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部署常见问题
- 主机名:不能带下划线: “_”
症状:启动失败,报错:there is not valid host:port 无效的主机名和端口号
- 输入hadoop命令,报错:command not found
原因是:linux查找命令执行的搜索机制
可以把hadoop命令所在的目录配入PATH环境变量
或者指定路径来执行这个命令
- 第一次启动前忘了初始化namenode的元数据目录
症状:namenode启动失败,报错:元数据目录不存在或者不可访问
storage directory does not exist or is not accessible.
- 防火墙忘了关
症状:网页无法连接;
或者namenode不识别datanode
- 启动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
|
安装Mysql前需要卸载原有Mysql
3.1 卸载原有Mysql
- 找出原Mysql安装目录
rpm -qa | grep mysql |
- 依次删除上述文件
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 |
- 删除配置文件
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/,注意版本:
- 将repo文件上传到master服务器,并执行命令安装:
yum install mysql80-community-release-el7-3.noarch.rpm |
- 安装完毕后,进入/etc/yum.repos.d,可以看到刚加入的repo
完毕后,更新yum缓存
yum clean all yum makecache |
- 因为官网最新的repo源中,包括了mysql的许多版本,可以通过cat /etc/yum.repos.d/mysql-community.repo ,修改各版本的enabled的值来确定安装哪个版本
cat /etc/yum.repos.d/mysql-community.repo |
上图可看到,5.6和5.7的版本,enabled值为0,为不安装;8.0及其它工具,enabled值为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错误
- 启动Mysql
systemctl start mysqld |
设置开机自启
systemctl enable mysqld systemctl daemon-reload |
查看Mysql服务状态
systemctl status mysqld |
- 修改Mysql登陆密码
- 查看默认初始密码:
grep 'temporary password' /var/log/mysqld.log |
- 修改密码方法一:
mysql -uroot -p Enter password:#输入密码,密码为查看的初始密码 use mysql ALTER user 'root'@'localhost' IDENTIFIED BY '[email protected]'; |
- 修改密码方法二:
通过Mysql自带修改密码脚本修改,直接输入
/usr/bin/mysql_secure_installation #修改密码的脚本 |
具体过程为,先输入初始密码,再输入新密码,可交互性高
注意,输入新密码后,会出现几个问句
- Remove anonymous users?是否移除默认用户,建议no
- Disallow root login remotely?是否不允许root用户远程连接,想要远程连接,必须no
- Reload privilege tables now?是否现在加载表,建议yes
- 登陆Mysql
mysql -uroot -p |
3.4 远程登陆
- 登陆Mysql数据库,切换到mysql库
use mysql |
- 查看root用户属性
select host,user from user; |
- root用户的host默认为localhost,需要改为%,即可允许远程登录数据库
update user set host='%' where user='root'; |
修改完成后,使用以下命令让修改立刻生效
flush privileges; |
- 使用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; |
3.5 出现问题解决
因为已经改变了root用户密码的加密方式,导致mysql不能正确解密原先设置的密码,导致密码失效,无法登陆到mysql
下面介绍一种,无密码登录mysql,及忘记密码后,修改密码的方法
1、修改配置文件,跳过权限验证,进入 vi /etc/my.cnf,在[mysqld]中,添加一行 skip-grant-tables
保存退出后,重启mysql服务
systemctl restart mysqld |
此时mysql数据库,可以进行无密码登录
- 无密码登录mysql,先把密码设置为空
mysql -uroot -p Enter password:#输入密码,此时密码为空,可直接Enter use mysql update user set authentication_string='' where user='root'; |
删除第一步中添加的代码skip-grant-tables
- 执行修改密码脚本
/usr/bin/mysql_secure_installation #修改密码的脚本 |
具体操作步骤看3.3中修改密码方法二
此时,可用新更改的密码登录mysql
Navicat与mysql密码加密方式相同,也有了正确的密码,root用户也可以被远程访问,Navicat连接数据库成功
4.1 介质下载安装
下载链接:http://hive.apache.org/downloads.html
下载传到虚拟机上后,然后解压到安装目录
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 #使配置文件生效 |
- 配置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/ |
- 修改配置文件
进入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 |
可下载到本地修改完成后再上传,注意下载上传用户为文件所有用户,防止权限变化
- 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> |
- 将jdbc驱动放入hive根目录下的lib文件夹当中,驱动下载地址:
https://dev.mysql.com/downloads/connector/j/
选择不依赖平台版本,任意下载一个,进行解压
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
- 对元数据库进行初始化,执行命令:
schematool -initSchema -dbType mysql |
- 启动hive客户端
hive --service metastore & |
- 在hive根目录下进入bin目录,输入./hive,进入hive命令行模式,输入show databases;出现结果为启动成功
参考: https://blog.****.net/qq_38924171/article/details/100186327