基于hadoop集群的Hive1.2.1、Hbase1.2.2、Zookeeper3.4.8完全分布式安装

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 写在前边的话:        hadoop2.7完全分布式安装请参考:点击阅读,继任该篇博客之后,诞生了下面的这一篇博客        基本环境:                Hadoop 2.

写在前边的话:

       hadoop2.7完全分布式安装请参考:点击阅读,继任该篇博客之后,诞生了下面的这一篇博客

       基本环境:

               Hadoop 2.7

               Java 1.7.0_51

               CentOS 6.5

       预安装:

               Hive 1.2.1               下载地址

               Zookeeper 3.4.8     下载地址

               Hbase 1.2.2            下载地址  

一:Hive的分布式安装(基于Mysql)

    Hive的伪分布安装请参考 :点击阅读

    Hive基于Mysql的伪分布部署轻参考:点击阅读

    Hive的完全分布式安装的前提安装Mysql数据库,CentOS 6.5下安装Mysql请参考之前的一篇博客:点击阅读

    疑问解答1:Hive 是否需要每个datanode都安装?

          Hive的安装其实是有两部分组成,分别是Server端和Client端,所谓的服务端就是Hive管理Meta的那个Hive,服务端可以安装在任意节点上,可以是NameNode,也可以是DataNode,至于那个节点做Hive的服务端,由自己决定,不过在Hadoop的HA环境里,我想在两个NameNode里都装成Hive的Server,并且hive.metastore.warehouse.dir配置成hdfs://****,这样其他节点安装的Hive就都是客户端了,并且hive.metastore.uris值可以指向这两个NameNode的Ip

    疑问解答2:Hive配置中主要属性都是什么意思?

           hive.metastore.uris:指定hive元数据访问路径,如果为空则是本地模式,否则为远程模式

           hive.metastore.warehouse.dir:(HDFS上的)数据目录,可以在3个地方保存

           hive.exec.scratchdir:(HDFS上的)临时文件目录

           hive.metastore.warehouse.dir默认值是/user/hive/warehouse

           hive.exec.scratchdir默认值是/tmp/hive-${user.name}

    安装:

            1:在Mysql中创建hive用户,并赋予足够的权限

<span style="font-size:14px;">[master@master1 hive]$ mysql -uroot -p
Enter password: 
   ......此处省略部分日志......
mysql> <u>create user 'hive' identified by 'hive';</u>
Query OK, 0 rows affected (0.05 sec)

mysql> <u>grant all privileges on *.* to 'hive' with grant option;</u>
Query OK, 0 rows affected (0.00 sec)

mysql> <u>flush privileges;</u>
Query OK, 0 rows affected (0.00 sec)
</span>

            2:测试hive能否正常连接Mysql,并创建hive数据库

                 此时报错如下:ERROR 1045 (28000): Access denied for user 'hive'@'localhost' (using password: YES)

                 解决办法:重新以root用户登录mysql,删除msyql数据库下user表中为空的记录

<span style="font-size:14px;">mysql> delete from user where user is null;
Query OK, 0 rows affected (0.00 sec)

mysql> delete from user where user='';
Query OK, 1 row affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
</span>
                 以hive用户登录,创建hive数据库

<span style="font-size:14px;">[master@master1 opt]$ mysql -uhive -p
Enter password: 
....省略....
mysql> create database hive;
Query OK, 1 row affected (0.00 sec)

mysql> use hive;
Database changed
mysql> show tables;
Empty set (0.00 sec)
</span>

            3:解压缩hive到指定目录

                 我这里使用的是/opt/  :sudo tar -zxvf /home/master/桌面/apache-hive-1.2.1-bin.tar.gz -C /opt/

                 重命名为hive:sudo mv apache-hive-1.2.1-bin hive

            4:下载Mysql驱动程序到 hive目录下的lib目录

                  sudo cp /home/master/桌面/mysql-connector-java-5.1.39-bin.jar /opt/hive/lib/

            5:修改环境变量将hive加入到path

                  sudo vim /etc/profile

                  #hive
                  export HIVE_HOME=/opt/hive
                  export PATH=$PATH:$HIVE_HOME/bin

           6:修改hive-env.sh

                [master@master1 conf]$ sudo cp hive-env.sh.template hive-env.sh

           7:修改hive-site.xml

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
  <description>Driver class name for a JDBC metastore</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hive</value>
  <description>username to use against metastore database</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>hive</value>
  <description>password to use against metastore database</description>
</property>

          8:启动hadoop,测试hive

               [master@master1 hadoop]$ sbin/start-all.sh

               启动hiev报错

                    Exception in thread "main" java.lang.RuntimeException: Hive metastore database is not initialized. Please    use schematool (e.g. ./schematool -initSchema -dbType ...) to create the schema. If needed, don't forget to include the option to auto-create the underlying database in your JDBC connection string (e.g. ?createDatabaseIfNotExist=true for mysql)

              愿意:没有初始化元数据

              解决办法:执行 bin/schematool -initSchema -dbType mysql

             再次启动hive:bin/hive,报错:

                       Exception in thread "main" java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D

              原因:路径不对

              解决办法:将含有system:java.io.tmpdir的配置项改为/opt/hive/iotmp (前提是你已经建立了这样一个文件夹)

              再次启动hive报错:

                     Exception in thread "main" java.lang.RuntimeException: java.io.IOException: 权限不够

              解决办法:[master@master1 hive]$ sudo chmod 777 iotmp/

              再次启动: yes!!!

          9:配置hive的web访问页面

               hive1.2.1 lib目录下不带hwi文件,所以需要我们自己打包,下载apache-hive-1.2.1-src.bin.tar 解压,进入hwi 目录执行:

               jar cvfM0 hive-hwi-1.2.1.war -C web/ .

               并将打好的war包cp到hive/lib目录下,此时仍然不能访问 hive的web界面,出现错误:

               NO JSP Support for /hwi, did not find org.apache.jasper.servlet.JspServlet

               解决办法:下载以下jar包,放到hive/lib目录下(点击下载

               commons-el-1.0.jar

               jasper-compiler.jar

               jasper-runtime.jar

               toos.jar(java/lib 目录下的一个包)

               再次启动 OK!

                

       10、hiveserver2的配置使用

              http://www.tuicool.com/articles/Bbqaea

              参考网上的文章进行配置发现我的hiveserver2一直启动不了,每当执行bin/hive --service hiveserver2 时总是卡在那里不动,折腾了大半天也一直没有找到错误,就先这样吧,各位博友大家如果有什么好的意见欢迎留言

二:Zoookeeper的分布式安装

     1:部署说明

           ZK官网建议安装在至少3台机器上,故这里将ZK分别安装三台机器组成的集群中

     2:解压到指定目录/opt

          sudo tar -zxvf /home/master/桌面/zookeeper-3.4.8.tar.gz -C /opt/

          重命名:mv zookeeper-3.4.8/ zookeeper

     3:设置myid

           在dataDir指定的数据目录(/opt/zookeeper/data)下,创建文件myid,文件内容为一个正整数值,用来唯一标识当前机器,因此不同机器的数值不能相同,建议从1开始递增标识,以方便记忆和管理。

          IP                                       标识数值
          192.168.48.130                  1
          192.168.48.131                  2
          192.168.48.132                  3

     4:修改conf/zoo.cfg

           tickTime=2000

           dataDir=/opt/zookeeper/data
           clientPort=2181
           initLimit=5
           syncLimit=2
           server.1=master1:2888:3888 
           server.2=slave1:2888:3888
           server.3=slave2:2888:3888
           以上内容的配置,参照了ZooKeeper的官方文档:zookeeperStarted.html。server.X用来配置ZooKeeper集群中的各节点,并建议X的值和myid保持一致。
           端口2181用于监听客户端的连接,端口2888用于Leader监听Follower的连接,而3888则用于Leader选举。
           scp将 zoo.cfg 复制到另外两台机器上
                    scp -r zookeeper/  slave1:/opt/ 
                    scp -r zookeeper/  slave2:/opt/ 

     5:启动zk

          每台机器上执行:[master@master1 zookeeper]$  sudo bin/zkServer.sh start

          我们可以使用       sudo bin/zkServer.sh status 查看状态

                                     sudo bin/zkServer.sh stop    停止服务

     6:遇到的问题

          [master@master1 zookeeper]$  sudo bin/zkServer.sh status
          ZooKeeper JMX enabled by default
          Using config: /opt/zookeeper/bin/../conf/zoo.cfg
          Error contacting service. It is probably not running.

          解决办法:

          查看 zookeeper.out 可知是权限问题

          在每台机器下给 data ,data/zookeeper_server.pid,zookeeper.out 777 权限即可

     7:注意事项

          由于zkServer必须三台都启动后才选择leader和follower,故刚开始会出现都是Error contacting service. It is probably not running.的情况

     8:验证如下

          
          

         

三:Hbase的分布式安装

     1:部署说明

           基于hadoop 2.7 ,ZK 3.4.8部署

     2:解压hbase 1.2.2到指定目录

tar -zxvf hbase-1.2.2-bin.tar.gz -C /opt/hbase
mv /opt/hbase-1.2.2 /opt/hbase # 重命名

     3:配置环境变量

           sudo vim /etc/profile  

           加入:

#hbase
export HBASE_HOME=/opt/hbase
export PATH=$HBASE_HOME/bin:$PATH

     4:配置hbase-env.sh

export JAVA_HOME=/opt/java
export HBASE_CLASSPATH=/opt/hbase/conf
# 此配置信息,设置由zk集群管理,故为false
export HBASE_MANAGES_ZK=false
export HBASE_HOME=/opt/hbase
export HADOOP_HOME=/oopt/hadoop
#Hbase日志目录
export HBASE_LOG_DIR=/opt/hbase/logs

     5:配置hbase-site.xml

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://192.168.48.130:9000/hbase</value>
  </property>
  <property>
     <name>hbase.cluster.distributed</name>
     <value>true</value>
  </property>
  <property>
      <name>hbase.master</name>
      <value>master1:60000</value>
  </property>
   <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/opt/zookeeper</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>master1,slave1,slave2</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
  </property>
</configuration>

     6:配置regionservers

         清空该文件,加入集群的节点,例如我这里是

         slave1

         slave2

     7:将hbase scp到节点

           sudo scp /opt/hbase slave1:/opt/hbase
           sudo scp /opt/hbase slave1:/opt/hbase

     8:启动

           启动之前得保证ZK和hadoop已经启动

               [master@master1 hbase]$ bin/start-hbase.sh

      9:错误记录

           启动时会报出权限不足的问题,我这里的解决办法是给每个节点的hbase目录赋予777的权限,但这并不是安全的,如果大家有什么好的办法,可以留下

      最终jps效果如下:

           

      10:Web界面访问

            貌似从1.0版本以后端口改为16010端口了,所以web访问为:http://192.168.48.130:16010/


四:知识点补充和资料参考

    1:知识点补充

         scp文件: scp name slave1:/path

         scp文件夹:scp -r name slave1:/path

    2:参考资料

         彻底弄清Hive安装过程中的几个疑问点

         hbase0.96与hive0.12整合高可靠文档及问题总结

    3:一些疑问

         这里并不需要将Hive拷贝到各个节点,是因为,这里Hive的底层数据存储为HDFS,而HDFS本身就是分布式的,所以不需要,当然这里也可以把Hive安装到slave节点上,但是出于方便和使用习惯,一般都部署在namenode上


大数据全新视频教程,博主亲自整理,点击查看

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
5天前
|
Prometheus 监控 Cloud Native
在 HBase 集群中,Prometheus 通常监控哪些类型的性能指标?
在 HBase 集群中,Prometheus 监控关注的核心指标包括 Master 和 RegionServer 的进程存在性、RPC 请求数、JVM 内存使用率、磁盘和网络错误、延迟和吞吐量、资源利用率及 JVM 使用信息。通过 Grafana 可视化和告警规则,帮助管理员实时监控集群性能和健康状况。
|
1月前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
69 4
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
32 3
|
1月前
|
分布式计算 Hadoop Shell
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
56 3
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-34 HBase 安装部署 单节点配置 hbase-env hbase-site 超详细图文 附带配置文件
Hadoop-34 HBase 安装部署 单节点配置 hbase-env hbase-site 超详细图文 附带配置文件
70 2
|
29天前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
3月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
106 2
基于Redis的高可用分布式锁——RedLock
|
3月前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
|
5天前
|
NoSQL Redis
Redis分布式锁如何实现 ?
Redis分布式锁通过SETNX指令实现,确保仅在键不存在时设置值。此机制用于控制多个线程对共享资源的访问,避免并发冲突。然而,实际应用中需解决死锁、锁超时、归一化、可重入及阻塞等问题,以确保系统的稳定性和可靠性。解决方案包括设置锁超时、引入Watch Dog机制、使用ThreadLocal绑定加解锁操作、实现计数器支持可重入锁以及采用自旋锁思想处理阻塞请求。
38 16
|
1月前
|
缓存 NoSQL Java
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
56 3
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁