本文来自 网易云社区
最近为产品做了一次HBase的数据迁移操作,学习了一些相关的技术和实现方案。现整理出来,作为今后HBase数据迁移的参考。如有纰漏,欢迎指正。
1. 前期准备
1.1 确认集群使用的版本
源HBase集群(以下称旧集群)和目的HBase集群(以下称新集群)的版本可能并不是一致的,特别是其底层所使用的HDFS版本信息。譬如这样一个数据迁移场景:业务希望从低版本的HBase集群(0.94.x)迁移到当前稳定的HBase集群(1.2.x),因为新版本的HBase有新特性,Bug更少,稳定性和可运维行更优。理论上新版本会兼容老版本的API,但是如果彼此版本差距过大,可能会出现HDFS RPC版本不一致(一般来说是Protobuf的版本),那么集群之间的迁移就会因为彼此与对方的NameNode无法进行通信而无法进行。 这种情况下,需要先考虑升级低版本的HDFS。
1.2 确认集群是否开启Kerberos认证
这里会有三种可能情况:一是都未开启认证,二是都开启认证,三是一个开了,另一个没开。前两种情况按照正常的认证(或非认证)的配置操作即可,第三种情况则需要在开启了认证的集群上开启 ipc.client.fallback-to-simple-auth-allowed 参数,意即在使用Kerberos的方式访问非Kerberos的集群时,系统自动转换成简单认证,否则会出现认证问题。Kerberos的配置和使用本文不做展开。
1.3 确认操作账号的读写权限问题
要在不同的HBase集群之间做数据迁移,必然要涉及到不同集群的读写权限问题。HBase使用ACL来管理不同数据表的读写权限,在开启了Kerberos认证的环境下,还需要验证Kerberos;而HBase使用的HDFS自身也有一套类似的权限管理规则,当两个集群配置不同时(如部署账号不一致),极易出现冲突。在迁移前需要确认两个集群的管理员账号(HDFS和HBase账号)是否一致,如果不一致,需要开通权限。
1.4 开启YARN服务
数据迁移任务本质上是一个MapRedcue任务,故需要在一个集群上开启YARN服务。如何选择在哪个集群上开呢?建议是在新集群上开,因为旧集群上可能还需要继续跑线上业务,在上面起大量Map任务并把数据远程写入到新集群,会对线上业务带来较大的性能影响;而新集群较大可能是一个独立集群,尚没有业务运行,在其上运行Map任务通过网络从旧集群中拉数据到本地写入,性价比更高,且对线上业务的侵入性更低。
在HBase集群上配置YARN服务可以查阅其安装部署文档,这里不做展开。
1.5 确认数据迁移的SLA
数据迁移是否是在线迁移,即业务不能中断。若业务允许做离线迁移,可以先将该表Disable后再做迁移,然后在新集群上重新clone成新表即可;但若需要在线进行迁移,则需要提前新集群上生成对应的HBase表,开启ACL权限等操作,并让业务开启数据双写,确保两个集群的数据在迁移时刻之后的数据是一致的。因为数据迁移和后续的数据合并耗时都很长,如果不开启双写,是无法达到数据一致性要求的。所以大多数情况下,业务都是要求数据迁移以在线方式进行。
1.6 源集群开启Snapshot
HBase的Snapshot是从0.94.6之后才引入的特性,开启Snapshot特性需要开启 hbase.snapshot.enabled (默认已开启)。如果没有开启该特性,则需要重启服务以开启该特性;如果版本过低,就只能使用其他对业务影响较大的CopyTable/ExportTable(需要Disable表)才能操作。
2. 生成HBase表和Region
完成前期的验证和准备工作后,就可以在新集群中创建待迁移的目的表和域(以下称Region)了。 因为迁移过程中业务需要开启双写,所以目的表结构必须和源表是一致;同时源数据表可能已经存在多个Region了,那么目的表也必须提前规划好这些Region,以免双写期间出现Region数量不足出现热点或者Region内文件数过多频繁Compact导致线上业务出现性能问题。 这里详细说明下如何正确创建一个带有多个Region的表。
2.1 使用RegionSplitter生成表
如果新建一个自带多个Region的表,可以使用以下命令:
例1. 生成一个表 t1, 有30个region,且表有一个列族"d",则使用
bin/hbase org.apache.hadoop.hbase.util.RegionSplitter t1 UniformSplit -c 30 -f d
例2. 生成一个表 t2, 有10个region,有两个列族 d1,d2, 其起始rowkey是'0'
bin/hbase org.apache.hadoop.hbase.util.RegionSplitter t2 UniformSplit -c 10 -f d1:d2 --firstrow '0'
2.2 使用HBase Shell生成表
使用HBase shell中的create命令也可以直接生成多个Regions,前提是必须要指定split keys
例3. 生成一个表 t3,按照'10','20','30','40'为Regions的split keys
create 't3', 'f1', SPLITS => ['10', '20', '30', '40']
整个表划分成5个Region,其起始和结束key分别是 ['0','10'],['10','20'],['20','30'],['30','40'],['40',-]
2.3 将已有的表重新切分或合并
如果一个表的Region范围过大,可以使用split来将其切分成两个子Region
split 't1', '1'
split '110e80fecae753e848eaaa08843a3e87', '\x001'
同理,如果表的Region过于零散,可以使用merge_region来进行合并
hbase> merge_region 'ENCODED_REGIONNAME', 'ENCODED_REGIONNAME'
hbase> merge_region 'ENCODED_REGIONNAME', 'ENCODED_REGIONNAME', true
具体的操作命令用户可以自己查看HBase的相关文档来了解。
注: 在为迁移的目的表划分多个Region时,其StartEndKey最好和旧HBase集群中源表分布一致。这样后续文件加载时,不需要额外进行过多的拆分,可以节省载入时间。另外有一点需要说明,使用splitKey时,系统不支持Hex字符串。 如果想用HexString来作为自己Region的StartKey,则需要对HBase的客户端代码进行简单的修改。简单来说需要能支持Bytes.toBinaryString()方法, 但系统读取后都是直接用Byets.toBytes()方法。 具体的代码实现,可以私聊。
3. Snapshot机制与使用
HBase快照是一份指向多个HFile文件的元数据文件。在执行snapshot命令时,不会触发任何的HBase数据操作,所以这个命令非常高效。使用快照来恢复或克隆一个表也非常快,因为它只需要引用已有的HFile文件即可。所以使用Snapshot进行数据迁移的优势就是备份和拷贝数据对线上服务没有影响,或者影响极低。其流程如下:
执行snapshot命令时,Master会从自己管理的meta信息中,找到该表所在RegionServer,然后下发该命令到相应的一个或多个RegionServer(RS)
RS负责生成HFile文件引用,同时会获取其Region的HFile文件信息,将当前文件的大小写入到manifest文件中。
HFile文件是使用Append方式来添加的,所以某一个时刻的文件大小相当于记录了一份当前时刻的文件偏移量。 恢复时,系统也只会读到该偏移量的位置。 如果想再次对该表做快照,那么文件引用的偏移量会正确设置为当前HFile的大小。
Snapshot命令有一个skipFlush参数,设置为true时,会强制将RS的MemStore里内容刷到磁盘中,可能会造成RS短暂的中止服务。时间长短视内存中的数据量而定。 在这里我们不需要靠强制刷新出内存中的数据来保证数据完整性,理由如下:
如果我们使用的是停服迁移的方式,那么使用快照时内存中是没有数据写入的。
如果使用的双写迁移的方案,则快照时存在于内存中的那部分数据实际上会被双写到另外的集群中,同样不会有数据丢失的问题。
3.1 创建快照
hbase> snapshot 'sourceTable', 'snapshotName'
hbase> snapshot 'namespace:sourceTable', 'snapshotName', {SKIP_FLUSH => true}
3.2 查看快照
hbase> list_snapshots
hbase> list_snapshots 'abc.*'
3.3 克隆快照
hbase> clone_snapshot 'snapshotName', 'tableName'
hbase> clone_snapshot 'snapshotName', 'namespace:tableName'
生成snapshot后,可以通过hadoop的Shell命令来查看到对应的snapshot目录
bin/hadoop fs -ls /hbase/.hbase-snapshot/newSnapshot
Found 2 items
-rw-r--r-- 3 xxx xxx 35 2017-04-24 21:58 /hbase/.hbase-snapshot/newSnapshot/.snapshotinfo
-rw-r--r-- 3 xxx xxx 486 2017-04-24 21:58 /hbase/.hbase-snapshot/newSnapshot/data.manifest
4. 使用ExportSnapshot工具迁移快照数据
ExportSnapshot是HBase提供的Snapshot迁移工具,其使用方法见下图:
可以看出,这个工具的参数列表和HDFS的DistCp工具很类似。其简要流程如下:
首先通过HDFS的cp方法,将/.hbase-snapshot/newSnapshot目录拷贝至新集群上
然后将/hbase/data/下面的数据文件通过MapReduce的方式(DistCp)拷贝至 新集群的/hbase/archive/data/
最后检查snapshot相关文件的完整性
5. 数据合并方式
一旦数据迁移到了新集群,我们可以通过clone_snapshot 命令重新生成该表,如果业务是一个可以支持离线迁移的,那迁移工作也就算完成了。更多的情况是,业务开了双写,即老集群和新集群同时在更新数据,我们需要把迁移后的数据进行合并。这里有三种方法:
5.1. 使用Phoenix SQL导入
需要在新集群上开启Phoenix支持(如何安装Phoenix见相关文档)
假设双写的新表为A',A'表必须使用Phoenix的接口来创建。其使用方法与常规的SQL语法类似,但是要注意其splitKey的用法:
例1. 创建一个表t1,只有一个列族f1,有1个修饰字段body, splitKey为['a','b','c']
CREATE TABLE IF NOT EXISTS t1
( "id" char(10) not null primary key, "f1".body varchar)
DATA_BLOCK_ENCODING='NONE',VERSIONS=5,MAX_FILESIZE=2000000 split on ('a', 'b', 'c')
使用clone_snapshot命令将迁移的数据重新生成一个HBase表B,然后再使用Phoenix的DDL重新生成B表(和实际的表B不会冲突,Phoenix的元数据存在另外的目录下),最后使用UPSERT SELECT命令将B表中的数据插入到双写的A’表即可
UPSERT INTO A'("id","f1".body) SELECT "id","f1".body FROM B;
注: 使用Phoenix的问题在于,原来的业务模式需要做较大改动以适应新的JDBC访问HBase方式。
5.2. 使用MapReduce导入
使用MapReduce导入需要有YARN服务支持,同样需要先使用clone_snapshot命令将迁移的数据重新生成一个HBase表。
用户需要使用HBase的API从表中读取记录,然后插入到新的表,这个方法实际上就是上面Phoenix的底层实现。如果集群没有安装Phoenix插件,可以用这个方法。但这个方法的缺点也是显而易见,需要自己写代码来实现在一个Map中实现上述操作,且如何切分RowKey到各个Map任务中也是一个不小的难题。
5.3. 使用IncrementLoadHFile工具
顾名思义,这个工具可以实现往HBase表中添加HFile来实现数据的批量写入,其使用方法如下:
bin/hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles
usage: completebulkload /path/to/hfileoutputformat-output tablename
-Dcreate.table=no - can be used to avoid creation of table by this tool
Note: if you set this to 'no', then the target table must already exist in HBase
这个工具的使用说明很简单,只需要提供一个HFile文件所在的Hdfs路径名和所需要写入的HBase Table名即可。 例1. 将/tmp/hbase/archive/data/test/test/f8510124151cabf704bc02c9c7e687f6目录下的HFile文件加载到test:test表中
bin/hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles -Dcreate.table=no /tmp/hbase/archive/data/test/test/f8510124151cabf704bc02c9c7e687f6 test:test
其实现原理说明如下:
首先确认目录下的HFile文件是否合法,得到一个文件列表。
从列表中获取某一个HFile,获取文件的起始和结束rowKey
查找要导入到新表的各个Region,得到其StartEndKeys(每次都是重新重启)
根据HFile的startKey,判断该HFile应该插入的Region位置
以该HFile的起始rowkey所要插入的Region的EndKey将文件切成top和bottom两部分,将这2个文件加入到待加载的文件列表中
使用SecureBulkLoadHFile方法一次性批量加载这些文件,如果其中有文件加载失败,则方法失败,返回异常的文件列表。
将返回的异常文件,加入到循环加载的文件列表里。
继续重复2-7整个流程,直至完成加载或达到重试阈值而异常退出。
SecureLoadHFile的原理也很简单,它是一个原子操作,所以操作过程中会有短暂的卡顿。
检查待加载的HFiles是否来自多个列族,需要对多个列族同时加锁以保障一致性。
检查该次操作是否满足相关权限要求,同时也会将对应的HFile文件进行权限变更操作
完成HFile文件加载,新的HFile引用被加入到Region的StoreFile列表中。
对这块逻辑感兴趣的同学,可以自行查阅SecureBulkLoadEndpoint,HRegion,HStore等类。
关于如何减少批量加载的时间,有以下几点需要注意:
如果新集群上的regions的起始和结束rowkey分布正好和旧集群一致,那么使用批量加载HFile的方式可以最快的方式来合并到线上表中。否则就需要针对新的Region来拆分HFile。
调整hbase.hregion.max.filesize 参数,该参数用于控制一个Region下的最大HFile的文件大小,超过该值后,系统会强制拆分这个文件。新旧集群上这个参数配置可能会不一致,为了尽快完成加载,可以考虑将其设置成一致,或者新集群上的配置更大,这样也能减少加载时间
该工具默认的重试次数是10次,即一个Hfile如果拆分次数超过10次,就会放弃本次批量加载。 需要注意留意日志
6. 数据验证
HFile文件增量加载更新完毕之后,进行数据验证流程。因为数据量实在太大,不可能对两边的HBase表中的记录做一一比对,故可进行抽样验证。按照Snapshot和双写的机制来讲,数据可能有重复,但不可能存在丢失的情况。验证算法描述如下:
按照迁移过程中不同阶段,划分成不同的时间区域。 对于每一个时间区间,选一个子区间作为样本
选定旧集群中的A表,获取其Region信息,得到每个Region的起始rowkey
按照每个Region的起始rowkey, 顺序查找 N 条该区间中的rowkey记录
根据上一步拿到的rowkey到相应的测试表中(A')中查找是否能找到匹配的记录。
找到记录后,对比相应Column+Cell信息,能够都完全匹配即为一个匹配的记录(因为双写的原因,时间戳会有先后,故不判断时间戳。rowkey已能满足要求)
使用Java连接Kerberized HBase的需要的配置如下:
hbase-site.xml
fs.defaultFS
hdfs://test1.163.org:8020
hbase.rootdir
hdfs://test1.163.org:8020/hbase
hbase.zookeeper.quorum
test1.163.org,test2.163.org,test3.163.org
zookeeper.znode.parent
/hbase
hbase.cluster.distributed
true
hadoop.security.authorization
true
hadoop.security.authentication
kerberos
hbase.rpc.timeout
180000
hbase.client.operation.timeout
120000
hbase.security.authentication
kerberos
hbase.security.authorization
true
dfs.namenode.principal
hdfs/[email protected]
hbase.master.kerberos.principal
hbase/[email protected]
hbase.regionserver.kerberos.principal
hbase/[email protected]
hbase.client.scanner.caching
100000
认证模块的代码片段如下(仅作参考)
Configuration configuration = HBaseConfiguration.create();
configuration.addResource("hbase-site.xml");
UserGroupInformation.setConfiguration(configuration);
UserGroupInformation.loginUserFromKeytab("principal", "keytab.path");
TableName tableName = TableName.valueOf("hbase.table.name"));
Connection connection = ConnectionFactory.createConnection(configuration);
HTable table = (HTable) connection.getTable(tableName);
7. 事后操作
因为批量加载操作会对原HFile文件进行多次拷贝,拆分等操作,会消耗大量的HDFS存储资源和物理机磁盘空间。 在数据合并完成并验证后,可以清理掉这些临时结果。此外如果在加载过程中出现了较多的自动Region切分,也可在此时重新将小Region进行合并。 最后在新集群上专门为数据迁移开启的YARN服务也可以停掉了,减少对HBase服务的影响。
原文:HBase数据迁移实战
本文来自网易云社区,经作者金川授权发布。
了解 网易云 :
网易云官网:https://www.163yun.com
云创大会0元抢购早鸟票:https://yc.163yun.com
云产品全面促销5折起:https://www.163yun.com/activity/promotion
你可能感兴趣的:(大数据,HBase,网易云)
数据结构与算法中外部排序的详细剖析
数据结构与算法学习
网络 ai
数据结构与算法中外部排序的详细剖析关键词:外部排序、归并排序、多路归并、置换选择排序、败者树、磁盘I/O优化、大数据处理摘要:本文将深入探讨外部排序技术,这是处理大规模数据时不可或缺的算法。我们将从基本概念出发,逐步解析多路归并、置换选择排序等核心技术,并通过实际代码示例展示如何实现高效的外部排序。文章还将分析外部排序在现代大数据处理中的应用场景和优化策略。背景介绍目的和范围本文旨在全面介绍外部排
阿里云Flink:开启大数据实时处理新时代
云资源服务商
阿里云 大数据 云计算
走进阿里云Flink在大数据处理的广袤领域中,阿里云Flink犹如一颗璀璨的明星,占据着举足轻重的地位。随着数据量呈指数级增长,企业对数据处理的实时性、高效性和准确性提出了前所未有的挑战。传统的数据处理方式逐渐难以满足这些严苛的需求,而阿里云Flink凭借其卓越的特性和强大的功能,成为众多企业实现数据价值挖掘与业务创新的关键技术。它不仅继承了开源Flink的优秀基因,还融入了阿里云自主研发的创新技
java毕业设计-基于java的电商网购平台,网购商城管理系统(源码+LW+部署文档+全bao+远程调试+代码讲解等)
程序猿八哥
spring boot vue jave java 课程设计 开发语言
博主介绍:✌️码农一枚,专注于大学生项目实战开发、讲解和毕业文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌️技术范围::小程序、SpringBoot、SSM、JSP、Vue、PHP、Java、python、爬虫、数据可视化、大数据、物联网、机器学习等设计与开发。主要内容:免费功能设计,开题报告、任务书、全b
Python机器学习实战——逻辑回归(附完整代码和结果)
小白熊XBX
机器学习 机器学习 python 逻辑回归
Python机器学习实战——逻辑回归(附完整代码和结果)关于作者作者:小白熊作者简介:精通c#、Halcon、Python、Matlab,擅长机器视觉、机器学习、深度学习、数字图像处理、工业检测识别定位、用户界面设计、目标检测、图像分类、姿态识别、人脸识别、语义分割、路径规划、智能优化算法、大数据分析、各类算法融合创新等等。联系邮箱:
[email protected] 科研辅导、知识付费答疑、个性化定制
计算机毕业设计Python知识图谱中华古诗词可视化 古诗词情感分析 古诗词智能问答系统 AI大模型自动写诗 大数据毕业设计(源码+LW文档+PPT+讲解)
B站计算机毕业设计大学
大数据毕业设计 人工智能 课程设计 知识图谱 python 大数据 深度学习 爬虫
温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!信息安全/网络安全大模型、大数据、深度学习领域中科院硕士在读,所有源码均一手开发!感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人介绍资料《Python知识图谱中华古诗
计算机毕业设计Python知识图谱中华古诗词可视化 古诗词情感分析 古诗词智能问答系统 AI大模型自动写诗 大数据毕业设计(源码+LW文档+PPT+讲解)
温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!信息安全/网络安全大模型、大数据、深度学习领域中科院硕士在读,所有源码均一手开发!感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人介绍资料Python知识图谱中华古诗词
自动驾驶技术研发适用Infortrend普安存储IEC平台
Infortrend普安存储IEC私有云平台,轻松高效应用无人驾驶技术自动驾驶汽车(例如自动驾驶出租车、无人驾驶公交)和无人驾驶飞行器(UAV)依靠摄像头、物联网传感器、雷达、GPS采集的实时数据瞬间做出决策。自动驾驶系统作为核心部分,不间断分析环境条件,应对潜在风险,确保乘客和货物运输安全。Autopilot应用程序在开发和模拟中,大数据、AI(人工智能)、ML(机器学习)等技术能否高速发挥作用
大数据系列 | 日志数据采集工具Filebeat的架构分析及应用
降世神童
大数据技术专栏 大数据 架构
大数据系列|日志数据采集工具Filebeat的架构分析及应用1.Filebeat的由来2.Filebeat原理架构分析3.Filebeat的应用3.1.安装Filebeat3.2.实战采集应用程序日志1.Filebeat的由来 在介绍Filebeat之前,先介绍一下Beats。Beats是一个家族的统称,Beats家族有8个成员,早期的ELK架构中使用Logstash收集、解析日志,但是Logs
基于SpringBoot+Vue+大学校园图书管理系统设计和实现(源码+LW+部署讲解)
阿勇学长
大数据项目实战案例 Java精品毕业设计实例 微信小程序项目实战案例 spring boot vue.js 后端 大学校园图书管理系统 Java毕业设计
博主介绍:✌全网粉丝50W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等
Java爬虫技术详解:原理、实现与优势
cyc&阿灿
Java 多线程 java 爬虫 开发语言
一、什么是网络爬虫?网络爬虫(WebCrawler),又称网络蜘蛛或网络机器人,是一种自动化程序,能够按照一定的规则自动浏览和抓取互联网上的信息。爬虫技术是大数据时代获取网络数据的重要手段,广泛应用于搜索引擎、数据分析、价格监控等领域。Java作为一种稳定、高效的编程语言,凭借其强大的网络编程能力和丰富的生态库,成为开发网络爬虫的热门选择。二、Java爬虫核心组件一个完整的Java爬虫通常包含以下
如何学习才能更好地理解人工智能工程技术专业和其他信息技术专业的关联性?
人工智能教学实践
python编程实践 人工智能 学习 人工智能
要深入理解人工智能工程技术专业与其他信息技术专业的关联性,需要跳出单一专业的学习框架,通过“理论筑基-实践串联-跨学科整合”的路径构建系统性认知。以下是分阶段、可落地的学习方法:一、建立“专业关联”的理论认知框架绘制知识关联图谱操作方法:用XMind或Notion绘制思维导图,以AI为中心,辐射关联专业的核心技术节点。例如:AI(机器学习)├─数据支撑:大数据技术(Hadoop/Spark)+数据
Anconda环境下Vscode安装Python
Java后时代
程序员 python 学习 面试
最后Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习Python门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的Pytho
新华妙笔:AI智能写作助手,让高效写作触手可及
东风西巷
AI写作 android 软件需求 智能手机
在当今快节奏的时代,无论是职场人士、学生还是创作者,都面临着大量的写作任务。从工作总结、调研报告到公文写作、商业文案,高效且高质量的写作能力成为了提升个人竞争力的关键。然而,写作不仅需要丰富的知识储备和扎实的文字功底,还需要大量的时间和精力去打磨。为了帮助用户更高效地完成写作任务,新华妙笔APP应运而生。它是一款功能强大的AI智能写作助手,依托自然语言处理(NLP)和大数据分析技术,能够快速生成各
中国软件供应链安全厂商推荐︱悬镜安全聚焦全球数字经济大会·中国信通院最新成果发布
DevSecOps选型指南
安全
2025年7月3日,由全球数字经济大会组委会主办,中国信息通信研究院、中国通信标准化协会承办的全球数字经济大会—云智算安全论坛暨第三届“SecGo论坛”在京召开。北京市经济和信息化局副局长顾瑾栩、中国通信标准化协会副理事长兼秘书长代晓慧、中国信通院党委副书记王晓丽、中国信通院云计算与大数据研究所副所长栗蔚出席会议。在成果发布环节,中国信通院对云智算安全行业发展、产业创新有突出贡献的个人予以表彰,悬
数据编织趋势探秘
今天跟大家聊聊数据编织(DataFabric)的概念Gartner在2022年重要战略技术趋势中重点提到数据编织(DataFabric)这个概念,本质上是在谈怎么实现“数据找人而不是人找数据”的愿景为什么DataFabric将会成为一种趋势,为什么越来越多的企业将在未来采用这样的方式进行部署?1、在传统IT时代,无论是早年的“数据仓库”还是近几年的“数据湖”和“大数据”时代,其实数据利用都是集中式
HDFS与HBase有什么关系?
lucky_syq
hdfs hbase hadoop
1、HDFS文件存储系统和HBase分布式数据库HDFS是Hadoop分布式文件系统。HBase的数据通常存储在HDFS上。HDFS为HBase提供了高可靠性的底层存储支持。Hbase是Hadoopdatabase,即Hadoop数据库。它是一个适合于非结构化数据存储的数据库,HBase基于列的而不是基于行的模式。
Hbase和关系型数据库、HDFS、Hive的区别
别这么骄傲
hive hbase 数据库
目录1.Hbase和关系型数据库的区别2.Hbase和HDFS的区别3.Hbase和Hive的区别1.Hbase和关系型数据库的区别关系型数据库Hbase存储适合结构化数据,单机存储适合结构化和半结构数据的松散数据,分布式存储功能(1)支持ACID(2)支持join(3)使用主键PK(4)数据类型:int、varchar等(1)仅支持单行事务(2)不支持join,把数据糅合到一张大表(3)行键ro
大数据基础知识-Hadoop、HBase、Hive一篇搞定
原来是猪猪呀
hadoop 大数据 分布式
HadoopHadoop是一个由Apache基金会所开发的分布式系统基础架构,其核心设计包括分布式文件系统(HDFS)和MapReduce编程模型;Hadoop是一个开源的分布式计算框架,旨在帮助用户在不了解分布式底层细节的情况下,开发分布式程序。它通过利用集群的力量,提供高速运算和存储能力,特别适合处理超大数据集的应用程序。Hadoop生态圈Hadoop生态圈是一个由多个基于Hadoop开发的相
Hadoop、HDFS、Hive、Hbase区别及联系
静心观复
大数据 hadoop hdfs hive
Hadoop、HDFS、Hive和HBase是大数据生态系统中的关键组件,它们都是由Apache软件基金会管理的开源项目。下面将深入解析它们之间的区别和联系。HadoopHadoop是一个开源的分布式计算框架,它允许用户在普通硬件上构建可靠、可伸缩的分布式系统。Hadoop通常指的是整个生态系统,包括HadoopCommon(共享库和工具)、HadoopDistributedFileSystem(
大数据(1)-hdfs&hbase
viperrrrrrr
大数据 hdfs hbase
hbase&hdfs一、体系结构HDFS是一个标准的主从(Master/Slave)体系结构的分布式系统;HDFS集群包含一个或多个NameNode(NameNodeHA会有多个NameNode)和多个DataNode(根据节点情况规划),用户可以通过HDFS客户端同NameNode和DataNode进行交互以访问文件系统。HDFS公开文件系统名称空间,并允许将用户数据存储在文件中。在内部,一个文
阿里云SelectDB:开启实时数仓新时代
云资源服务商
阿里云 云计算 数据库 云原生
一、引言在当今大数据时代,数据如同企业的“石油”,蕴含着巨大的价值。随着数据量呈指数级增长,企业对于实时数据分析的需求愈发迫切。实时数据分析能够帮助企业及时捕捉市场动态,快速做出决策,从而在激烈的市场竞争中占据优势。无论是电商企业需要实时分析用户购买行为以进行精准营销,还是金融机构需要实时监测风险以保障资金安全,实时数据分析都发挥着关键作用。阿里云SelectDB作为一款专为实时数据分析打造的云原
探秘阿里云Tablestore:大数据存储与查询的神器
云资源服务商
阿里云 大数据 云计算
一、引言在大数据时代,数据量呈爆炸式增长,数据类型也日益丰富多样,这对数据库技术提出了前所未有的挑战。传统的关系型数据库在应对海量数据存储、高并发读写以及复杂数据分析时,往往显得力不从心,难以满足企业日益增长的业务需求。为了解决这些问题,各种新型数据库技术应运而生,阿里云Tablestore便是其中的佼佼者。阿里云Tablestore是一款构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服
数据库领域的分区表应用
数据库管理艺术
数据库 ffmpeg ai
数据库领域的分区表应用关键词:数据库分区、水平分区、垂直分区、分区策略、查询优化、大数据管理、分布式数据库摘要:本文深入探讨数据库分区表技术的原理与应用。从基础概念出发,详细分析水平分区和垂直分区的实现机制,介绍主流数据库系统的分区实现方式。通过实际案例展示分区表在性能优化、大数据管理和高可用性方面的应用价值,并提供分区策略选择的最佳实践。文章还包含详细的代码示例和性能对比数据,帮助读者全面掌握这
转行大模型之从大数据到AI:我为何选择投身大模型领域
程序员辣条
大数据 人工智能 产品经理 大模型教程 大模型入门 大模型学习
作为一名经验丰富的大数据开发工程师,我最近决定扩展自己的职业方向,转向大模型应用开发。这个决定源于对技术趋势的观察、对个人发展的思考,以及对我们行业未来的预判。让我从一个大数据工程师的视角,逐步分析这个决定背后的逻辑。目录1.技术演进:从大数据到大模型1.1大数据技术的发展现状1.2AI与大数据的融合1.3大模型:AI与大数据的集大成者2.技能迁移:大数据到大模型的自然过渡2.1数据处理能力的价值
Excel 的导入导出常用的技术栈
在JavaWeb项目中,Excel的导入导出是常见需求,技术栈丰富。以下是主流方案、优缺点及适用场景总结。一、主流技术栈对比表技术栈是否推荐支持格式特点/优势使用难度ApachePOI✅常用.xls、.xlsx功能全、稳定、低层操作,适合定制化中EasyExcel(阿里)✅强烈推荐.xlsx内存占用小,性能优越,适合大数据量导入导出简单JXL(已废弃)❌不推荐.xls太老旧,不支持.xlsx,功能
linux下的分布式Minio部署实践
Linux下的分布式Minio部署实践分布式Minio部署可以将多块硬盘(位于相同机器或者不同机器)组成一个对象存储服务,避免单机环境下硬盘容量不足、单点故障等问题。1.简介在当前的云计算和大数据时代,IT系统通常的设计理念都是无中心和分布式。Minio分布式模式可以帮助搭建一个高可靠、高可用、弹性扩展的对象存储服务。分布式部署,minio拓扑为Multi-NodeMulti-Drive(MNMD
“Redis缓存:掌握Redis常用五大数据类型“
南石.
后端 # MySQL数据库进阶 # Redis 缓存 redis 笔记
目录1、Redis中String字符串1.1常用命令解释1.2原子性1.3具有原子性的常用命令1.4String数据结构2、Redis常用数据类型-List列表2.1概念2.2常用命令2.3数据结构3、Redis常用数据类型-Set集合3.1概念3.2常用命令3.3数据结构4、Redis常用数据类型-Hash哈希4.1概念4.2常用命令4.3数据结构5、Redis常用数据类型-Zset有序集合5.
元宇宙养老社区:数字化照护的创新实践
AI天才研究院
ChatGPT AI大模型企业级应用开发实战 AI人工智能与大数据 大厂Offer收割机 面试题 简历 程序员读书 硅基计算 碳基计算 认知计算 生物计算 深度学习 神经网络 大数据 AIGC AGI LLM Java Python 架构设计 Agent 程序员实现财富自由
《元宇宙养老社区:数字化照护的创新实践》关键词元宇宙养老社区数字化照护虚拟现实人工智能大数据物联网摘要本文深入探讨了元宇宙养老社区的概念、技术架构及其在数字化照护中的应用。通过分析虚拟现实、人工智能、大数据和物联网等核心技术,本文详细阐述了元宇宙养老社区的架构设计、项目实施、运营管理与用户体验优化。同时,本文还展望了元宇宙养老社区的潜在市场、技术发展趋势以及未来挑战与机遇。文章目录《元宇宙养老社区
家用充电桩远程监控安全管理系统解决方案
蓝蜂物联网
物联网 远程监控 边缘计算 物联网
家用充电桩远程监控安全管理系统解决方案在当今电动汽车日益普及的背景下,家用充电桩的安全管理成为了广大车主关注的重点问题。为了实现对充电桩的高效、精准、远程监控,一套完善的家用充电桩远程监控安全管理系统解决方案应运而生。本方案旨在通过先进的物联网技术、云计算、大数据分析以及人工智能等科技手段,构建一个集实时监测、异常预警、故障诊断、数据统计、远程控制于一体的智能化平台,确保充电桩的安全运行及用户充电
为什么YashanDB数据库是大数据处理的理想选择?
数据库
在当今大数据时代,如何高效管理和处理海量数据成为了许多企业的首要挑战。针对这一问题,选择合适的数据库系统至关重要。尤其是在大数据场景中,诸如数据存储、数据访问效率和并发控制等技术要求提高,给数据库的选择带来了更高的标准。YashanDB作为一款高性能数据库,以其独特的架构设计与一系列优秀的功能,成为大数据处理的理想选择。高度可扩展的部署架构YashanDB支持多种部署形态,包括单机部署、分布式集群
LeetCode[位运算] - #137 Single Number II
Cwind
java Algorithm LeetCode 题解 位运算
原题链接:#137 Single Number II
要求:
给定一个整型数组,其中除了一个元素之外,每个元素都出现三次。找出这个元素
注意:算法的时间复杂度应为O(n),最好不使用额外的内存空间
难度:中等
分析:
与#136类似,都是考察位运算。不过出现两次的可以使用异或运算的特性 n XOR n = 0, n XOR 0 = n,即某一
《JavaScript语言精粹》笔记
aijuans
JavaScript
0、JavaScript的简单数据类型包括数字、字符创、布尔值(true/false)、null和undefined值,其它值都是对象。
1、JavaScript只有一个数字类型,它在内部被表示为64位的浮点数。没有分离出整数,所以1和1.0的值相同。
2、NaN是一个数值,表示一个不能产生正常结果的运算结果。NaN不等于任何值,包括它本身。可以用函数isNaN(number)检测NaN,但是
你应该更新的Java知识之常用程序库
Kai_Ge
java
在很多人眼中,Java 已经是一门垂垂老矣的语言,但并不妨碍 Java 世界依然在前进。如果你曾离开 Java,云游于其它世界,或是每日只在遗留代码中挣扎,或许是时候抬起头,看看老 Java 中的新东西。
Guava
Guava[gwɑ:və],一句话,只要你做Java项目,就应该用Guava(Github)。
guava 是 Google 出品的一套 Java 核心库,在我看来,它甚至应该
HttpClient
120153216
httpclient
/**
* 可以传对象的请求转发,对象已流形式放入HTTP中
*/
public static Object doPost(Map<String,Object> parmMap,String url)
{
Object object = null;
HttpClient hc = new HttpClient();
String fullURL
Django model字段类型清单
2002wmj
django
Django 通过 models 实现数据库的创建、修改、删除等操作,本文为模型中一般常用的类型的清单,便于查询和使用: AutoField:一个自动递增的整型字段,添加记录时它会自动增长。你通常不需要直接使用这个字段;如果你不指定主键的话,系统会自动添加一个主键字段到你的model。(参阅自动主键字段) BooleanField:布尔字段,管理工具里会自动将其描述为checkbox。 Cha
在SQLSERVER中查找消耗CPU最多的SQL
357029540
SQL Server
返回消耗CPU数目最多的10条语句
SELECT TOP 10
total_worker_time/execution_count AS avg_cpu_cost, plan_handle,
execution_count,
(SELECT SUBSTRING(text, statement_start_of
Myeclipse项目无法部署,Undefined exploded archive location
7454103
eclipse MyEclipse
做个备忘!
错误信息为:
Undefined exploded archive location
原因:
在工程转移过程中,导致工程的配置文件出错;
解决方法:
 
GMT时间格式转换
adminjun
GMT 时间转换
普通的时间转换问题我这里就不再罗嗦了,我想大家应该都会那种低级的转换问题吧,现在我向大家总结一下如何转换GMT时间格式,这种格式的转换方法网上还不是很多,所以有必要总结一下,也算给有需要的朋友一个小小的帮助啦。
1、可以使用
SimpleDateFormat SimpleDateFormat
EEE-三位星期
d-天
MMM-月
yyyy-四位年
Oracle数据库新装连接串问题
aijuans
oracle数据库
割接新装了数据库,客户端登陆无问题,apache/cgi-bin程序有问题,sqlnet.log日志如下:
Fatal NI connect error 12170.
VERSION INFORMATION: TNS for Linux: Version 10.2.0.4.0 - Product
回顾java数组复制
ayaoxinchao
java 数组
在写这篇文章之前,也看了一些别人写的,基本上都是大同小异。文章是对java数组复制基础知识的回顾,算是作为学习笔记,供以后自己翻阅。首先,简单想一下这个问题:为什么要复制数组?我的个人理解:在我们在利用一个数组时,在每一次使用,我们都希望它的值是初始值。这时我们就要对数组进行复制,以达到原始数组值的安全性。java数组复制大致分为3种方式:①for循环方式 ②clone方式 ③arrayCopy方
java web会话监听并使用spring注入
bewithme
Java Web
在java web应用中,当你想在建立会话或移除会话时,让系统做某些事情,比如说,统计在线用户,每当有用户登录时,或退出时,那么可以用下面这个监听器来监听。
import java.util.ArrayList;
import java.ut
NoSQL数据库之Redis数据库管理(Redis的常用命令及高级应用)
bijian1013
redis 数据库 NoSQL
一 .Redis常用命令
Redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在Linux终端使用。
a.键值相关命令
b.服务器相关命令
1.键值相关命令
&
java枚举序列化问题
bingyingao
java 枚举 序列化
对象在网络中传输离不开序列化和反序列化。而如果序列化的对象中有枚举值就要特别注意一些发布兼容问题:
1.加一个枚举值
新机器代码读分布式缓存中老对象,没有问题,不会抛异常。
老机器代码读分布式缓存中新对像,反序列化会中断,所以在所有机器发布完成之前要避免出现新对象,或者提前让老机器拥有新增枚举的jar。
2.删一个枚举值
新机器代码读分布式缓存中老对象,反序列
【Spark七十八】Spark Kyro序列化
bit1129
spark
当使用SparkContext的saveAsObjectFile方法将对象序列化到文件,以及通过objectFile方法将对象从文件反序列出来的时候,Spark默认使用Java的序列化以及反序列化机制,通常情况下,这种序列化机制是很低效的,Spark支持使用Kyro作为对象的序列化和反序列化机制,序列化的速度比java更快,但是使用Kyro时要注意,Kyro目前还是有些bug。
Spark
Hybridizing OO and Functional Design
bookjovi
erlang haskell
推荐博文:
Tell Above, and Ask Below - Hybridizing OO and Functional Design
文章中把OO和FP讲的深入透彻,里面把smalltalk和haskell作为典型的两种编程范式代表语言,此点本人极为同意,smalltalk可以说是最能体现OO设计的面向对象语言,smalltalk的作者Alan kay也是OO的最早先驱,
Java-Collections Framework学习与总结-HashMap
BrokenDreams
Collections
开发中常常会用到这样一种数据结构,根据一个关键字,找到所需的信息。这个过程有点像查字典,拿到一个key,去字典表中查找对应的value。Java1.0版本提供了这样的类java.util.Dictionary(抽象类),基本上支持字典表的操作。后来引入了Map接口,更好的描述的这种数据结构。
&nb
读《研磨设计模式》-代码笔记-职责链模式-Chain Of Responsibility
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
/**
* 业务逻辑:项目经理只能处理500以下的费用申请,部门经理是1000,总经理不设限。简单起见,只同意“Tom”的申请
* bylijinnan
*/
abstract class Handler {
/*
Android中启动外部程序
cherishLC
android
1、启动外部程序
引用自:
http://blog.csdn.net/linxcool/article/details/7692374
//方法一
Intent intent=new Intent();
//包名 包名+类名(全路径)
intent.setClassName("com.linxcool", "com.linxcool.PlaneActi
summary_keep_rate
coollyj
SUM
BEGIN
/*DECLARE minDate varchar(20) ;
DECLARE maxDate varchar(20) ;*/
DECLARE stkDate varchar(20) ;
DECLARE done int default -1;
/* 游标中 注册服务器地址 */
DE
hadoop hdfs 添加数据目录出错
daizj
hadoop hdfs 扩容
由于原来配置的hadoop data目录快要用满了,故准备修改配置文件增加数据目录,以便扩容,但由于疏忽,把core-site.xml, hdfs-site.xml配置文件dfs.datanode.data.dir 配置项增加了配置目录,但未创建实际目录,重启datanode服务时,报如下错误:
2014-11-18 08:51:39,128 WARN org.apache.hadoop.h
grep 目录级联查找
dongwei_6688
grep
在Mac或者Linux下使用grep进行文件内容查找时,如果给定的目标搜索路径是当前目录,那么它默认只搜索当前目录下的文件,而不会搜索其下面子目录中的文件内容,如果想级联搜索下级目录,需要使用一个“-r”参数:
grep -n -r "GET" .
上面的命令将会找出当前目录“.”及当前目录中所有下级目录
yii 修改模块使用的布局文件
dcj3sjt126com
yii layouts
方法一:yii模块默认使用系统当前的主题布局文件,如果在主配置文件中配置了主题比如: 'theme'=>'mythm', 那么yii的模块就使用 protected/themes/mythm/views/layouts 下的布局文件; 如果未配置主题,那么 yii的模块就使用 protected/views/layouts 下的布局文件, 总之默认不是使用自身目录 pr
设计模式之单例模式
come_for_dream
设计模式 单例模式 懒汉式饿汉式 双重检验锁失败 无序写入
今天该来的面试还没来,这个店估计不会来电话了,安静下来写写博客也不错,没事翻了翻小易哥的博客甚至与大牛们之间的差距,基础知识不扎实建起来的楼再高也只能是危楼罢了,陈下心回归基础把以前学过的东西总结一下。
*********************************
8、数组
豆豆咖啡
二维数组 数组 一维数组
一、概念
数组是同一种类型数据的集合。其实数组就是一个容器。
二、好处
可以自动给数组中的元素从0开始编号,方便操作这些元素
三、格式
//一维数组
1,元素类型[] 变量名 = new 元素类型[元素的个数]
int[] arr =
Decode Ways
hcx2013
decode
A message containing letters from A-Z is being encoded to numbers using the following mapping:
'A' -> 1
'B' -> 2
...
'Z' -> 26
Given an encoded message containing digits, det
Spring4.1新特性——异步调度和事件机制的异常处理
jinnianshilongnian
spring 4.1
目录
Spring4.1新特性——综述
Spring4.1新特性——Spring核心部分及其他
Spring4.1新特性——Spring缓存框架增强
Spring4.1新特性——异步调用和事件机制的异常处理
Spring4.1新特性——数据库集成测试脚本初始化
Spring4.1新特性——Spring MVC增强
Spring4.1新特性——页面自动化测试框架Spring MVC T
squid3(高命中率)缓存服务器配置
liyonghui160com
系统:centos 5.x
需要的软件:squid-3.0.STABLE25.tar.gz
1.下载squid
wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE25.tar.gz
tar zxf squid-3.0.STABLE25.tar.gz &&
避免Java应用中NullPointerException的技巧和最佳实践
pda158
java
1) 从已知的String对象中调用equals()和equalsIgnoreCase()方法,而非未知对象。 总是从已知的非空String对象中调用equals()方法。因为equals()方法是对称的,调用a.equals(b)和调用b.equals(a)是完全相同的,这也是为什么程序员对于对象a和b这么不上心。如果调用者是空指针,这种调用可能导致一个空指针异常
Object unk
如何在Swift语言中创建http请求
shoothao
http swift
概述:本文通过实例从同步和异步两种方式上回答了”如何在Swift语言中创建http请求“的问题。
如果你对Objective-C比较了解的话,对于如何创建http请求你一定驾轻就熟了,而新语言Swift与其相比只有语法上的区别。但是,对才接触到这个崭新平台的初学者来说,他们仍然想知道“如何在Swift语言中创建http请求?”。
在这里,我将作出一些建议来回答上述问题。常见的
Spring事务的传播方式
uule
spring事务
传播方式:
新建事务
required
required_new - 挂起当前
非事务方式运行
supports
&nbs