本文目录
hadoopreduce主要特点?
1.计数器
在MR作业中内置计数器,统计任务状态,用户可以自定义计数器以实现统计目的,这块比较简单,不是什么原理性的东西,直接略过
2.排序
排序是MR中比较核心的问题,MR中数据是通过排序来进行组织的。排序的效率直接影响着整个作业的运行效率
i)部分排序
在Map任务执行完毕之后,写入到磁盘文件之前,对输出数据进行预排序。这样的排序是按照键进行字典排序而成,将键相同的数据组织到一起。
预排序完成之后,将数据写入本地磁盘,而后通过Partitioner将数据映射传递到对应reducer,默认是一个HashPartitioner进行分区。对键进行hash处理,将值对reducer数目取模,从而确定reducer。
数据传递到reducer之后,reducer对每个分区内数据进行合并排序,依然是按键字典排序,当然也可以通过继承RowCompartor类并且显示设置comparatorClass指定排序方式,这样一来每个reducer输入分区的数据都是有序的,但是就整体所有数据而言,并不是有序的,所以称之为部分排序。
2.完全排序
要想实现所有数据均可以实现有序,那么需要对Partitioner进行设置为TotalOrderPartitioner,对所有数据进行分组,比如说将数据分为{a,b,c,d,e,f}六个分组,那么a组所有键必须小于b组,而b组所有键必须小于c组,以此类推,这就意味着是按照键的范围对数据进行分组。
hash索引适用于?
hash索引仅适用于‘=’、‘<=>’和‘in’操作,所以hash仅仅适用于精确查找。
不适用于查询排序,因为hash后的数据并不会像原数据一样保持有序。
不适用于模糊查询,也就是不能使用like关键字。
既然不支持排序,也肯定不支持范围查询。
特点优劣:
1)首先就是Hash索引存取的是哈希值和行指针,索以不提供排序
2)Hash索引不能够避免读取行。
3)Hash索引不适用于范围查询,只适用于=或IN查询。
4)Hash索引不能够避免表扫描。
rpm的用法?
RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序”
rpm 执行安装包
二进制包(Binary)以及源代码包(Source)两种。二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。
常用命令组合:
-ivh:安装显示安装进度--install--verbose--hash
-Uvh:升级软件包--Update;
-qpl:列出RPM软件包内的文件信息[Query Package list];
-qpi:列出RPM软件包的描述信息[Query Package install package(s)];
-qf:查找指定文件属于哪个RPM软件包[Query File];
-Va:校验所有的RPM软件包,查找丢失的文件[View Lost];
-e:删除包
rpm -q samba //查询程序是否安装
rpm -ivh /media/cdrom/RedHat/RPMS/samba-3.0.10-1.4E.i386.rpm //按路径安装并显示进度
rpm -ivh --relocate /=/opt/gaim gaim-1.3.0-1.fc4.i386.rpm //指定安装目录
rpm -ivh --test gaim-1.3.0-1.fc4.i386.rpm //用来检查依赖关系;并不是真正的安装;
rpm -Uvh --oldpackage gaim-1.3.0-1.fc4.i386.rpm //新版本降级为旧版本
rpm -qa | grep httpd #[搜索指定rpm包是否安装]--all搜索*httpd*
rpm -ql httpd #[搜索rpm包]--list所有文件安装目录
rpm -qpi Linux-1.4-6.i368.rpm #[查看rpm包]--query--package--install package信息
rpm -qpf Linux-1.4-6.i368.rpm #[查看rpm包]--file
rpm -qpR file.rpm #[查看包]依赖关系
rpm2cpio file.rpm |cpio -div #[抽出文件]
rpm -ivh file.rpm #[安装新的rpm]--install--verbose--hash
rpm -ivh
rpm -Uvh file.rpm #[升级一个rpm]--upgrade
rpm -e file.rpm #[删除一个rpm包]--erase
md5哈希函数用途及其特点?
我们日常开发中最常见的哈希算法应用就是通过 md5 函数对数据进行加密了,md5 就是一个哈希函数,结合 md5 我们可以归纳出哈希算法的一般特性:
从哈希值不能反向推导出原始数据(所以哈希算法也叫单向算法,不可逆);
对输入数据非常敏感,哪怕原始数据只修改了一个比特,最后得到的哈希值也大不相同;
散列冲突的概率要很小,对于不同的原始数据,哈希值相同的概率非常小;
哈希算法的执行效率要尽量高效,针对较长的文本,也能快速地计算出哈希值
mkey和bmkey的区别?
mkey和bmkey都是用于计算机密码学中的密钥派生函数,用于从一个密钥派生出另一个密钥。它们的区别在于:
1. mkey是一种基于哈希函数的密钥派生函数,它可以从一个密钥派生出多个密钥。mkey的输入是一个主密钥和一个索引值,输出是一个派生密钥。mkey的派生过程是不可逆的,即无法从派生密钥反推出主密钥。
2. bmkey是一种基于布尔函数的密钥派生函数,它可以从一个密钥派生出多个密钥。bmkey的输入是一个主密钥和一个索引值,输出是一个派生密钥。bmkey的派生过程是可逆的,即可以从派生密钥反推出主密钥。
因此,mkey和bmkey的主要区别在于派生过程的可逆性。mkey的派生过程是不可逆的,更加安全可靠,但是无法从派生密钥反推出主密钥。bmkey的派生过程是可逆的,更加灵活方便,但是安全性相对较低。在实际应用中,需要根据具体的安全需求和应用场景选择合适的密钥派生函数。