Scala编程语言
Scala是一门多范式的静态编程语言,一种类似 Java 的编程语言,设计初衷是实现可伸缩的语言、并集成面向对象编程和函数式编程的各种特性。
Scala介绍
Scala的6大特性
1、Java 和 scala 可以混编
2、类型推测(自动推测类型)
3、并发和分布式(Actor)
4、特质,特征(类似 java 中 interfaces 和 abstract结合)
5、模式匹配(类似 java switch)
6、高阶函数
Scala安装使用
1、windows安装,配置环境变量
官网下载 scala2.10:http://www.scala-lang.org/download/2.10.4.html
下载好后安装。双击msi包安装,记住安装的路径。
配置环境变量(和配置jdk一样)
新建SCALA_HOME
上个步骤完成后,编辑Path变量,在后面追加:;%SCALA_HOME%\bin
打开cmd,输入:scala 看是否显示版本号,确定是否安装成功
2、eclipse 配置scala插件
下载插件(一定要对应eclipse版本下载)
http://sc ...
Redis存储系统
Redis是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。拥有丰富的支持主流语言的客户端,C、C++、Python、Erlang、R、C#、Java、PHP、ObjectiveC、Perl、Ruby、Scala、Go、JavaScript。
Redis的特点
1、数据结构丰富
Redis 虽然也是键值对数据库,但是和 Memcached 不同的是,Redis 的值支持多种类型的数据结构,不仅可以是字符串,同时还提供散列(hash),列表(list),集合(sets),有序集合(sorted sets)等数据结构。
通过选用不同的数据结构,用户可以使用 Redis 解决各式各样的问题。
数据库有两种,一种硬盘数据库,一种内存数据库。
硬盘是把值储存在硬盘,典型的是 SQL 数据库。在内存里面就存储一下索引,当硬盘数据库想访问硬盘的值
时,它先在内存里面找到索引,然后在找值,问题是什么,在读取和写入硬盘的时候,如果读写比较多的时候,它会把硬盘 IO 堵死。
至于内存数据库,它会直接把值放到内存里面,内存数据库就直接把值取到,风一样的感觉,读 ...
关于ElasticSearch的优化方案
关于ElasticSearch的应用方案有很多,下面具体列举一些工作中常用到的几种。
1、调大系统的"最大打开文件数",建议 32K 甚至是 64K
ulimit -a #查看ulimit -n 32000 #设置
2、修改配置文件调整 ES 的 JVM 内存大小
修改 bin/elasticsearch.in.sh 中 ES_MIN_MEM 和 ES_MAX_MEM 的大小,建议设置一样大,避免频繁的分配内存,根据服务器内存大小,一般分配 60%左右(默认 256M)。
3、设置 mlockall 来锁定进程的物理内存地址
避免交换(swapped)来提高性能
修改文件 conf/elasticsearch.yml
bootstrap.mlockall: true
4、分片的设置,5-20 个比较合适
如果分片数过少或过多,都会导致检索比较慢。
分片数过多会导致检索时打开比较多的文件,另外也会导致多台服务器之间通讯。
分片数过少会导至单个分片索引过大,所以检索速度慢。
建议单个分片最多存储 20G 左右的索引数据,所以,分片数量=数据总量/20 ...
Elasticsearch分布式搜索引擎
ES简介
Elasticsearch 是一个基于 Lucene 的实时的分布式搜索和分析 引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠, 快速,安装使用方便。基于 RESTful 接口。
Lucene 与 ES 关系
1、Lucene 只是一个库。想要使用它,你必须使用 Java 来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene 非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。
2、Elasticsearch 也使用 Java 开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。
Elasticsearch 与 Solr 对比
1、ElasticSearch查询速度更快。
2、Elasticsearch是分布式的。不需要其他组件,分发是实时的。
3、Elasticsearch 完全支持 Apache Lucene 的接近实时的搜索,处理多租户(multitenancy)不需要特殊配置,而 Solr 则需要更多的高级设置。
4、El ...
Flume框架
Flume简介
Flume 是一个分布式、可扩展、可靠、高可用的海量日志有效聚合及移动的框架。
官网:http://flume.apache.org/
它通常用于log数据,支持在系统中定制各类数据发送方,用于收集数据。它具有可靠性和容错可调机制和许多故障转移和恢复机制。
Flume通常用于收集日志数据,但不限于收集日志,还可以收集其他的数据信息。
Flume组织架构
Flume的版本分为 OG 组织架构和 NG 组织架构,但原来的Flume OG到现在的Flume NG,进行了架构重构,并且现在NG版本完全不兼容原来的OG版本。
OG组织架构
Flume OG:Flume original generation 即 Flume 0.9.x版本,它采用三层架构,分别为agent,Collector和Master,所有的 agent 和 Collector 由 master 统一管理,master允许有多个(使用Zookeeper进行管理和负载均衡),避免单点故障问题。
NG组织架构
Flume NG:Flume next generation ,即Flume 1.x版本,只有 a ...
Sqoop架构
Sqoop 简介
Sqoop是将关系数据库(oracle、mysql、postgresql等)数据与hadoop数据进行转换的工具。
官网:http://sqoop.apache.org/
版本:(两个版本完全不兼容,sqoop1使用最多)
sqoop1:1.4.x
sqoop2:1.99.x
同类产品:
DataX:阿里顶级数据交换工具
Sqoop 架构
sqoop 架构非常简单,是 hadoop 生态系统的架构最简单的框架,它主要由三个部分组成:Sqoop client、HDFS/HBase/Hive、Database。
sqoop1 由 client 端直接接入 hadoop,任务通过解析生成对应的 maprecue 执行。
Sqoop 导入
Sqoop 导出
Sqoop 安装使用
Sqoop 安装
1、下载解压 Sqoop
可以到apache基金sqoop官网 http://hive.apache.org/,选择镜像下载地址:http://mirror.bit.edu.cn/apache/sqoop/下载一个稳定版本。
**2、配置环境变量 **
vim ~ ...
HBase性能优化
关于HBase的性能优化方法很多种,现在说说常用的几种,主要分为表设计、写表和读表操作。
HBase表的设计
Pre-Creating Regions(预分区)
默认情况下,在创建 HBase 表的时候会自动创建一个 region 分区,当导入数据的时候,所有的 HBase 客户端都向这一个 region 写数据,直到这个 region 足够大了才进行切分。如果在创建 HBase 的时候就进行预分区,则会减少当数据量猛增时由于 region split 带来的资源消耗,从而加快批量写入速度。这样当数据写入 HBase 时,会按照 region 分区情况,在集群内做数据的负载均衡。
HBase 表的预分区需要紧密结合业务场景来选择分区的 key 值,每个 region 都有一个 startKey 和一个 endKey 来表示该 region 存储的 rowKey 范围。
举例说明:
1、创建一个表 fq,列族为 cf1,被 splits 切成4个 region
方法一:
create 'fq', 'cf1', SPLITS => [ ...
分布式数据库HBase
Hbase简介对比
HBase的概念
HBase-Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库。
在Hadoop生态圈中,它是其中一部分且利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为其分布式协同服务,主要用来存储非结构化和半结构化的松散数据(NoSQL非关系型数据库有redis、MongoDB等)。
而我们的HBase就是这样一个非关系型数据库。
简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
关系型与非关系型数据库对比
关系型数据库
1、关系型数据库的3大优点
**容易理解:**二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解。
**使用方便:**通用的SQL语言使得操作关系型数据库非常方便。
**易于维护:**丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率。
2、关系型数据库的3大瓶颈
(1)高 ...