linux centos7.6配置Hadoop+Spark+Hbase+Hive+Zookeeper集群

文章目录

  • hadoop&spark集群配置
    • 网络配置(桥接模式)
      • ip配置
      • 修改用户名(所有节点)
    • 配置ssh免密码登录
    • 安装JDK1.8.0环境(所有节点)
    • 安装Hadoop2.10.0(所有节点)
      • 遇到的问题
    • 安装关系型数据库MySQL(主节点)
    • 安装zookeeper-3.5.8(所有节点)
      • 遇到的问题
      • zookeeper基础知识
    • 安装spark3.0.1(所有节点)
      • 遇到的问题
    • 安装hive-2.3.7
      • 遇到的问题
    • 安装hbase2.3.3
      • 遇到的问题

问题集锦:

  1. kill -9 pid (用于结束kill不能直接结束得进程)
  2. 卸载自带openjdk yum remove openjdk
  3. ctrl+alt+F3可以转为命令行界面
  4. ctrl+alt+F1可变回图形界面
    #端口使用查询
  5. 查看服务器所有被占用的端口
    netstat -ant
  6. 验证某个端口是否被占用
    netstat -tunlp|grep 15692
  7. 查看所有监听端口号
    netstat -lntp

hadoop&spark集群配置

工具:VMware
环境:linux centos7.6
环境变量:之后需要修改的环境变量

export ZK_HOME=/usr/local/zookeeper/zookeeper
export HBASE_HOME=/usr/local/hbase/hbase
export JAVA_HOME=/usr/local/java
export HADOOP_HOME=/usr/local/hadoop
export HIVE_HOME=/usr/local/hive/hive
export JAVA_HOME=/usr/local/java
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin
in:$MYSQL_HOME/bin:$HBASE_HOME/bin:$ZK_HOME/bin

网络配置(桥接模式)

//手动设置ip(如果有图形化界面,可以直接通过网络设置配置)
IPADDR:设置和宿主机同网段ip
NETMASK:子网掩码和宿主机相同
GATEWAY: 默认网关和宿主机相同
DNS1: 跟宿主一样
PEERDNS=no

  1. 对应信息添加到文件中/etc/sysconfig/network-scripts/ifcfg-eno16777736(ifcfg-eno16777736每台主机不同)

  2. 添加网关地址
    vi /etc/sysconfig/network
    NETWORKING=yes
    HOSTNAME=xxxx #名字随便了
    GATEWAY=192.168.1.1 #默认网关和宿主机相同

  3. 添加dns
    vi /etc/resolv.conf
    #Generated by NetworkManager
    nameserver 192.168.0.1 #DNS,跟宿主一样

  4. 重启网络

    service network restart
    systemctl restart network.service
    

ip配置

主节点:centos7.6 master
hostname : master
IP :192.168.43.249 #由当前本机的网络决定
从节点1:centos7.6 slave1
hostname : slave1
IP :192.168.43.31 #由当前本机的网络决定
从节点2:centos7.6 slave2
hostname : slave2
IP :192.168.43.229 #由当前本机的网络决定

搭建分布式Hadoop涉及3个节点,其中
主机名为master的节点为主节点,运行HDFS命名节点、YARN资源管理等服务,同时也运行从节点的HDFS数据节点、YARN节点管理等服务;
主机名为slave1和slave2的节点为从节点,运行HDFS数据节点、YARN节点管理等服务。
以下步骤中,主机名和IP地址以真实环境为准。以下每个步骤都尽可能注明执行位置为主节点、从节点或所有节点。
关闭防火墙(所有节点)
CentOS的防火墙服务firewalld用于限制特定端口的外部访问。Hadoop包含了多种服务,使用到了不同端口,因此需要将所有节点的防火墙关闭。

systemctl stop firewalld.service

修改用户名(所有节点)

本次集群搭建共有三个节点,包括一个主节点master,和两个从节点slave1和slave2。

以主机点master为例,修改主机名为master,可使用bash命令使操作直接生效:

hostnamectl set-hostname master #永久修改
bash

//主机名映射配置(所有节点)
配置集群中各组成节点的主机名和IP地址的映射,打开文件/etc/hosts。

vim /etc/hosts

在文件末尾添加如下内容,以实际的主机名和IP地址为准。可使用ifconfig命令查看实际IP地址。

192.168.43.249 master
192.168.43.31 slave1
192.168.43.229 slave2

如果需要在本Windows上直接通过主机名访问虚拟机的服务端口,需要在本机hosts文件中添加上述映射关系,并且关闭centos防火墙。

配置ssh免密码登录

Hadoop启动后,namenode通过SSH来启动和停止datanode上的各种进程。这里必须在节点间执行指令的时候是免密码登录的形式。而且方便跨节点执行指令的时候,也需要免秘钥登录的形式

  1. 分别在master和slave上分别输入指令:ssh-keygen -t rsa;
  2. 进入路径 /root/.ssh 下可以看到两个文件 id-rsa和id_rsa.pub,其中id_rsa.pub是公钥;
  3. 为了方便识别不同主机上的密钥名称,这里对master上的id_rsa.pub命名为:authorized_keys_master.pub,slave1上的命名为:authorized_keys_slave1.pub,slave2上的命名为:authorized_keys_slave1.pub;
    重命名 : mv id_rsa.pub authorized_keys_slave1.pub
  4. 把slave1和slave2上的公钥用scp命令传到master上;
    发送公钥到master节点:scp -r /root/.ssh/authorized_keys_node1.pub root@master:/root /.ssh/
  5. 把master和slave1,slave2的公钥信息保存到authorized_keys文件中,然后再把authorized_keys发送到slave1和slave2节点、slave2的公钥信息保存到authorized_keys文件中,然后再把authorized_keys发送到slave1和slave2节点
    合并到authorized_keys文件中: cat authorized_keys_slave1.pub >> authorized_keys

测试 :

在master上 ssh slave1 slave2 
在slave1上 ssh master, ssh slave2 
在slave2上 ssh master, ssh slave1

不需要密码则成功

安装JDK1.8.0环境(所有节点)

使用tar命令将jdk-8u192-linux-x64.tar.gz文件解压缩到文件夹/usr/local/java。

sudo mkdir /usr/local/java
sudo tar -zxf jdk-8u192-linux-x64.tar.gz -C /usr/local/java/

在主节点上使用scp命令从主节点复制JAVA路径到从节点的相同路径。

scp -r /usr/local/java/ slave1:/usr/local/
scp -r /usr/local/java/ slave2:/usr/local/

在主从节点中配置java环境变量,在/etc/profile文件最后,添加如下内容:

sudo vi /etc/profile
export JAVA_HOME=/usr/local/java
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin

在主节点上使用scp命令从主节点复制JAVA环境变量到从节点的相同路径。

scp -r /etc/profile slave1:/etc/profile
scp -r /etc/profile slave2:/etc/profile

退出vi编辑器,使环境变量设置立即生效。(所有节点)

source /etc/profile

安装Hadoop2.10.0(所有节点)

tar -zxvf .tar.gz -C …
将下载好的安装包解压到目录 /usr/local/

配置文件core-site.xml hdfs-site.xml hadoop-env.sh slaves yarn-site.xml(resourcemanager)

https://blog.csdn.net/u012841977/article/details/103057847

1 修改 core-site.xml
进入路径 /usr/local/hadoop-2.10.0/etc/hadoop
表示hdfs基本路径,默认端口9000
<configuration>
		   <property>
				<name>fs.defaultFS</name>
				<value>hdfs://master:9000</value>
		   </property>
		   <property>
			  <name>hadoop.tmp.dir</name>
			  <value>/usr/local/hadoop/tmp</value>
		   </property>
		</configuration>
2 修改 hdfs-site.xml
dfs.replication:数据库备份数量,不能大于DataNode数量
	dfs.datanode.data.dir:datanode存储数据地方
	dfs.namenode.data.dir:namenode存储数据地方
		 <configuration>
		   <property>
			   <name>dfs.replication</name>
			   <value>1</value>
		   </property>
		   <property>
				<name>dfs.datanode.data.dir</name>
				<value>/usr/local/hdfs/name</value>
		   </property>
		   <property>
				<name>dfs.namenode.data.dir</name>
				<value>/usr/local/hdfs/data</value>
		   </property>
		</configuration>
3 修改 yarn-site.xml
<configuration>
		<property>
			<name>yarn.nodemanager.aux-services</name>
			<value>mapreduce_shuffle</value>
		</property>
		
		<property>
		<name>yarn.resourcemanager.hostname</name>
		<!-- 自己的ip端口默认 -->
		<value>master</value>
		<!---以下可不配置---!>
		</property>
		
		<property>
			 <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
			 <value>org.apache.hadoop.mapred.ShuffleHandler</value>
		</property>
		
		<property>
			<name>yarn.log-aggregation-enable</name>
			<value>true</value>
		</property>
	</configuration>
4 hadoop-env.sh
修改对应行为 :
export JAVA_HOME=/usr/local/java
5 `vim slaves`(没有则创建新文件)
将里面的localhost删除,添加如下内容:(指定从节点datanode)
slave1
slave2
6 mapred-site.xml 指定yarn资源调度
<configuration>
      <property>
       <name>mapreduce.framework.name</name>
       <value>yarn</value>
	</property>
</configuration>

修改环境变量: vim /etc/profile
使修改后环境变量生效:source /etc/profile

hadoop目录下的 etc
打开从节点列表配置文件/etc/hadoop/,创建文件slaves加入从节点的主机名
该文件看起来如下所示。

slave1
slave2

同步master的文件到slave节点:

scp -r  /usr/local/hadoop  slave1:/usr/local/
scp -r  /usr/local/hadoop  slave2:/usr/local/

初次启动前主节点需要
hadoop -format namenode 或者 bin/hdfs namenode -format

进入到目录sbin(环境变量添加了sbin的,可以直接执行sh文件)
运行./start-dfs.sh,启动hdfs服务
运行./start-yarn.sh,启动yarn服务
在master 和 slave上运行 jps 可以看到 master启动了namenode 和secondarynamenode slave上启动了datanode

测试实例:

Make the HDFS directories required to execute MapReduce jobs:
  $ bin/hdfs dfs -mkdir /user
  $ bin/hdfs dfs -mkdir /user/<username>
  
Copy the input files into the distributed filesystem:
  $ bin/hdfs dfs -mkdir input
  $ bin/hdfs dfs -put etc/hadoop/*.xml input
  
Run some of the examples provided:
  $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar grep input output 'dfs[a-z.]+'
  
Examine the output files: Copy the output files from the distributed filesystem to the local filesystem and examine them:
  $ bin/hdfs dfs -get output output
  $ cat output/*
or

View the output files on the distributed filesystem:

  $ bin/hdfs dfs -cat output/*
When you’re done, stop the daemons with:

  $ sbin/stop-dfs.sh

遇到的问题

启动警告:
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.hadoop.security.authentication.util.KerberosUtil (file:/usr/local/hadoop/share/hadoop/common/lib/hadoop-auth-2.10.0.jar) to method sun.security.krb5.Config.getInstance()
WARNING: Please consider reporting this to the maintainers of org.apache.hadoop.security.authentication.util.KerberosUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Starting namenodes on [master]
master: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-master.out
master: WARNING: An illegal reflective access operation has occurred
master: WARNING: Illegal reflective access by org.apache.hadoop.security.authentication.util.KerberosUtil (file:/usr/local/hadoop/share/hadoop/common/lib/hadoop-auth-2.10.0.jar) to method sun.security.krb5.Config.getInstance()
master: WARNING: Please consider reporting this to the maintainers of org.apache.hadoop.security.authentication.util.KerberosUtil
master: WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
master: WARNING: All illegal access operations will be denied in a future release

网上查询解释说jdk版本太高 : 配置版本jdk13
受不了这一行行的了 换jdk8
hint:搭建的环境含有一台namenode节点,两台为datanode节点;通过访问namenode节点来得知数据在datanode上的存储;

安装关系型数据库MySQL(主节点)

Hadoop中的一些组件如Hive、Sqoop、Hue或Oozie需要关系型数据库存储一些辅助信息才能正常运行,如Hive需要将元数据(metadata)存储在关系型数据库中。本节以MySQL为例。

使用yum命令安装MySQL软件包。

yum install mysql-server

使用systemctl enable命令配置MySQL服务在系统启动时自动启动。

systemctl enable mysqld

使用systemctl start命令启动MySQL服务。

systemctl start mysqld

查找mysql目录 whereis mysql
查看mysql版本 mysql -V
登录到mysql mysql -u[root] -p[password]

安装zookeeper-3.5.8(所有节点)

hint : 3.5.5之后的版本下载带bin 可以直接使用,避免很多麻烦,具体差异可看官网 (来自重装的痛苦)
安装解压.tar.gz
进入目录:cd /root/zookeeper/conf

cp zoo_sample.cfg zoo.cfg
  1. 修改zoo.cfg文件:
    设置文件目录和日志目录; server.0/1/2表示分别在三台机器上分别安装zookeeper服务
	tickTime=2000
	initLimit=10
	syncLimit=5
	dataDir=/usr/local/zookeeper/data
	dataLogDir=/usr/local/zookeeper/log
	clientPort=2181
	server.0=master:8880:7770
	server.1=slave1:8881:7771
	server.2=slave2:8882:7772

出错可尝试动态配置:

https://blog.csdn.net/u014630623/article/details/103695314

  1. master节点配置好的文件分发到slave节点
	scp -r /usr/local/zookeeper slave1:/usr/local/
	scp -r /usr/local/zookeeper slave2:/usr/local/
  1. 在三台机器上新增myid文件
    进入/root/zookeeper/data 路径,分别创建文件输入0 1 2
    存放的标识本台服务器的文件是整个zk集群用来发现彼此的一个重要标识
    在master机器上 vim myid 输入 0
    在slave1机器上 vim myid 输入 1
    在slave2机器上 vim myid 输入 2

  2. 启动(每个节点都需要启动 关闭防火墙(所有节点))!

	bin/zkServer.sh start 
	bin/zkServer.sh status 
	bin/zkServer.sh stop 

jps进程 显示含有 QuorumPeerMain
bin/zkServer.sh status 会有leader follower

遇到的问题

Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port not found in static config file. Looking in dynamic config file.
Client port found: 2181. Client address: localhost.
Error contacting service. It is probably not running.

记得关闭防火墙再启动zookeeper…

zookeeper基础知识

#事务ID ZooKeeper 状态的每次变化都接收一个 ZXID(ZooKeeper 事务 id)形式的标记。ZXID 是一个 64 位的数字,由 Leader 统一分配,全局唯一,不断递增。ZXID 展示了所有的ZooKeeper 的变更顺序。每次变更会有一个唯一的
zxid,如果 zxid1 小于 zxid2 说明 zxid1 在 zxid2 之前发生。
#Zookeeper 集群初始化启动时 Leader 选举(为何总是第二台机器被选择为leader) 若进行 Leader 选举,则至少需要两台机器,这里选取 3 台机器组成的服务器集群为例。初始化启动期间 Leader 选举流程如下图所示。 这里写图片描述

在集群初始化阶段,当有一台服务器 ZK1 启动时,其单独无法进行和完成 Leader 选举,当第二台服务器 ZK2
启动时,此时两台机器可以相互通信,每台机器都试图找到 Leader,于是进入 Leader 选举过程。选举过程开始,过程如下:

(1) 每个Server发出一个投票。由于是初始情况,ZK1 和 ZK2 都会将自己作为 Leader
服务器来进行投票,每次投票会包含所推举的服务器的 myid 和 ZXID,使用(myid, ZXID)来表示,此时 ZK1 的投票为(1,
0),ZK2 的投票为(2, 0),然后各自将这个投票发给集群中其他机器。

(2) 接受来自各个服务器的投票。集群的每个服务器收到投票后,首先判断该投票的有效性,如检查是否是本轮投票、是否来自 LOOKING
状态的服务器。

(3) 处理投票。针对每一个投票,服务器都需要将别人的投票和自己的投票进行比较,规则如下

优先检查 ZXID。ZXID 比较大的服务器优先作为 Leader。 如果 ZXID 相同,那么就比较 myid。myid
较大的服务器作为Leader服务器。 对于 ZK1 而言,它的投票是(1, 0),接收 ZK2 的投票为(2, 0),首先会比较两者的
ZXID,均为 0,再比较 myid,此时 ZK2 的 myid 最大,于是 ZK2 胜。ZK1 更新自己的投票为(2,
0),并将投票重新发送给 ZK2。   (4)
统计投票。每次投票后,服务器都会统计投票信息,判断是否已经有过半机器接受到相同的投票信息,对于 ZK1、ZK2
而言,都统计出集群中已经有两台机器接受了(2, 0)的投票信息,此时便认为已经选出 ZK2 作为Leader。

(5) 改变服务器状态。一旦确定了 Leader,每个服务器就会更新自己的状态,如果是Follower,那么就变更为
FOLLOWING,如果是 Leader,就变更为 LEADING。当新的 Zookeeper 节点 ZK3 启动时,发现已经有
Leader 了,不再选举,直接将直接的状态从 LOOKING 改为 FOLLOWING。

#Zookeeper 集群运行期间 Leader 重新选 在 Zookeeper 运行期间,如果 Leader 节点挂了,那么整个 Zookeeper 集群将暂停对外服务,进入新一轮Leader选举。假设正在运行的有 ZK1、ZK2、ZK3 三台服务器,当前 Leader
是 ZK2,若某一时刻 Leader 挂了,此时便开始 Leader 选举。选举过程如下图所示。 这里写图片描述

(1) 变更状态。Leader 挂后,余下的非 Observer 服务器都会讲自己的服务器状态变更为 LOOKING,然后开始进入
Leader 选举过程。

(2) 每个Server会发出一个投票。在运行期间,每个服务器上的 ZXID 可能不同,此时假定 ZK1 的 ZXID 为 124,ZK3
的 ZXID 为 123;在第一轮投票中,ZK1 和 ZK3 都会投自己,产生投票(1, 124),(3,
123),然后各自将投票发送给集群中所有机器。

(3) 接收来自各个服务器的投票。与启动时过程相同。

(4) 处理投票。与启动时过程相同,由于 ZK1 事务 ID 大,ZK1 将会成为 Leader。

(5) 统计投票。与启动时过程相同。

(6) 改变服务器的状态。与启动时过程相同。

安装spark3.0.1(所有节点)

1. 解压文件
tar -zxvf *.tgz

2. 配置slaves
进入路径 /usr/local/spark/conf
复制文件 cp slaves.template slaves
修改文件 vim slaves,  输入 slave1 slave2

3. 配置spark-env.sh
复制文件  cp spark-env.sh.template  spark-env.sh
修改文件  vim spark-env.sh , 输入$JAVA_HOME
  export JAVA_HOME=/usr/local/jdk-13

4.master节点配置好的文件分发到slave节点
	scp -r /usr/local/spark/ slave1:/usr/local/
	scp -r /usr/local/spark/ slave2:/usr/local/

5. 配置环境变量
  Spark安装路径 /usr/local/spark/
  vim  /etc/profile
  source  /etc/profile
  
6. web端打开spark监控窗口
 启动命令在sbin目录下 start-all.sh 启动所有主从结点
 jps存在worker或master进程
 http://master:8080/  
 
7. 运行实例
bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://master:7077 examples/jars/spark-examples_2.12-3.0.1.jar

遇到的问题

输出结果中有:
21/03/19 23:12:11 INFO DAGScheduler: Job 0 is finished. Cancelling potential speculative or zombie tasks for this job
21/03/19 23:12:11 INFO TaskSchedulerImpl: Killing all running tasks in stage 0: Stage finished
21/03/19 23:12:11 INFO DAGScheduler: Job 0 finished: reduce at SparkPi.scala:38, took 2.074040 s
Pi is roughly 3.1448957244786224
ERROR TransportRequestHandler: Error while invoking RpcHandler#receive() for one-way message.

查询后大部分说是资源问题,因为不影响结果的输出,所以暂时没有处理

1、这个可能是一个资源问题,应该给任务分配更多的 cores 和Executors,并且分配更多的内存。并且需要给RDD分配更多的分区
2、在配置资源中加入这句话也许能解决你的问题:–conf spark.dynamicAllocation.enabled=false

hint:特别注意启动程序之间的冲突,hadoop和spark具有相同的启动命令,注意环境变量的设置和命令的运行,可指定当前路径下的文件执行.

安装hive-2.3.7

  1. 解压hive安装包 tar -zxvf apache-hive-2.3.3-bin.tar.gz

  2. 创建配置文件hive-site.xml
    在 /root/hive/apache-hive-2.3.3-bin/conf 路径下新建配置文件hive-site.xml


 	
          javax.jdo.option.ConnectionURL</name>
          jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true</value>
          JDBC connect string for a JDBC metastore</description>    
</property>   
 
         javax.jdo.option.ConnectionDriverName</name> 
          com.mysql.jdbc.Driver</value> 
          Driver class name for a JDBC metastore</description>     
</property>               
 
           javax.jdo.option.ConnectionUserName</name>
           root</value>	
           username to use against metastore database</description>
</property>
  
           javax.jdo.option.ConnectionPassword</name>
           200425</value>
           password to use against metastore database</description>  
</property>    
         
            hive.metastore.warehouse.dir</name>  
            /usr/local/hive/warehouse</value>  
       </property>
       
            hbase.zookeeper.quorum</name>
            master,slave1,slave2</value>
       </property>
</configuration>
  1. 上传jdk1.8对应驱动包
    上传至/usr/local/hive/lib

  2. MySQL作为元数据管理,初始化配置
    schematool -dbType mysql -initSchema

初始化设置成功

Metastore connection URL:        jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true
Metastore Connection Driver :    com.mysql.jdbc.Driver
Metastore connection User:       root
Starting metastore schema initialization to 2.3.0
Initialization script hive-schema-2.3.0.mysql.sql
Initialization script completed
schemaTool completed

遇到的问题

错误:
org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.
Underlying cause: java.sql.SQLException : null,  message from server: "Host 'master' is not allowed to connect to this MySQL server"
SQL Error code: 1130
Use --verbose for detailed stacktrace.

*** schemaTool failed ***
解决方法:
配置mysql连接权限

  1. 连接mysql
    mysql -u root -p
  2. 进入mysql数据库
    use mysql;
  3. 查看当前允许访问的主机 发现没有当前主机master
    修改user表
    (推荐方法)
    添加一条:
    grant all privileges on . to ‘root’@‘master’ identified by ‘123456’ with grant option;
    (hint:本地mysql连接到linux的mysql)
    首先要给本地ip赋权
    grant all privileges on . to ‘root’@‘ip’ identified by ‘123456’ with grant option;
    然后在本地mysql用root用户及密码登录

安装hbase2.3.3

  1. 解压hbase安装包 tar -zxvf hbase-2.3.3-bin.tar.gz

  2. 修改 hbase-site.xml 配置
    进入 /usr/local/hbase/conf 路径
    hbase.rootdir 是hbase数据在hdfs上存储路径
    hbase.cluster.distributed 分布式存储
    hbase.zookeeper.quorum 使用zookeeper管理


<!--配置zk本地数据存放目录--!>
 
hbase.zookeeper.property.dataDir</name>
/home/centos/hbase/zk</value>
 </property>
 
hbase.rootdir</name>
hdfs://master:9000</value>
 </property>
 
hbase.cluster.distributed</name>
true</value>
 </property>
 
hbase.zookeeper.quorum</name>
master,slave1,slave2</value>
 </property>
</configuration>
  1. 修改 hbase-env.sh 配置
    进入 /usr/local/hbase/conf 路径
export JAVA_HOME=/usr/local/java
export HBASE_CLASSPATH=/usr/local/hadoop/etc/hadoop
export HBASE_MANAGES_ZK=false
  1. 修改regionservers 配置
    进入 /usr/local/hbase/conf 路径
    vim regionservers
slave1
slave2
  1. 将master配置拷贝到slave
scp -r /usr/local/hbase slave1:/usr/local/
scp -r /usr/local/hbase slave2:/usr/local/
  1. 配置hbase环境变量
    vim /etc/profile
    source /etc/profile

  2. 启动hbase
    先需要启动hdfs和zookeeper
    start-dfs.sh(主节点)
    zkServer.sh start(所有节点 需要关闭防火墙)
    start-hbase.sh(所有节点 需要关闭防火墙)
    访问hbase的web监控 http://192.168.43.249:16010

    hbase shell
    

    正确显示:

    master:6178 Jps
    8352 SecondaryNameNode
    9889 HMaster
    10056 Jps
    8510 QuorumPeerMain
    8143 NameNode
    
    slave:
    9030 HRegionServer
    8811 DataNode
    8942 QuorumPeerMain
    9119 Jps
    

遇到的问题

启动hbase出错:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hbase/lib/client-facing-thirdparty/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
running master, logging to /usr/local/hbase/logs/hbase-root-master-master.out
slave1: running regionserver, logging to /usr/local/hbase/bin/../logs/hbase-root-regionserver-slave1.out
slave2: running regionserver, logging to /usr/local/hbase/bin/../logs/hbase-root-regionserver-slave2.out

解决方法:

删除冲突的jar包
不是有效标识,把等号左右的空格去掉就好了

小插曲:

启动namenode失败 secondarynamenode存在
删除所有的tmp和logs
hadoop namenode -format
再重新启动dfs

初始化千万不要多次使用 只有在最开始部署时初始化一次就好 血的教训

启动HBASE之后会自动结束进程:

检查conf/zoo.cfg中的配置文件,发现多了一个pid,该文件为上次暴力关闭电脑,未关闭zk导致的。
结论:服务未正常退出,删除该zookeeper_server.pid即可

你可能感兴趣的:(学习笔记,centos集群配置,hadoop,spark,hbase)