centos7零环境搭建hadoop高可用集群

前期准备

已经安装好jdk1.8

更换yum源

  1. 备份原镜像文件,便于后期恢复
 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2.下载新的CentOS-Base.repo 到/etc/yum.repos.d/

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  1. 清除缓存
yum clean all 
  1. 生成缓存
yum makecache

远程免密登录

进入/root/.ssh/

#在每台机上产生新的rsa公钥私钥文件,并统一拷贝到一个authorized_keys文件中

cd /root/.ssh/
ssh-keygen -t rsa 
cat id_rsa.pub >> authorized_keys

#将公匙copy到你想要免密登录的机器上

ssh-copy-id -i hostName 

关闭防火墙

systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld(永久关闭)

修改主机名

 vim /etc/hostname

修改映射关系

vim /etc/hosts

添加环境变量

 export JAVA_HOME=/home/sun/cluster/jdk1.8.0_161
 export HADOOP_HOME=/home/sun/cluster/hadoop-2.7.7
 export ZOOKEEPER_HOME=/home/sun/cluster/zookeeper-3.4.14
 export HIVE_HOME=/home/sun/cluster/apache-hive-2.3.4-bin
 export HBASE_HOME=/home/sun/cluster/hbase-1.4.9
 export PATH=${PATH}:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${ZOOKEEPER_HOME}/bin:${HIVE_HOME}/bin:${HBASE_HOME}/bin:${HADOOP_HOME}/sbin

一.Zookeeper

修改配置文件(@)

cd /home/sun/cluster/zookeeper-3.4.14/conf
 cp zoo_sample.cfg zoo.cfg
 vim zoo.cfg

修改:
dataDir=/home/sun/cluster/zookeeper-3.4.14/tmp
在文件末尾追加:

每个当前节点要把自己的IP地址设置为0.0.0.0

server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888
server.3=hadoop3:2888:3888

创建myid文件(@)

注意:要保证三台节点id不一样

cd /home/sun/cluster/zookeeper-3.4.14/tmp
touch myid
echo 1>myid

二.Hadoop HA

2.1修改配置文件

2.1.1修改Hadoop-env.sh

export JAVA_HOME=/home/sun/cluster/jdk1.8

2.1.2修改core-site.xml

<!-- 指定hdfs的nameservice为ns1 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://ns1</value>
</property>

<!-- 指定hadoop临时目录 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/home/sun/cluster/hadoop-2.7.7/tmp</value>
</property>

<!-- 指定zookeeper地址 -->
<property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>


2.1.3修改hdfs-site.xml

<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
<property>
    <name>dfs.nameservices</name>
    <value>ns1</value>
</property>
<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
<property>
    <name>dfs.ha.namenodes.ns1</name>
    <value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
    <name>dfs.namenode.rpc-address.ns1.nn1</name>
    <value>hadoop1:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
    <name>dfs.namenode.http-address.ns1.nn1</name>
    <value>hadoop1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
    <name>dfs.namenode.rpc-address.ns1.nn2</name>
    <value>hadoop2:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
    <name>dfs.namenode.http-address.ns1.nn2</name>
    <value>hadoop2:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hadoop1:8485;hadoop3:8485;hadoop4:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/home/sun/cluster/hadoop-2.7.7/journal</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
    <name>dfs.client.failover.proxy.provider.ns1</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>
        sshfence
        shell(/bin/true)
    </value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
    <name>dfs.ha.fencing.ssh.connect-timeout</name>
    <value>30000</value>
</property>

2.1.4修改mapred-site.xml

<!-- 指定mr框架为yarn方式 -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

注:如果没有该文件则将mapred-site.xml.template重名为mapred-site.xml

mv mapred-site.xml.template mapred-site.xml

2.1.5修改yarn-site.xml

<!-- 开启RM高可靠 -->
<property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
</property>

<!-- 指定RM的cluster id -->
<property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>yrc</value>
</property>

<!-- 指定RM的名字 -->
<property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
</property>

<!-- 分别指定RM的地址 -->
<property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>hadoop1</value>
</property>

<property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>hadoop2</value>
</property>

<!-- 指定zk集群地址 -->
<property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>

<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

修改slaves

hadoop2
hadoop3
hadoop4

2.2将Hadoop目录分发到各节点

2.3格式化(按步骤来)

2.3.1.启动zk

zkServer.sh start
zkServer.sh status

#出现leader时启动成功,如果出现错误可能是防火墙没有关闭

2.3.2启动journalnode(@)

分别在hadoop1、hadoop3、hadoop4上启动journalnode,

hadoop-daemon.sh start journalnode

运行jps命令检验hadoop1、hadoop3、hadoop4多了JournalNode进程

2.3.3格式化hdfs

#在hadoop1上执行命令:

hdfs namenode -format

2.3.4拷贝文件(@)

将HADOOP_HOME下/tmp拷贝给nameNode2(hadoop2)

2.3.5格式化zk

在hadoop1上执行即可

hdfs zkfc -formatZK

2.4启动hdfs,yarn进行测试

访问页面

hadoop1:50070

三.Hbase1.4.9

拷贝文件

将hadoop下的hdfs-site.xml和core-site.xml放到hbase/conf下

cd /home/sun/cluster/hadoop-2.7.7/etc/hadoop
 cp hdfs-site.xml /home/sun/cluster/hbase-1.4.9/conf
 cp core-site.xml /home/sun/cluster/hbase-1.4.9/conf

修改配置文件

修改hbase-env.sh

export JAVA_HOME=/home/sun/cluster/jdk1.8
 #告诉hbase使用外部的zk 
 export HBASE_MANAGES_ZK=false

修改hbase-site.xml

<!-- 指定hbase在HDFS上存储的路径 -->
<property>
    <name>hbase.rootdir</name>
    <value>hdfs://ns1/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
</property>
<!-- 指定zk的地址,多个用“,”分割 -->
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>

修改regionservers

#添加以下内容

hadoop2
hadoop3
hadoop4 

分发到各个节点

启动顺序(HA)

1.启动zk

zkServer.sh start

2.启动hdfs

start-hdfs.sh

3.启动hbase

start-hbase.sh

访问页面

hadoop1:16010

常用命令

start-hbase.sh #启动hbase分布式集群
hbase-daemon.sh start master #启动hbase备用主节点
stop-hbase.sh #关闭hbase分布式集群(备份节点也会关闭)
hbase shell #进入hbase客户端(exit退出客户端)

6.问题

6.1出现ignoring option PermSize=128m; support was removed in 8.0

原因:由于使用的是1.8的jdk所以需要把hbase-env.sh里的以下内容注释掉

# Configure PermSize. Only needed in JDK7. You can safely remove it for JDK8+
export HBASE_MASTER_OPTS=“ H B A S E M A S T E R O P T S − X X : P e r m S i z e = 128 m − X X : M a x P e r m S i z e = 128 m " e x p o r t H B A S E R E G I O N S E R V E R O P T S = " HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m" export HBASE_REGIONSERVER_OPTS=" HBASEMASTEROPTSXX:PermSize=128mXX:MaxPermSize=128m"exportHBASEREGIONSERVEROPTS="HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m”

MySql5.7

安装mysql

下载并安装MySQL官方的 Yum Repository ( -c 指定下载后存放路径)

wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

使用yum安装

 yum -y install mysql57-community-release-el7-8.noarch.rpm
 yum -y install mysql-community-server

启动mysql服务

systemctl start  mysqld.service

查看mysql初始密码

grep "password" /var/log/mysqld.log

进入mysql客户端

mysql -uroot -p

修改密码

更改mysql密码规则

mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;

更改mysql密码

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

修改配置 让任何主机都可以访问

mysql> use mysql;
mysql> show tables;
mysql> select host,user from user;

远程连接授权

如果设置无密码登录后不必执行此步骤

这里的123是为你给新增权限用户设置的密码,%代表所有主机,也可以具体到主机ip地址

mysql> use mysql;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;

修改配置使hive可以多客户端使用

 mysql> update user set host='%' where user=‘root’;

刷新生效

 mysql> flush privileges;

设置开机启动

systemctl enable mysqld
systemctl daemon-reload

无密码登录

如果忘记密码可以通过修改配置文件无密码登录

1.找到mysql安装路径找到

 find / -name my.cnf
 vim /etc/my.cnf 

在 [mysqld] 下添加 skip-grant-tables 跳过密码校验

2.service mysqld restart 重启服务配置生效

三.Hive2.3.6

修改配置文件

export HIVE_HOME=/home/sun/cluster/hive-2.3.6/
export PATH=$PATH:$HIVE_HOME/bin

修改hive-env.sh文件

# Set HADOOP_HOME to point to a specific hadoop install directory
 HADOOP_HOME=/home/sun/cluster/hadoop-2.7.7
# Hive Configuration Directory can be controlled by:
 export HIVE_CONF_DIR=/home/sun/cluster/hive-2.3.6/conf

修改hive-site.xml文件

mv hive-default.xml.template hive-site.xml
  1. 修改时必须把原有相应的配置删除掉,否则会报错
  2. 在hive-site.xml查找所有 s y s t e m : j a v a . i o . t m p d i r , {system:java.io.tmpdir}, system:java.io.tmpdir{system:user.name}将其替换为具体的临时目录和具体名称,如:/home/sun/cluster/hive-2.3.6/tmp
  3. 添加以下文件在配置最开头部分
<!--(mysql地址localhost,当hive与MySQL安装在同一节点时使用localhost,不在同一节点时用MySQL安装的主机地址)
?createDatabaseIfNotExist=true 表示如果不存在数据库就创建
?autoReconnect=true&amp;useSSL=false 解决‘警告不建议在没有服务器身份验证的情况下建立SSL连接’问题,即MySQL设置的是无密码登录时使用
-->
<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true?autoReconnect=true&amp;useSSL=false</value>
	<description>metastore地址</description>
</property>

<!--(mysql的驱动)-->
<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
</property>

<!--(用户名)-->
<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
</property>

<!--(密码)-->
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>123</value>
</property>

添加jar包

查看你MySQL的版本

mysql --version

下载对应的jar包放入${HIVE_HOME}/lib下(注:版本不能高过mysql版本,否则会出现错误)

初始化元数据库为mysql

[root@s100 bin]# pwd
 /home/sun/cluster/hive-2.3.6/
[root@s100 bin]# schematool -dbType mysql -initSchema

注意:

可能会报这样错误:Error: Syntax error: Encountered “” at line 1, column 64. (state=42X01,code=30000)。这是因为执行schematool -dbType mysql -initSchema进行初始化的时候,还是使用了默认的URL,Driver和user APP。在hive-site.xml中查找相关原配置,并删除后问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值