元数据

HDFS 小文件的解决思路

笑着哭i 提交于 2020-03-02 18:03:01
我们知道,HDFS 被设计成存储大规模的数据集,我们可以在 HDFS 上存储 TB 甚至 PB 级别的海量数据。而这些数据的元数据(比如文件由哪些块组成、这些块分别存储在哪些节点上)全部都是由 NameNode 节点维护,为了达到高效的访问,NameNode 在启动的时候会将这些元数据全部加载到内存中。而 HDFS 中的每一个文件、目录以及文件块,在 NameNode 内存都会有记录,每一条信息大约占用150字节的内存空间。由此可见,HDFS 上存在大量的小文件( 这里说的小文件是指文件大小要比一个 HDFS 块大小(在 Hadoop1.x 的时候默认块大小64M,可以通过 dfs.blocksize 来设置;但是到了 Hadoop 2.x 的时候默认块大小为128MB了,可以通过 dfs.block.size 设置) 小得多的文件。 ) 至少会产生以下几个负面影响: 大量小文件的存在势必占用大量的 NameNode 内存,从而影响 HDFS 的横向扩展能力。 另一方面,如果我们使用 MapReduce 任务来处理这些小文件,因为每个 Map 会处理一个 HDFS 块;这会导致程序启动大量的 Map 来处理这些小文件,虽然这些小文件总的大小并非很大,却占用了集群的大量资源! 以上两个负面影响都不是我们想看见的。那么这么多的小文件一般在什么情况下产生?我在这里归纳为以下几种情况:

java高分局之jstat命令使用

巧了我就是萌 提交于 2020-03-02 18:01:29
java高分局之jstat命令使用 jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数] 注意:使用的jdk版本是jdk8. 类加载统计: C:\Users\Administrator>jstat -class 2060 Loaded Bytes Unloaded Bytes Time 15756 17355.6 0 0.0 11.29 Loaded:加载class的数量 Bytes:所占用空间大小 Unloaded:未加载数量 Bytes:未加载占用空间 Time:时间 ------------------------------------------------------- 编译统计 C:\Users\Administrator>jstat -compiler 2060 Compiled Failed Invalid Time FailedType FailedMethod 9142 1 0 5.01 1 org/apache/felix/resolver/ResolverImpl mergeCandidatePackages Compiled:编译数量。 Failed:失败数量 Invalid:不可用数量 Time:时间 FailedType:失败类型

# IT明星不是梦 # Ceph持久化存储为k8s应用提供存储方案(1)

笑着哭i 提交于 2020-03-01 23:04:27
目录:1)Ceph介绍 2)部署Ceph集群 采用版本【2020最新nautilus (stable)14.2.7】 为什么使用Ceph? ceph其实早在2004年的时候写的第一行代码,它是到2012年才有的第一个开发版本,到2014年的时候ceph才慢慢有公司在生产上应用了,那时候一般有的版本也不是很稳定,也是进行一些二次的研发,包装成一些自己的东西,不过现在ceph的版本已经很稳定了,已经适合在生产用了,目前用的比较多的,社区影响比较好的是这个luminous版本,这个版本也是比较稳定,也是比较流行,目前也是用的比较多。 另外就是ceph和其他存储有些不一样的地方,它可扩展,有很好的性能,有稳定存储的计算模块,在没用ceph之前用的一般都是一些传统的存储或者就是商业的存储,像商业的成本一般比较高,需要一些设备或者存储到云端,另外就是拿服务器做挂载共享,这种一个是不利于横向扩展,它很难保证数据的稳定性,数据的访问速率,因为用挂载模式的话,它挂载的模式访问是比较差的,所以基于这种原因来采用ceph,目前像腾讯、乐视、新浪、国外的公司雅虎也都是用的ceph,像国内用的比较成功的x-sky这个用的也比较多,所以这个ceph已经很稳定了,目前市面的ceph人员也比较缺少。 GlusterFS和ceph的区别 分布式存储的话无疑就是横向扩展,任何一个节点挂了的话,可以不整体影响一个运行

hive基本组件简单介绍

大兔子大兔子 提交于 2020-03-01 21:10:23
Hive 开发指南 三个主要组件: Serializers/Deserializers,用户可以自定义来解析自有的数据格式。 MetaStore Query Processor 一些其它组件: 命令行组件 Hive Server:提供被客户端使用的api,用于操作hive。 通用组件: Ant相关: 脚本组件: Hive SerDe (Serializer Deserializer): Hive 使用SerDe结合FileFormat来读写表中的行。 hive并不能识别HDFS中的文件格式,用户可以使用其他工具把hdfs上的文件读取到hive表中,或者把信息按照hive能识别的格式写到hdfs上,这些格式化过的文件可以通过create external table 或者load data inpath 加载到hive中,这样仅仅是把这些文件移动到hive的表存储目录中。 Hive读写hdfs文件的FileFormat类: TextInputFormat/HiveIgnoreKeyTextOutputFormat:读写纯文本格式的文件。 SequenceFileInputFormat/SequenceFileOutputFormat:读写序列化格式的文件(SequenceFile)。 Hive序列化和反序列化的SerDe类: MetadataTypedColumnsetSerDe

升级重装Hive并恢复元数据metastore

只愿长相守 提交于 2020-03-01 20:18:04
Hive2.1.1升级成Hive2.3.6并恢复metastore记录。 首先apache所有软件的下载地址:http://archive.apache.org/dist/ 找到hive自行下载对应版本 二:下载完成解压到和指定的目录,把旧的配置文件都搞回来,然后创建新的软连接指向新的hive目录,也就是把原来的软连接替换掉。 三:启动metastore和hive客户端 nohup hive --service metastore > /dev/null 2>&1 & hive 这里我之前的hive的元数据就是在mysql里的, 我们show databases;发现没有之前的库了并且报错: hive (default)> show databases; FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient hive (default)> exit; 这里我们先用命令更新,更多schematool命令在这里https://cwiki.apache.org

文件的元数据信息的含义及查看和修改

情到浓时终转凉″ 提交于 2020-03-01 10:04:46
文件的元数据 文件系统中的数据分为两类:数据和元数据 数据:指的是普通文件中的实际数据 元数据:指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者、以及文件数据块的分布信息等等 数据(Data) 即指文件的数据内容是存放在文件对应的数据块中的,数据块是记录文件真实内容的地方 元数据(Metadata) 其它文件保存信息常常伴随着文件自身保存在文件系统中。文件长度可能是分配给这个文件的区块数,也可能是这个文件实际的字节数。文件最后修改时间也许记录在文件的时间戳中。有的文件系统还保存文件的创建时间,最后访问时间及属性修改时间。(不过大多数早期的文件系统不记录文件的时间信息)其它信息还包括文件设备类型(如:区块数,字符集,套接口,子目录等等),文件所有者的ID,组ID,还有访问权限(如:只读,可执行等等)。 查看文件的元数据信息需要用到一个命令:stat stat命令的作用为显示文件的状态信息,输出的信息比ls命令输出的信息更加详细。 [root@lb-test2 ~]# stat test.txt File: ‘test.txt’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 801h/2049d Inode: 8878329 Links: 1 Access: (0644/-rw-r--r--) Uid

JPA、Hibernate、Spring data jpa之间的关系

我的未来我决定 提交于 2020-03-01 07:49:27
什么么是JPA? 全称Java Persistence API,可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中。 为我们提供了: 1)ORM映射元数据:JPA支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中; 如:@Entity、@Table、@Column、@Transient等注解。 2)JPA 的API:用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。 如:entityManager.merge(T t); 3)JPQL查询语言:通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。 如:from Student s where s.name = ? 但是: JPA仅仅是一种规范,也就是说JPA仅仅定义了一些接口,而接口是需要实现才能工作的。所以底层需要某种实现,而Hibernate就是实现了JPA接口的ORM框架。 也就是说: JPA是一套ORM规范,Hibernate实现了JPA规范!如图: 什么是spring data jpa? spirng data jpa是spring提供的一套简化JPA开发的框架,按照约定好的【方法命名规则】写dao层接口,就可以在不写接口实现的情况下

Linux文件目录介绍及操作

时光毁灭记忆、已成空白 提交于 2020-02-29 22:55:26
1 描述Linux发行版的系统目录名称规则以及用途 Linux的文件系统采用的是一个树形结构的目录规则,这样目录之间不会重复,其中有以下重要目录: /boot:操作系统启动时加载内核的目录; /root:管理员的家目录,可以放置管理员配置的一些变量; /home:普通用户的家目录,存放普通用户的数据; /etc: 操作系统及软件的配置文件; /dev: 操作系统的设备文件,例如硬盘等; /proc:运行在内存中的实时数据; /run: 运行的进程的文件; /sys: 系统运行中的系统文件; /var: 变化的数据文件,比如log日志相关; /tmp: 临时文件; /usr: 存储的二进制文件和程序依赖的lib库文件; /srv: 系统提供服务的数据文件; 2 描述文件的元数据信息有哪些,分别表示什么含义,如何查看?如何更改文件的时间戳信息? Linux系统中文件是分为元数据和数据两个部分,元数据是对文件属性的描述,包括文件的所属情况,文件的权限情况,文件的时间戳,文件的大小和节点编号等等信息;文件的元数据是作为文件索引的一部分进行存储的,而文件真正的数据部分是作为数据块存储在磁盘上的,根据文件的索引表通过指针指向文件所有的数据块。Stat命令可以查看文件的元数据信息,touch命令可以更改文件的时间戳信息。 文件的时间戳信息: Access time,访问时间,读取文件内容的时间;

架构实现利器:反射

余生颓废 提交于 2020-02-29 10:32:28
版权声明:本文由韩伟原创文章,转载请注明出处: 文章原文链接: https://www.qcloud.com/community/article/246 来源:腾云阁 https://www.qcloud.com/community 作者介绍:韩伟,1999年大学实习期加入初创期的网易,成为第30号员工,8年间从程序员开始,历任项目经理、产品总监。2007年后创业4年,开发过视频直播社区,及多款页游产品。2011年后就职于腾讯游戏研发部公共技术中心架构规划组,专注于通用游戏技术底层的研发。 通用型软件框架的难题 假设我们希望开发一套通用型的软件框架,这个框架允许用户自定义大量不同的情况下的回调函数(方法),用来实现丰富多彩的业务逻辑功能,例如一个游戏脚本引擎,那么,其中一个实现方式,就是使用观察者模式,以事件的方式来驱动整个框架。用户通过定义各个事件的响应函数,来组织和实现业务逻辑。而框架也提供了自定义事件及其响应函数的入口。在一些实现代码中,我们可能会发现有大量的“注册事件”的代码,或者是使用一个巨大的switch…case…对事件函数进行分发调用。譬如我们想做一个服务器端的基本进程框架,这个框架让用户只需要填写一些回调函数,就能成为一个稳定持续运行的后台服务进程。其中一个部分,就是需要定义程序启动事件,以便用户自定义程序启动要做的事情。那么我们可以定义一个”Init

HDFS学习笔记(1)初探HDFS

旧城冷巷雨未停 提交于 2020-02-29 06:59:42
Hadoop分布式文件系统(Hadoop Distributed File System, HDFS) 分布式文件系统是一种同意文件通过网络在多台主机上分享的文件系统。可让多机器上的多用户分享文件和存储空间。 hdfs仅仅是当中一种。 适用于一次写入、多次查询的情况。不支持并发写情况。小文件不合适。 2.HDFS架构 HDFS採用master/slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。Namenode是一个中心server,负责管理文件系统的名字空间(namespace)以及client对文件的訪问。 集群中的Datanode通常是一个节点一个,负责管理它所在节点上的存储。HDFS暴露了文件系统的名字空间。用户可以以文件的形式在上面存储数据。从内部看,一个文件事实上被分成一个或多个数据块,这些块存储在一组Datanode上。Namenode运行文件系统的名字空间操作,比方打开、关闭、重命名文件或文件夹。它也负责确定数据块到详细Datanode节点的映射。Datanode负责处理文件系统client的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。 NameNode 是整个文件系统的管理节点。 它维护着整个文件系统的文件文件夹树,文件/文件夹的元信息和每个文件相应的数据块列表。 接收用户的操作请求。 文件包括: