spring cloud 分布式Hadoop三部曲之HBase

背景:

mysql不适合存储非常巨大的数据量,不利于扩展,影响性能。(包括oracle数据库十分巨大)我们就需要考虑HBase作为存储工具。

HBase具有非常高的读写性能,支持无上限的数据存储容量

数据采集:Flume NG Logstash sqoop
数据存储:HDFS HBase Hive Kafka
数据分析:Hive MR Spark streaming SQL Storm
数据展示:Echarts Excel表格

HBase与传统关系数据库区别(列式数据与行式数据):

HBase适合大量插入同时又有读的情况,key-value,noSql

HBase是一种日志集数据库。它的存储方式,像日志文件一样。它是批量大量的写入到硬盘,通常以文件形式读写,读写速度取决于硬盘和机器的传输速度。oracle瓶颈是硬盘寻道时间。

HBase允许保存不同时间戳的版本。数据按时间排序,适合找出某人最近浏览记录,最近的N种等等

 Hbase的局限。只能做很简单的Key-value查询。它适合有高速插入,同时又有大量读的操作场景

Oracle是行式数据库,而Hbase是列式数据库。列式数据库的优势在于数据分析这种场景。数据分析与传统的OLTP的区别。数据分析,经常是以某个列作为查询条件,返回的结果也经常是某一些列,不是全部的列。在这种情况下,行式数据库反应的性能就很低效

HBase安装

下载 http://mirrors.hust.edu.cn/apache/hbase

将hbase-2.2.4-bin.tar放在linux /myfiles/hbase目录下,解压tar -zxvf hbase-2.2.4-bin.tar.gz

修改环境变量

vim /etc/profile

export HBASE_HOME=/myfiles/hbase/hbase-2.2.4
export PATH=$HBASE_HOME/bin:$PATH
#关闭自身zookeeper采用外部
export HBASE_MANAGES_ZK=false
export HBASE_PID_DIR=/myfiles/hbase/pids

source /etc/profile

修改/myfiles/hbase/hbase-2.2.4/conf/hbase-env.sh添加变量

export JAVA_HOME=/myfiles/java/jdk1.8.0_191
export HBASE_HOME=/myfiles/hbase/hbase-2.2.4
export PATH=$PATH:/myfiles/hbase/hbase-2.2.4/bin
export HBASE_MANAGES_ZK=false
在bin/confg目录下修改 vim hbase-site.xml
<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://cluster/hbase</value>
  </property>
  <!-- hadoop集群名称 -->
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>node01,node02,node03</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
  </property>
  <!--  是否是完全分布式 -->
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <!--  完全分布式式必须为false  -->
  <property>
    <name>hbase.unsafe.stream.capability.enforce</name>
    <value>false</value>
  </property>
  <!--  指定缓存文件存储的路径 -->
  <property>
     <name>hbase.tmp.dir</name>
     <value>/myfiles/hbase/data01/hbase/hbase_tmp</value>
  </property>
  <!--  指定Zookeeper数据存储的路径  -->
  <property>
     <name>hbase.zookeeper.property.dataDir</name>
     <value>/myfiles/hbase/data01/hbase/zookeeper_data</value>
  </property>
  <property>
     <name>hbase.master</name>
     <value>master:60000</value>
  </property>
</configuration>

注意!!!

将hostname 修改为对应ip

192.168.100.5

配置regionservers

修改文件: vim /home/hadoop/hbase/conf/regionservers。添加DataNode的IP或者机器名即可,这个文件把RegionServer的节点列了下来,内容为:

node02
node03

配置高可用

保证HBase集群的高可靠,HBase支持多backup设置。当active挂掉之后back可以自动接管HBase集群。

在/myfiles/hbase/hbase-2.2.4/conf目录下新增配置
backup-masters,在配置添加要备份的节点的hostname(比如:node02,node03)

vi backup-masters

node02
node03

在bin目录下 start-hbase.sh启动。

启动时候报错log4j冲突---目前我不需要解决也可以

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/hadoop/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/hadoop/hbase/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.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]

移除其中一个

mv /myfiles/hbase/hbase-2.2.4/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar /myfiles/hbase/hbase-2.2.4/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar.bak

报错:

java.lang.IllegalArgumentException: java.net.UnknownHostException:cluster

需要将hdfs-site.xml和core-site.xml,复制一份到/myfiles/hbase/hbase-2.2.4/conf

否则注册不到master上

报错

Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

针对启动hadoop的警告,需要将hadoop安装目录下的lib/native引入到环境变量中

export JAVA_LIBRAY_PATH=/myfiles/hadoop/hadoop-3.2.1/lib/native

在/myfiles/hbase/hbase-2.2.4/conf/hbase-env.sh 也一样添加

注意:在过程中遇到一直无法注册建议删除hdfs以及hbase目录重新安装

再次启动

hbase shell 进入命令页面说明安装成功

访问

http://192.168.100.5:16010/

Hbase物理迁移。

(首先保证mapReduce没有问题)

hbase org.apache.hadoop.hbase.mapreduce.Export 'todopool'  /back/hbase/todopool
导出到hdfs文件夹中

hbase org.apache.hadoop.hbase.mapreduce.Import 'todopool'  /back/hbase/todopool

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SpringCloudHadoop可以配合实现分布式网盘系统,SpringCloud可以提供支撑服务,比如服务注册,服务发现,负载均衡,Hadoop则可以构建分布式文件系统,用于存储和管理文件,这样就可以实现一个分布式网盘系统。 ### 回答2: 要实现分布式网盘,可以使用Spring CloudHadoop等技术来进行开发和搭建。 首先,使用Spring Cloud可以实现分布式的服务治理和微服务架构。可以使用Eureka作为服务注册与发现的中心,各个微服务将自身注册到Eureka服务器中,并通过Eureka来发现其他微服务的地址。通过使用Ribbon或Feign等负载均衡组件,可以实现对微服务的负载均衡和调用。此外,还可以使用Spring Cloud Config来统一管理配置文件,从而方便对系统进行配置和管理。 其次,使用Hadoop分布式文件系统HDFS来存储和管理网盘中的文件。HDFS的分布式特性可以将文件划分为多个块,并将这些块存储在不同的节点上,从而实现高可靠性和高性能的分布式文件存储。可以将HDFS作为网盘的底层文件系统,通过在Spring Cloud中调用HDFS提供的API,可以实现文件的上传、下载、删除和修改等功能。 在搭建分布式网盘时,可以使用Spring Cloud实现用户管理和权限控制等功能。可以通过使用Spring Security来实现用户认证和授权,保证只有合法用户可以访问网盘。可以在用户登录后,根据其身份和权限,通过HDFS提供的API来实现对文件的访问控制,例如只有拥有读权限的用户才能下载文件,只有拥有写权限的用户才能上传文件等。 此外,可以使用Spring Cloud的其他组件来实现更多的功能,例如使用Spring Cloud Stream来实现文件传输,使用Spring Cloud Task来实现定时清理和备份任务,使用Spring Cloud Sleuth来实现分布式链路追踪等。 总结来说,通过结合Spring CloudHadoop等技术,可以实现分布式网盘系统,从而实现文件的分布式存储、用户管理和权限控制等功能。 ### 回答3: 要实现分布式网盘,可以结合使用Spring CloudHadoop来完成。 首先,我们可以使用Spring Cloud来构建网盘的核心服务,包括用户管理、文件上传下载、文件管理等功能。通过Spring Cloud的微服务架构,可以将这些功能拆分为不同的服务,每个服务可以独立部署,并通过Spring Cloud的注册中心进行服务发现和管理。 接下来,我们可以使用Hadoop来存储和管理分布式网盘的文件。Hadoop提供了分布式文件系统HDFS,可以将大文件切分为小文件,然后分散存储在不同的HDFS节点上,实现文件的分布式存储和冗余备份。同时,Hadoop还提供了分布式计算框架MapReduce,可以用来处理大规模数据集。 在整合Spring CloudHadoop时,可以通过Spring Cloud的服务调用功能来实现文件的上传和下载。当用户上传文件时,可以将文件切分为小文件后,并使用Hadoop分布式文件系统HDFS进行存储。同时,可以使用Spring Cloud的负载均衡功能,将文件上传请求转发到不同的HDFS节点,实现负载均衡和高可用。 在文件的下载过程中,可以通过Spring Cloud将下载请求转发到对应的HDFS节点上,从而实现文件的并发下载。此外,还可以使用Hadoop的MapReduce进行文件的搜索和统计等操作,提供更多的网盘功能。 总之,结合使用Spring CloudHadoop,可以实现一个分布式网盘系统,具备高可用、分布式存储和计算等优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值