信息化浪潮 | 发生时间 | 标志 | 解决问题 | 代表企业 |
---|---|---|---|---|
第一次浪潮 | 1980年前后 | 个人计算机 | 信息处理 | Intel、AMD、IBM、苹果、微软、联想、戴尔、惠普等 |
第二次浪潮 | 1995年前后 | 互联网 | 信息传输 | 雅虎、谷歌、阿里巴巴、百度、腾讯等 |
第三次浪潮 | 2010年前后 | 物联网、云计算和大数据 | 信息爆炸 | 将涌现出一批新的市场标杆企业 |
存储设备容量不断增加、CPU处理能力大幅提升、网络带宽不断增加
运营式系统阶段、用户原创内容阶段、感知式系统阶段
阶段 | 时间 | 内容 |
---|---|---|
第一阶段:萌芽期 | 上世纪90年代至本世纪初 | 随着数据挖掘理论和数据库技术的逐步成熟,一批商业智能工具和知识管理技术开始被应用,如数据仓库、专家系统、知识管理系统等。 |
第二阶段:成熟期 | 本世纪前十年 | Web2.0应用迅猛发展,非结构化数据大量产生,传统处理方法难以应对,带动了大数据技术的快速突破,大数据解决方案逐渐走向成熟,形成了并行计算与分布式系统两大核心技术,谷歌的GFS和MapReduce等大数据技术受到追捧,Hadoop平台开始大行其道 |
第三阶段:大规模应用期 | 2010年以后 | 大数据应用渗透各行各业,数据驱动决策,信息社会智能化程度大幅提高 |
数据量大、数据类型繁多、处理速度快、价值密度低
(对思维方式的影响):全样而非抽样、效率而非精确、相关而非因果
实验科学、理论科学、计算科学、数据密集型科学
技术层面 | 功能 |
---|---|
数据采集 | 利用ETL工具将分布的、异构数据源中的数据如关系数据、平面数据文件等,抽取到临时中间层后进行清洗、转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础;或者也可以把实时采集的数据作为流计算系统的输入,进行实时处理分析 |
数据存储和管理 | 利用分布式文件系统、数据仓库、关系数据库、NoSQL数据库、云数据库等,实现对结构化、半结构化和非结构化海量数据的存储和管理 |
数据处理与分析 | 利用分布式并行编程模型和计算框架,结合机器学习和数据挖掘算法,实现对海量数据的处理和分析;对分析结果进行可视化呈现,帮助人们更好地理解数据、分析数据 |
数据隐私和安全 | 在从大数据中挖掘潜在的巨大商业价值和学术价值的同时,构建隐私数据保护体系和数据安全体系,有效保护个人隐私和数据安全 |
分布式存储
分布式处理
大数据计算模式 | 解决问题 | 代表产品 |
---|---|---|
批处理计算 | 针对大规模数据的批量处理 | MapReduce、Spark等 |
流计算 | 针对流数据的实时计算 | Storm、S4、Flume、Streams、Puma、DStream、Super Mario、银河流数据处理平台等 |
图计算 | 针对大规模图结构数据的处理 | Pregel、GraphX、Giraph、PowerGraph、Hama、GoldenOrb等 |
查询分析计算 | 大规模数据的存储管理和查询分析 | Dremel、Hive、Cassandra、Impala等 |
核心感应器件提供商、感知层末端设备提供商、网络提供商、软件与行业解决方案提供商、系统集成商、运营及服务提供商等六大环节
组件 | 功能 |
---|---|
HDFS | 分布式文件系统 |
MapReduce | 分布式并行编程模型 |
YARN | 资源管理和调度器 |
Tez | 运行在YARN之上的下一代Hadoop查询处理框架 |
Hive | Hadoop上的数据仓库 |
HBase | Hadoop上的非关系型的分布式数据库 |
Pig | 一个基于Hadoop的大规模数据分析平台,提供类似SQL的查询语言Pig Latin |
Sqoop | 用于在Hadoop与传统数据库之间进行数据传递 |
Oozie | Hadoop上的工作流管理系统 |
Zookeeper | 提供分布式协调一致性服务 |
Storm | 流计算框架 |
Flume | 一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统 |
Ambari | Hadoop快速部署工具,支持Apache Hadoop集群的供应、管理和监控 |
Kafka | 一种高吞吐量的分布式发布订阅消息系统,可以处理消费者规模的网站中的所有动作流数据 |
Spark | 类似于Hadoop MapReduce的通用并行框架 |
MapReduce的作业
Hadoop集群节点
hdfs-site.xml:
HDFS采用抽象的块概念,可以带来以下几个明显的好处:
同时,块的大小不宜设置过大,因为MapReduce中的Map任务只处理一个块中的数据,如果启动的任务太少,会降低作业并行处理速度。
原因
在HDFS中,名称节点(NameNode)负责管理分布式文件系统的命名空间(Namespace),保存了两个核心的数据结构,即FsImage和EditLog
名称节点记录了每个文件中各个块所在的数据节点的位置信息,收集名称节点的状态信息
数据结构
启动
作用:
合并过程:
用途:
主节点”(Master Node)“名称结点”(NameNode),负责文件和目录的创建、删除和重命名,同时管理者数据节点和文件块的映射关系
从节点”(Slave Node)或者也被称为“数据节点”(DataNode),负责数据的读写和存储
分布式文件系统是针对大规模存储而设计的,过小会影响系统的扩展和性能
NameNode | DataNode |
---|---|
存储元数据 | 存储文件内容 |
元数据保存在内存中 | 文件内容保存在磁盘 |
保存文件,block,datanode之间的映射关系 | 维护了block id到datanode本地文件的映射关系 |
多副本方式优点
数据存放
数据读取
名称节点出错
名称节点失效
数据节点失效
数据节点出错
数据出错
从HDFS读数据
①加载配置文件,生成 FileSystem 对象,根据文件名调用 open 方法创建 FSDataInputStream 类型的输入流 in;
②输入流 in 远程 RPC 调用名称节点,获得文件开始部分数据块所有副本位置(根据和客户端的距离排序);
③输入流 in 选择距离最近的数据节点建立连接并且 in.read 读取数据,读完后断开连接;
④输入流 in 通过getBlockLocations 查找下一数据块(客户端已缓存则不用调用);
⑤重复上述找最佳数据块、建立连接、读取数据块、读完断开连接的过程;
⑥客户端读完数据,输入流 in 调用close 关闭输入流。
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://localhost:9000");
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
FSDataInputStream getIt = fs.open(new Path("test"));
BufferedReader d = new BufferedReader(new InputStreamReader(getIt));
System.out.println(d.readLine());
d.close(); fs.close();
从HDFS写数据
①加载配置文件,生成 FileSystem 对象,根据文件名调用 create 方
法创建 FSDataOutputStream 类型的输入流 out;
②输入流 out 远程 RPC 调用名称节点,名称节点构造新文件,添加文件信息,并且写在 EditLog 里;
③客户端通过输出流 out.write向 HDFS 写入数据;
④输出流 out 中的数据被分成一个个分包,放入输出流 out 的DFSOutputStream 类型的对象的内部队列,然后输出流 out 向名称节点申请保存文件和副本数据块的若干数据节点,这些数据节点形成一个数据流管道,按照流水线复制策略依次发送;
⑤收到数据的节点向发送方发送确认包,它们沿着流水线逆流而上,经过各个数据节点发回客 户端 ,客 户端收到确认包以后 ,就将对应的 分包从输出流 out 的DFSOutputStream 类型的对象的内部队列中移除;
⑥客户端通过输出流 out.close 关闭输出流,当输出流 out 的DFSOutputStream 类型的对象的内部队列中的所有分包收到却分包以后,ClientProtocl.complete 通知名称节点关闭文件。
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://localhost:9000");
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
byte[] buff = "Hello world".getBytes(); String filename = "test";
FSDataOutputStream os = fs.create(new Path(filename));
os.write(buff,0,buff.length); System.out.println("Create:"+ filename);
os.close(); fs.close();
判断文件是否存在
String fileName = "test";
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://localhost:9000");
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem fs = FileSystem.get(conf);
if(fs.exists(new Path(fileName)))
System.out.println("文件存在");
else
System.out.println("文件不存在");
HDFS默认冗余因子为3,两份副本放在同一个机架的不同机器,第三个放在不同机架的机器上
HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,是谷歌BigTable的开源实现,主要用来存储非结构化和半结构化的松散数据。Hbase不支持事务
HBase和BigTable的底层技术对应关系
** **BigTable | HBase | |
---|---|---|
文件存储系统 | GFS | HDFS |
海量数据处理 | MapReduce | Hadoop MapReduce |
协同服务管理 | Chubby | Zookeeper |
类型 | 特点 | 场合 |
---|---|---|
Native Java API | 最常规和高效的访问方式 | 适合Hadoop MapReduce作业并行批处理HBase表数据 |
HBase Shell | HBase的命令行工具,最简单的接口 | 适合HBase管理使用 |
Thrift Gateway | 利用Thrift序列化技术,支持C++、PHP、Python等多种语言 | 适合其他异构系统在线访问HBase表数据 |
REST Gateway | 解除了语言限制 | 支持REST风格的Http API访问HBase |
Pig | 使用Pig Latin流式编程语言来处理HBase中的数据 | 适合做数据统计 |
Hive | 简单 | 当需要以类似SQL语言方式来访问HBase的时候 |
表:HBase采用表来组织数据,表由行和列组成,列划分为若干个列族
行:每个HBase表都由若干行组成,每个行由行键(row key)来标识。
列族:一个HBase表被分组成许多“列族”(Column Family)的集合,它是基本的访问控制单元
列限定符:列族里的数据通过列限定符(或列)来定位
单元格:在HBase表中,通过行、列族和列限定符确定一个“单元格”(cell),单元格中存储的数据没有数据类型,总被视为字节数组byte[]
时间戳:每个单元格都保存着同一份数据的多个版本,这些版本采用时间戳进行索引
HBase中、一个“四维坐标”,即[行键, 列族, 列限定符, 时间戳]确定一个单元格
HBase概念视图和物理视图不同,在物理视图中这些空的列不会被存储成null,而是不会被存储,当请求这些空白的单元格的时候会返回null值
HBase面向列存储
层次 | 名称 | 作用 |
---|---|---|
第一层 | Zookeeper文件 | 记录了-ROOT-表的位置信息 |
第二层 | -ROOT-表 | 记录了.META.表的Region位置信息-ROOT-表只能有一个Region。通过-ROOT-表,就可以访问.META.表中的数据 |
第三层 | .META.表 | 记录了用户数据表的Region位置信息,.META.表可以有多个Region,保存了HBase中所有用户数据表的Region位置信息(可以保存的Region的数目是2的34次个Region) |
①Zookeeper** 组件里有一个 Zookeeper 文件,里面存放了“-ROOT-”表的地址和 Master 的地址;
②根数据表 -ROOT- 里存放了元数据表“.META.”的 Region和 Region 服务器的映射关系。这个表只能存放在一个 Region 里,不能被分割,在程序里写死的。
③元数据表“.META.里存放了用户数据表的 Region 的 Region 服务器的映射关系,会被分裂成多个 Region。
④用户数据表分割成多个 Region,由“表名+开始主键+RegionID”来标识一个 Region。为了加快访问速度,.META.表的全部 Region 都会被保存在内存中
用户读写数据过程
缓存的刷新
StoreFile的合并
优点:非侵入性:引擎构建在HBase之上,既没有对HBase进行任何改动,也不需要上层应用做任何妥协
缺点:每插入一条数据需要向索引表插入数据,即耗时是双倍的,对HBase的集群的压力也是双倍的
安装Hadoop步骤
①创建hadoop用户,加入sudo组
②安装SSH服务器端,配置SSH无密码登录
③安装JDK,配置环境变量java_home、jre_home、classpath、path
④安装Hadoop,修改配置文件core-site.xml(hadoop挂载目录和默认文件系统),修改配置文件hdfs-site.xml(副本数为1,主节点和数据节点的挂载目录)
⑤格式化NameNode,开启Hadoop:start-dfs.sh
HBase建立连接
configuration = HBaseConfiguration.create();
configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
try{ connection = ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();
}catch (IOException e){
e.printStackTrace(); }
HBase建表
TableName tableName = TableName.valueOf(myTableName);
if(admin.tableExists(tableName)){
System.out.println("talbe is exists!");
}else {
HTableDescriptor htd = new HTableDescriptor(tableName);
for(String str:colFamily){
HColumnDescriptor hcd = new HColumnDescriptor(str);
htd.addFamily(hcd); }//for
admin.createTable(htd); }//else
HBase删除表
TableName tn = TableName.valueOf(tableName);
if (admin.tableExists(tn)) {
admin.disableTable(tn);
admin.deleteTable(tn); }
HBase查看已有表
HTableDescriptor htds[] = admin.listTables();
for(HTableDescriptor htd : htds){
System.out.println(htd.getNameAsString()); }
HBase插入数据
Table table = connection.getTable(TableName.valueOf(tableName));
Put put = new Put(rowKey.getBytes());
put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());
table.put(put); table.close();
HBase删除数据
Table table = connection.getTable(TableName.valueOf(tableName));
Delete delete = new Delete(rowKey.getBytes());
table.delete(delete); table.close();
HBase查询数据
Table table = connection.getTable(TableName.valueOf(tableName));
Get get = new Get(rowKey.getBytes());
get.addColumn(colFamily.getBytes(),col.getBytes());
Result result = table.get(get);
showCell(result); table.close();
MongoDB的更新
MongoCollection collection = getCollection("School", "student");
collection.updateMany(Filters.eq("sname", "Mary"), new Document("$set", new Document("sage", 22)));
System.out.println("更新成功!");
MongoDB的插入
MongoCollection collection = getCollection("School", "student");
Document doc1 = new Document("sname", "Mary").append("sage", 25);
Document doc2 = new Document("sname", "Bob").append("sage", 20);
List documents = new ArrayList();
documents.add(doc1); documents.add(doc2);
collection.insertMany(documents); System.out.println("数据插入成功");
MongoDB的查询
MongoCollection collection = getCollection("School", "student");
MongoCursor cursor2 = collection.find().iterator();
while (cursor2.hasNext()) {
System.out.println(cursor2.next().toJson()); }//while
MongoDB的删除
MongoCollection collection = getCollection("School", "student");
collection.deleteOne(Filters.eq("sname", "Bob"));
System.out.println("删除成功!");
MongoDB的建立连接和返回集合(表)
mongoClient = new MongoClient("localhost", 27017);
MongoDatabase mongoDatabase = mongoClient.getDatabase(dbname);
MongoCollection collection = mongoDatabase.getCollection(collectionname);
return collection;
词频统计的Map逻辑
public static class TokenizerMapper extends Mapper
词频统计的Reduce逻辑
public static class IntSumReducer extends Reducer {
private IntWritable result = new IntWritable();
public IntSumReducer() {
}
public void reduce(Text key, Iterable values, Reducer.Context context) throws IOException, InterruptedException {
int sum = 0; //统计单词的个数,初始为0
IntWritable val;
for(Iterator i$ = values.iterator(); i$.hasNext(); sum += val.get()) {
val = (IntWritable)i$.next();
}
this.result.set(sum); //reduce函数的处理逻辑,求和
context.write(key, this.result);
}}
Hive的启动
Hive的关闭
Hive进行词频统计
create table docs(line string);
load data inpath 'hdfs://localhost:9000/input' overwrite into table docs;
create table word_count as select word, count(1) as count from
(select explode(split(line,' '))as word from docs) w
group by word order by word;
select * from word_count;
Hive的wordcount算法详解
11.为了加速寻址,客户端会缓存位置信息,把查询过的位置信息缓存起来,这样以后访问相同的数据时,就可以直接从客户端缓存中获取Region的位置信息;寻址过程客户端只需要询问Zookeeper服务器,不需要连接Master服务器。
12.Region服务器是HBase中最核心的模块,负责维护分配给自己的Region,并响应用户的读写请求
13.一个Region服务器内部管理了一系列Region对象和一个Hlog文件,每个Hlog(磁盘上面的记录文件)由多个Store组成,每个Store(对应了表中的一个列族的存储)包含了一个Memstore(是在内存中的缓存,包含了最近更新的数据)和若干个StoreFile(磁盘中的文件)。
14.所有Region对象共用一个HLog文件。
15.create:创建表;list:列出HBase中所有的表信息;put:向表、行、列指定的单元格添加数据(一次只能为一个表的一行数据的一个列添加一个数据);scan:浏览表的相关信息;get:通过表名、行、列、时间戳、时间范围和版本号来获得相应单元格的值;Alter:修改列族模式;Count:统计表中的行数;enable/disable:使表有效或无效;drop:删除表,删除某个表之前必须先使表无效;Describe:显示表的相关信息
①HBase 的 Region 三级寻址;
②HDFS HA 确保同一时刻只有一个活跃的名称节点;
③Nimbus 将 Task 和 Supervisor 相关的信息提交到 Zookeeper 集群上。
比较标准 | RDBMS | NoSQL | 备注 |
---|---|---|---|
数据库原理 | 完全支持 | 部分支持 | RDBMS有关系代数理论作为基础NoSQL没有统一的理论基础 |
数据规模 | 大 | 超大 | RDBMS很难实现横向扩展,纵向扩展的空间也比较有限,性能会随着数据规模的增大而降低NoSQL可以很容易通过添加更多设备来支持更大规模的数据 |
数据库模式 | 固定 | 灵活 | RDBMS需要定义数据库模式,严格遵守数据定义和相关约束条件NoSQL不存在数据库模式,可以自由灵活定义并存储各种不同类型的数据 |
查询效率 | 快 | 可以实现高效的简单查询,但是不具备高度结构化查询等特性,复杂查询的性能不尽人意 | RDBMS借助于索引机制可以实现快速查询(包括记录查询和范围查询)很多NoSQL数据库没有面向复杂查询的索引,虽然NoSQL可以使用MapReduce来加速查询,但是,在复杂查询方面的性能仍然不如RDBMS |
一致性 | 强一致性 | 弱一致性 | RDBMS严格遵守事务ACID模型,可以保证事务强一致性很多NoSQL数据库放松了对事务ACID四性的要求,而是遵守BASE模型,只能保证最终一致性 |
数据完整性 | 容易实现 | 很难实现 | 任何一个RDBMS都可以很容易实现数据完整性,比如通过主键或者非空约束来实现实体完整性,通过主键、外键来实现参照完整性,通过约束或者触发器来实现用户自定义完整性但是,在NoSQL数据库却无法实现 |
扩展性 | 一般 | 好 | RDBMS很难实现横向扩展,纵向扩展的空间也比较有限NoSQL在设计之初就充分考虑了横向扩展的需求,可以很容易通过添加廉价设备实现扩展 |
可用性 | 好 | 很好 | RDBMS在任何时候都以保证数据一致性为优先目标,其次才是优化系统性能,随着数据规模的增大,RDBMS为了保证严格的一致性,只能提供相对较弱的可用性大多数NoSQL都能提供较高的可用性 |
C:一致性,是指任何一个读操作总是能够读到之前完成的写操作的结果,也就是在分布式环境中,多点的数据是一致的,或者说,所有节点在同一时间具有相同的数据。
A:可用性,是指快速获取数据,可以在确定的时间内返回操作结果,保证每个请求不管成功或者失败都有响应。
P:分区容忍性,是指当出现网络分区的情况时分离的系统也能够正常运行,也就是说,系统中任意信息的丢失或失败不会影响系统的继续运作。
处理CAP的问题时,可以有几个明显的选择
ACID | BASE |
---|---|
原子性(Atomicity) | 基本可用(Basically Available) |
一致性(Consistency) | 软状态/柔性事务(Soft state) |
隔离性(Isolation) | 最终一致性 (Eventual consistency) |
持久性 (Durable) |
最终一致性根据更新数据后各进程访问到数据的时间和方式的不同,又可以区分为:
** ** | 传统并行计算框架 | MapReduce |
---|---|---|
集群架构/容错性 | 例如HPC,共享式(共享内存/共享存储)及硬件之间高耦合,容错性差 | 非共享式,容错性好 |
硬件/价格/扩展性 | 刀片服务器、高速网、SAN(存储区域网络),价格贵,扩展性差 | 普通PC机,便宜,扩展性好 |
编程/学习难度 | what-how,难 | what,简单 |
适用场景 | 实时、细粒度计算、计算密集型 | 批处理、非实时、数据密集型 |
1)Client
2)JobTracker
3)TaskTracker
4)Task
Map端Shuffle过程
①分区partition
②写入环形内存缓冲区
③执行溢出写
排序sort—>合并combiner—>生成溢出写文件
④归并merge
合并(Combine)和归并(Merge)的区别:
两个键值对<“a”,1>和<“a”,1>,如果合并,会得到<“a”,2>
如果归并,会得到<“a”,<1,1>>
Reduce端的Shuffle过程
①复制copy
②归并merge
③reduce
(1) Reduce端的Shuffle过程----领取数据
(2) Reduce端的Shuffle过程----把数据输入给Reduce任务
(3) Reduce端的Shuffle过程----把数据输入给Reduce任务
MapReduce可以很好地应用于各种计算问题
用MapReduce实现关系的选择运算
用MapReduce实现关系的自然连接
Hadoop1.0的核心组件(仅指MapReduce和 HDFS ,不包括Hadoop生态系统内的Pig · Hive 、 HBase 等其他组件)主要存在以下不足:
Hadoop的优化与发展主要体现在两个方面:
Hadoop框架自身的改进:从1.0到2.0
组件 | Hadoop1.0****的问题 | Hadoop2.0****的改进 |
---|---|---|
HDFS | 单一名称节点,存在单点失效问题 | 设计了HDFS HA,提供名称节点热备机制 |
HDFS | 单一命名空间,无法实现资源隔离 | 设计了HDFS 联邦,管理多个命名空间 |
MapReduce | 资源管理效率低 | 设计了新的资源管理框架YARN |
HDFS联邦
解决以下三个问题
不断完善的Hadoop生态系统
组件 | 功能 | 解决Hadoop中存在的问题 |
---|---|---|
Pig | 处理大规模数据的脚本语言,用户只需要编写几条简单的语句,系统会自动转换为MapReduce作业 | 抽象层次低,需要手工编写大量代码 |
Spark | 基于内存的分布式并行编程框架,具有较高的实时性,并且较好支持迭代计算 | 延迟高,而且不适合执行迭代计算 |
Oozie | 工作流和协作服务引擎,协调Hadoop上运行的不同任务 | 没有提供作业(Job)之间依赖关系管理机制,需要用户自己处理作业之间依赖关系 |
Tez | 支持DAG作业的计算框架,对作业的操作进行重新分解和组合,形成一个大的DAG作业,减少不必要操作 | 不同的MapReduce任务之间存在重复操作,降低了效率 |
Kafka | 分布式发布订阅消息系统,一般作为企业大数据分析平台的数据交换枢纽,不同类型的分布式系统可以统一接入到Kafka,实现和Hadoop各个组件之间的不同类型数据的实时高效交换 | Hadoop生态系统中各个组件和其他产品之间缺乏统一的、高效的数据交换中介 |
HDFS HA:为了解决单点故障问题,提供热备份
HDFS1.0组件及其功能回顾名称节点保存元数据:
HDFS 1.0存在单点故障问题
第二名称节点(SecondaryNameNode )无法解决单点故障问题
第二名称节点用途
主要是防止日志文件EditLog过大,导致名称节点失败恢复时消耗过多时间
不是热备份,附带起到冷备份功能
HDFS1.0中仍存在的问题
HDFS Federation的设计
HDFS Federation的访问方式
HDFS Federation相对于HDFS 1.0的优势
YARN架构思路:将原JobTacker三大功能拆分
ResourceManager
处理客户端请求
启动/监控ApplicationMaster
监控NodeManager
资源分配与调度
ApplicationMaster
NodeManager
ApplicationMaster的主要功能是:
NodeManager是驻留在一个YARN集群中的每个节点上的代理,主要负责:
需要说明的是,NodeManager主要负责管理抽象的容器,只处理与容器相关的事情,而不具体负责每个任务(Map任务或Reduce任务)自身状态的管理,因为这些管理工作是由
ApplicationMaster完成的,ApplicationMaster会通过不断与NodeManager通信来掌握各个任务的执行状态
步骤1:用户编写客户端应用程序,向YARN提交应用程序,提交的内容包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等
步骤2: YARN中的RM负责接收和处理来自客户端的请求,为应用程序分配一个容器,在该容器中启动一个AM
步骤3:AM被创建后会首先向RM注册
步骤4:AM采用轮询的方式向RM申请资源
步骤5:RM以“容器”的形式向提出申请的AM分配资源
步骤6:在容器中启动任务
步骤7:各个任务向自己的AM汇报自己的状态和进度
步骤8:应用程序运行完成后,AM向RM的应用程序管理器注销并关闭自己
同上
总体而言,YARN相对于MapReduce1.0来说具有以下优势:
大大减少了承担中心服务功能的ResourceManager的资源消耗
MapReduce1.0既是一个计算框架,又是一个资源管理调度框架,但是,只能支持MapReduce编程模型。而YARN则是一个纯粹的资源调度管理框架,在它上面可以运行包括MapReduce在内的不同类型的计算框架,只要编程实现相应的ApplicationMaster
YARN中的资源管理比MapReduce1.0更加高效
YARN的目标就是实现“一个集群多个框架”,为什么?
一个企业当中同时存在各种不同的业务应用场景,需要采用不同的计算框架
这些产品通常来自不同的开发团队,具有各自的资源调度管理机制
为了避免不同类型应用之间互相干扰,企业就需要把内部的服务器拆分成多个集群,分别安装运行不同的计算框架,即“一个框架一个集群”
导致问题
YARN的目标就是实现“一个集群多个框架”,即在一个集群上部署一个统一的资源调度管理框架YARN,在YARN之上可以部署其他各种计算框架
由YARN为这些计算框架提供统一的资源调度管理服务,并且能够根据各种计算框架的负载需求,调整各自占用的资源,实现集群资源共享和资源弹性收缩
可以实现一个集群上的不同应用负载混搭,有效提高了集群的利用率
不同计算框架可以共享底层存储,避免了数据集跨集群移动
HDFS(分布式文件系统)、Hbase(分布式数据库)、MapReduce(批处理计算框架)、Hive(数据仓库)、Pig(流数据处理)、Mahout(机器学习算法库)、Zookeeper(分布式协作服务)、Flume(日志收集)、Sqoop(和 RDBMS 交换数据)
1,HDFS(hadoop分布式文件系统)
是hadoop体系中数据存储管理的基础。他是一个高度容错的系统,能检测和应对硬件故障。
client:切分文件,访问HDFS,与那么弄得交互,获取文件位置信息,与DataNode交互,读取和写入数据。
namenode:master节点,在hadoop1.x中只有一个,管理HDFS的名称空间和数据块映射信息,配置副本策略,处理客户 端请求。
DataNode:slave节点,存储实际的数据,汇报存储信息给namenode。
secondary namenode:辅助namenode,分担其工作量:定期合并fsimage和fsedits,推送给namenode;紧急情况下和辅助恢复namenode,但其并非namenode的热备。
2,mapreduce(分布式计算框架)
mapreduce是一种计算模型,用于处理大数据量的计算。其中map对应数据集上的独立元素进行指定的操作,生成键-值对形式中间,reduce则对中间结果中相同的键的所有值进行规约,以得到最终结果。
jobtracker:master节点,只有一个,管理所有作业,任务/作业的监控,错误处理等,将任务分解成一系列任务,并分派给tasktracker。
tacktracker:slave节点,运行 map task和reducetask;并与jobtracker交互,汇报任务状态。
map task:解析每条数据记录,传递给用户编写的map()并执行,将输出结果写入到本地磁盘(如果为map—only作业,则直接写入HDFS)。
reduce task:从map 它深刻地执行结果中,远程读取输入数据,对数据进行排序,将数据分组传递给用户编写的reduce函数执行。
3, hive(基于hadoop的数据仓库)
由Facebook开源,最初用于解决海量结构化的日志数据统计问题。
hive定于了一种类似sql的查询语言(hql)将sql转化为mapreduce任务在hadoop上执行。
4,hbase(分布式列存数据库)
hbase是一个针对结构化数据的可伸缩,高可靠,高性能,分布式和面向列的动态模式数据库。和传统关系型数据库不同,hbase采用了bigtable的数据模型:增强了稀疏排序映射表(key/value)。其中,键由行关键字,列关键字和时间戳构成,hbase提供了对大规模数据的随机,实时读写访问,同时,hbase中保存的数据可以使用mapreduce来处理,它将数据存储和并行计算完美结合在一起。
5,zookeeper(分布式协作服务)
解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。
6,sqoop(数据同步工具)
sqoop是sql-to-hadoop的缩写,主要用于传统数据库和hadoop之间传输数据。数据的导入和导出本质上是mapreduce程序,充分利用了MR的并行化和容错性。
7,pig(基于hadoop的数据流系统)
定义了一种数据流语言-pig latin,将脚本转换为mapreduce任务在hadoop上执行。通常用于离线分析。
8,mahout(数据挖掘算法库)
mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建只能应用程序。mahout现在已经包含了聚类,分类,推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。除了算法是,mahout还包含了数据的输入/输出工具,与其他存储系统(如数据库,mongoDB或Cassandra)集成等数据挖掘支持架构。
9,flume(日志收集工具)
cloudera开源的日志收集系统,具有分布式,高可靠,高容错,易于定制和扩展的特点。他将数据从产生,传输,处理并写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在flume中定制数据发送方,从而支持收集各种不同协议数据。
10,资源管理器的简单介绍(YARN和mesos)
随着互联网的高速发展,基于数据 密集型应用 的计算框架不断出现,从支持离线处理的mapreduce,到支持在线处理的storm,从迭代式计算框架到 流式处理框架s4,…,在大部分互联网公司中,这几种框架可能都会采用,比如对于搜索引擎公司,可能的技术方法如下:网页建索引采用mapreduce框架,自然语言处理/数据挖掘采用spark,对性能要求到的数据挖掘算法用mpi等。公司一般将所有的这些框架部署到一个公共的集群中,让它们共享集群的资源,并对资源进行统一使用,这样便诞生了资源统一管理与调度平台,典型的代表是mesos和yarn。
11,其他的一些开源组件:
1)cloudrea impala:
一个开源的查询引擎。与hive相同的元数据,SQL语法,ODBC驱动程序和用户接口,可以直接在HDFS上提供快速,交互式SQL查询。impala不再使用缓慢的hive+mapreduce批处理,而是通过与商用并行关系数据库中类似的分布式查询引擎。可以直接从HDFS或者Hbase中用select,join和统计函数查询数据,从而大大降低延迟。
2)spark:
spark是个开源的数据 分析集群计算框架,最初由加州大学伯克利分校AMPLab,建立于HDFS之上。spark与hadoop一样,用于构建大规模,延迟低的数据分析应用。spark采用Scala语言实现,使用Scala作为应用框架。
spark采用基于内存的分布式数据集,优化了迭代式的工作负载以及交互式查询。
与hadoop不同的是,spark与Scala紧密集成,Scala象管理本地collective对象那样管理分布式数据集。spark支持分布式数据集上的迭代式任务,实际上可以在hadoop文件系统上与hadoop一起运行(通过YARN,MESOS等实现)。
3)storm
storm是一个分布式的,容错的计算系统,storm属于流处理平台,多用于实时计算并更新数据库。storm也可被用于“连续计算”,对数据流做连续查询,在计算时将结果一流的形式输出给用户。他还可被用于“分布式RPC”,以并行的方式运行昂贵的运算。
4)kafka
kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息
5)redis
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
数据仓库(Data Warehouse)是一个面向主题的
( Subject Oriented)·集成的( lntegrated )﹑相对稳定的( Non-Volatile)·反映历史变化( Time Variant)的数据集合,用于支持管理决策
企业数据仓库有效集成了来自不同部门、不同地理位置﹑具有不同格式的数据,为企业管理决策者提供了企业范围内的单一数据视图,从而为综合分析和科学决策奠定了坚实的基础。
数据仓库体系结构通常包含4个层次:
对比项目 | Hive | 传统数据库 |
---|---|---|
数据存储 | HDFS | 本地文件系统 |
索引 | 支持有限索引 | 支持复杂索引 |
分区 | 支持 | 支持 |
执行引擎 | MapReduce、Tez、Spark | 自身的执行引擎 |
执行延迟 | 高 | 低 |
扩展性 | 好 | 有限 |
数据规模 | 大 | 小 |
除了用CLI和 HWI工具来访问Hive 外,还可以采用以下几种典型外部访问工具:
Karmasphere是由Karmasphere公司发布的一个商业产品。
Hue是由 Cloudera公司提供的一个开源项目
Qubole 公司提供了“Hive即服务”的方式
托管在AWS平台,这样用户在分析存储在亚马逊S3云中的数据集时,就无需了解Hadoop系统管理;
提供的Hadoop服务能够根据用户的工作负载动态调整服务器资源配置,实现随需计算。
1是表User的标记位
2是表Order的标记位
当用户向Hive输入一段命令或查询时,Hive 需要与Hadoop交互工作来完成该操作:
说明:
Hive HA(Hive High Availability)高可用Hive解决方案
Hive在极少数情况下,甚至会出现端口不响应或者进程丢失的问题
Hive HA原理:
将若干个hive实例纳入一个资源池,然后对外提供一个唯一的接口,进行proxy relay。
对于程序开发人员,就把它认为是一台超强“hive" 。每次它接收到一个HIVE查询连接后,都会轮询资源池里可用的hive资源。
类型 | 描述 | 示例 |
---|---|---|
TINYINT | 1个字节(8位)有符号整数 | 1 |
SMALLINT | 2个字节(16位)有符号整数 | 1 |
INT | 4个字节(32位)有符号整数 | 1 |
BIGINT | 8个字节(64位)有符号整数 | 1 |
FLOAT | 4个字节(32位)单精度浮点数 | 1.0 |
DOUBLE | 8个字节(64位)双精度浮点数 | 1.0 |
BOOLEAN | 布尔类型,true/false | true |
STRING | 字符串,可以指定字符集 | “xmu” |
TIMESTAMP | 整数、浮点数或者字符串 | 1327882394(Unix新纪元秒) |
BINARY | 字节数组 | [0,1,0,1,0,1,0,1] |
类型 | 描述 | 示例 |
---|---|---|
ARRAY | 一组有序字段,字段的类型必须相同 | Array(1,2) |
MAP | 一组无序的键/值对,键的类型必须是原子的,值可以是任何数据类型,同一个映射的键和值的类型必须相同 | Map(‘a’,1,’b’,2) |
STRUCT | 一组命名的字段,字段类型可以不同 | Struct(‘a’,1,1,0) |
1.Hive安装
安装Hive之前需要安装jdk1.6以上版本以及启动Hadoop o
2.Hive配置
Hive有三种运行模式,单机模式﹑伪分布式模式、分布式模式。
均是通过修改hive-site.xml文件实现,如果hive-site.xml文件不存在,我们可以参考$HIVE_HOME/conf目录下的hive-default.xml.template文件新建
用户自定义函数类别分为以下三种
创建自定义函数的步骤
兴趣相似的用户往往有相同的物品喜好;第一步:找到和目标用户兴趣相似的用户集合,Wuv = |N(u)∩N(v)| / sqrt(|N(u)||N(v)|),其中令 N(u)表示用户 u 感兴趣的物品集合(物品->用户倒排表);第二步:找到该集合中的用户所喜欢的、且目标用户没有听说过的物品推荐给目标用户,用户u对物品i的感兴趣程度p(u,i) = ∑[v∈S(u,K)∩N(i)] Wuv,S(u, K)是和用户 u 兴趣最接近的 K 个用户的集合,N(i)是喜欢物品 i 的用户集合,对所有物品计算*Pui后,可以对 Pui进行降序处理,取前N个物品作为推荐结果展示给用户u
给目标用户推荐那些和他们之前喜欢的物品相似的物品;第一步:计算物品之间的相似度,Wij = |N(i)∩N(j)| / sqrt(|N(i)||N(j)|),其中 N(u)是用户 u 喜欢的物品的集合(物品->物品倒排表)第二步:根据物品的相似度和用户的历史行为,给用户生成推荐列表,用户 u 对物品 j 的兴趣程度 p(u,j) = ∑[i∈S(j,K)∩N(u)] Wji,S(j, K)是和物品 j 最相似的 K 个物品的集合,N(u)是用户 u 喜欢的物品的集合。
①UserCF 算法推荐的是那些和目标用户有共同兴趣爱好的其他用户所喜欢的物品;
②ItemCF 算法推荐的是那些和目标用户之前喜欢的物品类似的其他物品;
③UserCF 算法的推荐更偏向社会化,而 ItemCF 算法的
推荐更偏向于个性化。
对应着两种截然不同的计算模式:批量计算和实时计算
高性能:处理大数据的基本要求,如每秒处理几十万条数据
海量式:支持TB级甚至是PB级的数据规模
实时性:保证较低的延迟时间,达到秒级别,甚至是毫秒级别
分布式:支持大数据的基本架构,必须能够平滑扩展
易用性:能够快速进行开发和部署
商业级的流计算平台(IBM InfoSphere Streams和IBM StreamBase )
开源流计算框架(Twitter Storm:免费、开源的分布式实时计算系统,可简单、高效、可靠地处理大量的流数据
Yahoo! S4(Simple Scalable Streaming System):开源流计算平台,是通用的、分布式的、可扩展的、分区容错的、可插拔的流式系统 )
公司为支持自身业务开发的流计算框架
数据实时采集阶段通常采集多个数据源的海量数据,需要保证实时性、低延迟与稳定可靠
目前有许多互联网公司发布的开源分布式日志采集系统均可满足每秒数百MB的数据采集和传输需求,如: Facebook的Scribe LinkedIn的Kafka 淘宝的Time Tunnel 基于Hadoop的Chukwa和Flume
Agent:主动采集数据,并把数据推送到Collector部分
Collector:接收多个Agent的数据,并实现有序、可靠、高性能的转发
Store:存储Collector转发过来的数据(对于流计算不存储数据)
实时查询服务经由流计算框架得出的结果可供用户进行实时查询、展示或储存
传统的数据处理流程,用户需要主动发出查询才能获得想要的结果。而在流处理流程中,实时查询服务可以不断更新结果,并将用户所需的结果实时推送给用户
虽然通过对传统的数据处理系统进行定时查询,也可以实现不断地更新结果和结果推送,但通过这样的方式获取的结果,仍然是根据过去某一时刻的数据得到的结果,与实时结果有着本质的区别
流处理系统处理的是实时的数据,而传统的数据处理系统处理的是预先存储好的静态数据
用户通过流处理系统获取的是实时结果,而通过传统的数据处理系统,获取的是过去某一时刻的结果
流处理系统无需用户主动发出查询,实时查询服务可以主动将实时结果推送给用户
整合性:Storm可方便地与队列系统和数据库系统进行整合
简易的API:Storm的API在使用上即简单又方便
可扩展性:Storm的并行特性使其可以运行在分布式集群中
容错性:Storm可自动进行故障节点的重启、任务的重新分配
可靠的消息处理:Storm保证每个消息都能完整处理
支持各种编程语言:Storm支持使用各种编程语言来定义任务
快速部署:Storm可以快速进行部署和使用
免费、开源:Storm是一款开源框架,可以免费使用
包括Streams、Spouts、Bolts、Topology和Stream Groupings
Streams:Storm将流数据Stream描述成一个无限的Tuple序列,这些Tuple序列会以分布式的方式并行地创建和处理
Spout:Storm认为每个Stream都有一个源头,并把这个源头抽象为Spout
通常Spout会从外部数据源(队列、数据库等)读取数据,然后封装成Tuple形式,发送到Stream中。Spout是一个主动的角色,在接口内部有个nextTuple函数,Storm框架会不停的调用该函数
Bolt:Storm将Streams的状态转换过程抽象为Bolt。Bolt即可以处理Tuple,也可以将处理后的Tuple作为新的Streams发送给其他Bolt
Bolt可以执行过滤、函数操作、Join、操作数据库等任何操作
Bolt是一个被动的角色,其接口中有一个execute(Tuple input)方法,在接收到消息之后会调用此函数,用户可以在此方法中执行自己的处理逻辑
Topology:Storm将Spouts和Bolts组成的网络抽象成Topology,它可以被提交到Storm集群执行。Topology可视为流转换图,图中节点是一个Spout或Bolt,边则表示Bolt订阅了哪个Stream。当Spout或者Bolt发送元组时,它会把元组发送到每个订阅了该Stream的Bolt上进行处理
Topology里面的每个处理组件(Spout或Bolt)都包含处理逻辑, 而组件之间的连接则表示数据流动的方向
Stream Groupings:Storm中的Stream Groupings用于告知Topology如何在两个组件间(如Spout和Bolt之间,或者不同的Bolt之间)进行Tuple的传送。每一个Spout和Bolt都可以有多个分布式任务,一个任务在什么时候、以什么方式发送Tuple就是由Stream Groupings来决定的
ShuffleGrouping:随机分组,随机分发Stream中的Tuple,保证每个Bolt的Task接收Tuple数量大致一致
FieldsGrouping:按照字段分组,保证相同字段的Tuple分配到同一个Task中
AllGrouping:广播发送,每一个Task都会收到所有的Tuple
GlobalGrouping:全局分组,所有的Tuple都发送到同一个Task中
NonGrouping:不分组,和ShuffleGrouping类似,当前Task的执行会和它的被订阅者在同一个线程中执行
DirectGrouping:直接分组,直接指定由某个Task来执行Tuple的处理
Storm与Hadoop架构组件功能对应关系
** ** | Hadoop | Storm |
---|---|---|
应用名称 | Job | Topology |
系统角色 | JobTracker | Nimbus |
TaskTracker | Supervisor | |
组件接口 | Map/Reduce | Spout/Bolt |
Storm集群采用“Master—Worker”的节点方式:
Master节点运行名为“Nimbus”的后台程序(类似Hadoop中的“JobTracker”),负责在集群范围内分发代码、为Worker分配任务和监测故障
Worker节点运行名为“Supervisor”的后台程序,负责监听分配给它所在机器的工作,即根据Nimbus分配的任务来决定启动或停止Worker进程,一个Worker节点上同时运行若干个Worker进程
Storm使用Zookeeper来作为分布式协调组件,负责Nimbus和多个Supervisor之间的所有协调工作
Master 节点运行名为“Nimbus”的后台程序,Worker 节点运行名为“Supervisor”的后台程序。
①所有 Topology 任务的提交必须在 Storm 客户端节点上进行,提交后,由 Nimbus 节点分配给其他 Supervisor 节点进行处理。
②Nimbus 节点首先将提交的 Topology 进行分片,分成一个个 Task,分配给相应的 Supervisor,并将 Task 和 Supervisor相关的信息提交到Zookeeper 集群上;
③Supervisor 会去Zookeeper 集群上认领自己的Task,通知自己的 Worker 进程进行 Task 的处理
数据可视化是指将大型数据集中的数据以图形图像形式表示,并利用数据分析和开发工具发现其中未知信息的处理过程
数据可视化技术的基本思想是将数据库中每一个数据项作为单个图元素表示,大量的数据集构成数据图像,同时将数据的各个属性值以多维数据的形式表示,可以从不同的维度观察数据,从而对数据进行更深入的观察和分析
在大数据时代,可视化技术可以支持实现多种不同的目标:
观测、跟踪数据
分析数据
辅助理解数据
增强数据吸引力
信息图表是信息、数据、知识等的视觉化表达,它利用人脑对于图形信息相对于文字信息更容易理解的特点,更高效、直观、清晰地传递信息,在计算机科学、数学以及统计学领域有着广泛的应用
Google Chart API
谷歌公司的制图服务接口Google Chart API,可以用来为统计数据自动生成图片,该工具使用非常简单,不需要安装任何软件,可以通过浏览器在线查看统计图表 https://developers.google.cn/chart /interactive/docs
D3
D3是最流行的可视化库之一,是一个用于网页作图、生成互动图形的JavaScript函数库,提供了一个D3对象,所有方法都通过这个对象调用。D3能够提供大量线性图和条形图之外的复杂图表样式,例如Voronoi图、树形图、圆形集群和单词云等。
Visual.ly
Visual.ly是一款非常流行的信息图制作工具,非常好用,不需要任何设计相关的知识,就可以用它来快速创建自定义的、样式美观且具有强烈视觉冲击力的信息图表。
Tableau
Tableau是桌面系统中最简单的商业智能工具软件,更适合企业和部门进行日常数据报表和数据可视化分析工作。Tableau实现了数据运算与美观的图表的完美结合,用户只要将大量数据拖放到数字“画布”上,转眼间就能创建好各种图表。
大数据魔镜
大数据魔镜是一款优秀的国产数据分析软件,它丰富的数据公式和算法可以让用户真正理解探索分析数据,用户只要通过一个直观的拖放界面就可创造交互式的图表和数据挖掘模型。
Google Fusion Tables
Google Fusion Tables让一般使用者也可以轻松制作出专业的统计地图。该工具可以让数据表呈现为图表、图形和地图,从而帮助发现一些隐藏在数据背后的模式和趋势。
Modest Maps
Modest Maps是一个小型、可扩展、交互式的免费库,提供了一套查看卫星地图的API,只有10KB大小,是目前最小的可用地图库,它也是一个开源项目,有强大的社区支持,是在网站中整合地图应用的理想选择。
Leaflet
Leaflet是一个小型化的地图框架,通过小型化和轻量化来满足移动网页的需要。
时间线是表现数据在时间维度的演变的有效方式,它通过互联网技术,依据时间顺序,把一方面或多方面的事件串联起来,形成相对完整的记录体系,再运用图文的形式呈现给用户。时间线可以运用于不同领域,最大的作用就是把过去的事物系统化、完整化、精确化。
Timetoast
Timetoast是在线创作基于时间轴事件记载服务的网站,提供个性化的时间线服务,可以用不同的时间线来记录你某个方面的发展历程、心理路程、进度过程等等。Timetoast基于 flash 平台,可以在类似 flash时间轴上任意加入事件,定义每个事件的时间、名称、图像、描述,最终在时间轴上显示事件在时间序列上的发展,事件显示和切换十分流畅,随着鼠标点击可显示相关事件,操作简单。
Xtimeline
Xtimeline 是一个免费的绘制时间线的在线工具网站,操作简便,用户通过添加事件日志的形式构建时间表,同时也可给日志配上相应的图表。不同于Timetoast的是,Xtimeline是一个社区类型的时间轴网站,其中加入了组群功能和更多的社会化因素,除了可以分享和评论时间轴外,还可以建立组群讨论所制作的时间轴。
R
R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具,使用难度较高。R的功能包括数据存储和处理系统、数组运算工具(具有强大的向量、矩阵运算功能)、完整连贯的统计分析工具、优秀的统计制图功能、简便而强大的编程语言,可操纵数据的输入和输出,实现分支、循环以及用户可自定义功能等,通常用于大数据集的统计与分析。
Weka
Weka是一款免费的、基于Java环境的、开源的机器学习以及数据挖掘软件,不但可以进行数据分析,还可以生成一些简单图表。
Gephi
Gephi是一款比较特殊也很复杂的软件,主要用于社交图谱数据可视化分析,可以生成非常酷炫的可视化图形。
已知HBase数据库中已经存在一个学生表student(id,name,sex,age),表中的数据如下所示,其中id是行键。请按要求写出下列操作的HBase Shell命令。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2t7xBiT2-1671264200600)(file:///C:\Users\HUAWEI\AppData\Local\Temp\ksohtml11156\wps1.jpg)]
1 scan ‘student’
2 get ‘student’ ,’2015001’
3 put ‘student’,’2015004’,’info:name’,’chenli’
4 put ‘student’,’2015003’,’age’,’25’
5 deleteall ‘student’,’2015002’
要任何设计相关的知识,就可以用它来快速创建自定义的、样式美观且具有强烈视觉冲击力的信息图表。
Tableau
Tableau是桌面系统中最简单的商业智能工具软件,更适合企业和部门进行日常数据报表和数据可视化分析工作。Tableau实现了数据运算与美观的图表的完美结合,用户只要将大量数据拖放到数字“画布”上,转眼间就能创建好各种图表。
大数据魔镜
大数据魔镜是一款优秀的国产数据分析软件,它丰富的数据公式和算法可以让用户真正理解探索分析数据,用户只要通过一个直观的拖放界面就可创造交互式的图表和数据挖掘模型。
Google Fusion Tables
Google Fusion Tables让一般使用者也可以轻松制作出专业的统计地图。该工具可以让数据表呈现为图表、图形和地图,从而帮助发现一些隐藏在数据背后的模式和趋势。
Modest Maps
Modest Maps是一个小型、可扩展、交互式的免费库,提供了一套查看卫星地图的API,只有10KB大小,是目前最小的可用地图库,它也是一个开源项目,有强大的社区支持,是在网站中整合地图应用的理想选择。
Leaflet
Leaflet是一个小型化的地图框架,通过小型化和轻量化来满足移动网页的需要。
时间线是表现数据在时间维度的演变的有效方式,它通过互联网技术,依据时间顺序,把一方面或多方面的事件串联起来,形成相对完整的记录体系,再运用图文的形式呈现给用户。时间线可以运用于不同领域,最大的作用就是把过去的事物系统化、完整化、精确化。
Timetoast
Timetoast是在线创作基于时间轴事件记载服务的网站,提供个性化的时间线服务,可以用不同的时间线来记录你某个方面的发展历程、心理路程、进度过程等等。Timetoast基于 flash 平台,可以在类似 flash时间轴上任意加入事件,定义每个事件的时间、名称、图像、描述,最终在时间轴上显示事件在时间序列上的发展,事件显示和切换十分流畅,随着鼠标点击可显示相关事件,操作简单。
Xtimeline
Xtimeline 是一个免费的绘制时间线的在线工具网站,操作简便,用户通过添加事件日志的形式构建时间表,同时也可给日志配上相应的图表。不同于Timetoast的是,Xtimeline是一个社区类型的时间轴网站,其中加入了组群功能和更多的社会化因素,除了可以分享和评论时间轴外,还可以建立组群讨论所制作的时间轴。
R
R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具,使用难度较高。R的功能包括数据存储和处理系统、数组运算工具(具有强大的向量、矩阵运算功能)、完整连贯的统计分析工具、优秀的统计制图功能、简便而强大的编程语言,可操纵数据的输入和输出,实现分支、循环以及用户可自定义功能等,通常用于大数据集的统计与分析。
Weka
Weka是一款免费的、基于Java环境的、开源的机器学习以及数据挖掘软件,不但可以进行数据分析,还可以生成一些简单图表。
Gephi
Gephi是一款比较特殊也很复杂的软件,主要用于社交图谱数据可视化分析,可以生成非常酷炫的可视化图形。