在阿里云Linux上安装Mongo DB 3.0

Installation Steps

$ cd /etc/yum.repos.d
$ sudo vi mongodb-org-3.0.repo

[mongodb-org-3.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/
gpgcheck=0
enabled=1

$ sudo yum install -y mongodb-org

Loaded plugins: branch, security
mongodb-org-3.0 | 951 B 00:00
mongodb-org-3.0/primary | 8.6 kB 00:00
mongodb-org-3.0 45/45
Setting up Install Process
Resolving Dependencies
–> Running transaction check
—> Package mongodb-org.x86_64 0:3.0.6-1.el6 will be installed
–> Processing Dependency: mongodb-org-shell = 3.0.6 for package: mongodb-org-3.0.6-1.el6.x86_64
–> Processing Dependency: mongodb-org-tools = 3.0.6 for package: mongodb-org-3.0.6-1.el6.x86_64
–> Processing Dependency: mongodb-org-server = 3.0.6 for package: mongodb-org-3.0.6-1.el6.x86_64
–> Processing Dependency: mongodb-org-mongos = 3.0.6 for package: mongodb-org-3.0.6-1.el6.x86_64
–> Running transaction check
—> Package mongodb-org-mongos.x86_64 0:3.0.6-1.el6 will be installed
—> Package mongodb-org-server.x86_64 0:3.0.6-1.el6 will be installed
—> Package mongodb-org-shell.x86_64 0:3.0.6-1.el6 will be installed
—> Package mongodb-org-tools.x86_64 0:3.0.6-1.el6 will be installed
–> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================================
Package Arch Version Repository Size
====================================================================================================================================
Installing:
mongodb-org x86_64 3.0.6-1.el6 mongodb-org-3.0 4.6 k
Installing for dependencies:
mongodb-org-mongos x86_64 3.0.6-1.el6 mongodb-org-3.0 3.9 M
mongodb-org-server x86_64 3.0.6-1.el6 mongodb-org-3.0 8.3 M
mongodb-org-shell x86_64 3.0.6-1.el6 mongodb-org-3.0 4.1 M
mongodb-org-tools x86_64 3.0.6-1.el6 mongodb-org-3.0 31 M

Transaction Summary
====================================================================================================================================
Install 5 Package(s)

Total download size: 48 M
Installed size: 149 M
Downloading Packages:
(1/5): mongodb-org-3.0.6-1.el6.x86_64.rpm | 4.6 kB 00:00
(2/5): mongodb-org-mongos-3.0.6-1.el6.x86_64.rpm | 3.9 MB 00:12
(3/5): mongodb-org-server-3.0.6-1.el6.x86_64.rpm | 8.3 MB 00:09
(4/5): mongodb-org-shell-3.0.6-1.el6.x86_64.rpm | 4.1 MB 00:07
(5/5): mongodb-org-tools-3.0.6-1.el6.x86_64.rpm | 31 MB 00:27
————————————————————————————————————————————
Total 800 kB/s | 48 MB 01:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : mongodb-org-server-3.0.6-1.el6.x86_64 1/5
Installing : mongodb-org-shell-3.0.6-1.el6.x86_64 2/5
Installing : mongodb-org-mongos-3.0.6-1.el6.x86_64 3/5
Installing : mongodb-org-tools-3.0.6-1.el6.x86_64 4/5
Installing : mongodb-org-3.0.6-1.el6.x86_64 5/5

Installed:
mongodb-org.x86_64 0:3.0.6-1.el6

Dependency Installed:
mongodb-org-mongos.x86_64 0:3.0.6-1.el6 mongodb-org-server.x86_64 0:3.0.6-1.el6 mongodb-org-shell.x86_64 0:3.0.6-1.el6
mongodb-org-tools.x86_64 0:3.0.6-1.el6

Complete!

$ sudo service mongod start
$ mongo

MongoDB shell version: 3.0.6
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type “help”.
For more comprehensive documentation, see

http://docs.mongodb.org/

Questions? Try the support group

http://groups.google.com/group/mongodb-user

Server has startup warnings:
2015-10-29T19:51:37.887+0800 I CONTROL [initandlisten]
2015-10-29T19:51:37.887+0800 I CONTROL [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 1024 processes, 655360 files. Number of processes should be at least 327680 : 0.5 times number of files.
> exit
bye

$ sudo vi /etc/security/limits.conf

mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000

$ sudo service mongod restart

Stopping mongod: [ OK ]
Starting mongod: [ OK ]

$ mongo

MongoDB shell version: 3.0.6
connecting to: test
> help
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce

show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, ‘global’ is default
use <db_name> set current database
db.foo.find() list objects in collection foo
db.foo.find( { a : 1 } ) list objects in foo where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shell
> show dbs
local 0.078GB
> exit
bye

References:

  1. Install MongoDB on Red Hat Enterprise or CentOS Linux

Data Warehouse For Ever原创文章,转载请注明出处

Oracle不同字符集的dblink乱码问题解决办法

因为一个非常操蛋的原因,公司有2个Oracle数据库用了不同的字符集,一个是UTF8,一个是GBK。悲剧的是,两个数据库还必须通过dblink进行一些互访操作。如果字段内容含有中文,则会存在乱码问题。解决方案是通过utl_raw.cast_to_raw和convert两个函数进行字符集转换。

数据库 字符集 表名 指向对方的DBLINK
idata AMERICAN_AMERICA.UTF8 url_upgroup_dimt0 DL_ALIDW_CBUDP
alidw AMERICAN_AMERICA.US7ASCII jobs_category DL_IDATA_CNLOG

1. UTF8通过DBLINK访问GBK

步骤一、在GBK库alidw上创建视图,其中带中文的字段使用utl_raw.cast_to_raw转成RAW编码

create or replace view cbudp.v_jobs_category as
select
id,
utl_raw.cast_to_raw(jobs_category_name) jobs_category_name,
parent_id,
bu_name,
gmt_create,
gmt_modified
from cbudp.jobs_category;

步骤二、在UTF8库idata上创建视图,其中带中文的字段使用Convert进行转码

create or replace view jobs_category as
select
id,
convert(utl_raw.cast_to_varchar2(jobs_category_name),’utf8′,’zhs16gbk’) jobs_category_name,
parent_id,
bu_name,
gmt_create,
gmt_modified
from cbudp.v_jobs_category@dl_alidw_cbudp;

2. GBK通过DBLINK访问UTF8

步骤一、在UTF8库idata上创建视图,其中带中文的字段使用utl_raw.cast_to_raw转成RAW编码

create or replace view cnlog.v_url_upgroup_dimt0 as
select
upgroup_id,
utl_raw.cast_to_raw(upgroup_desc) upgroup_desc,
ins_date
from cnlog.url_upgroup_dimt0;

步骤二、在GBK库alidw上创建视图,其中带中文的字段使用Convert进行转码

create or replace view cnlog.url_upgroup_dimt0 as
select
upgroup_id,
convert(utl_raw.cast_to_varchar2(upgroup_desc),’zhs16gbk’,'utf8′) upgroup_desc,
ins_date
from cnlog.v_url_upgroup_dimt0@dl_idata_cnlog;


Data Warehouse For Ever原创文章,转载请注明出处

Hive Impala Presto, comparison of performance

测试环境如下:

presto-env
其中关于impala和Presto的内存配置:

  • Impala Daemon 内存限制mem_limit为1GB
  • Presto的config.properties 配置文件中task.max-memory=1GB。

另外,由于内存有限,每次测试时Impala和Presto都没有同时开启。
总体测试表明,Presto的性能比Impala稍逊,在数据量巨大、查询比较复杂时,Impala和Presto的性能表现都不怎么样,比Hive也就快了2、3倍的样子
由于生产环境下,除了性能之外,还有并发度、稳定性、适应性等多种因素需要考虑,所以以上测试结果仅供参考。
以下是具体测试结果:

一、1百万条记录,HDFS文件大小600MB时的查询速度

在表记录数不多时,Impala和Presto都表现出比较好的查询性能,其中Impala的查询效率大约为Hive的9~50倍,Presto的查询效率大约为Hive的8~??倍(由于Presto的查询时间只精确到秒,在最简单的select * from xxx limit 5的查询中,显示时间为0秒)。
presto600mb

二、1千万条记录,HDFS文件大小6GB时的查询速度

在表记录数比较多时,Impala的查询效率大约为Hive的7~10倍,Presto的查询效率大约为Hive的4~30倍。
persto6gb

三、1亿条记录,HDFS文件大小60GB时的查询速度

在表记录数特别多时,Impala的查询效率大约为Hive的3~60倍,Presto的查询效率大约为Hive的2~180倍。
presto60gb


Data Warehouse For Ever原创文章,转载请注明出处

Hive Impala Presto, comparison of functionality

√: Yes; ×: No; Blue: The main differences between impala and presto

hive 0.11 impala 1.1.1 presto 0.52
Implement: java c++ backend
java frontend
java
DataType:
integer
string
floating point
timestamp
uniontype × ×
DDL:
create/alter/drop table ×
create view ×
truncate table × ×
desc
create index × ×
DML:
load data ×
insert ×
explain
tablesample × ×
group by
order by
having
limit
inner/left/right/full join (no full join)
union
Sub Queries
With
Lateral View × ×
Function:
UDF × ×
Mathematical Functions √31 √30 √31
String Functions √37 √22 √15
Date and Time Functions √17 √18 √26
Regex
Type Conversion Functions ×
Conditional Functions
Aggregate Functions √19 only 5 √16
Windowing ×
Distinct
Url
Json ×

功能上,Presto和Impala有几个不同的地方,也有和Impala相同的一些缺陷:
1. Presto完全没有数据写入的功能,不能建表、建视图、导数据,只能做select查询操作。
2. Presto不支持Full Outer Join。
3. Presto和Impala一样,都不支持UDF。
4. Presto支持窗口函数,而Impala不支持,不过Impala的开发团队号称明年推出基础的rank over partition 等功能。
5. Presto支持较多的聚合函数,而Impala目前只支持5个非常基础的聚合函数:MAX(), MIN(), SUM(), AVG(), and COUNT()。


Data Warehouse For Ever原创文章,转载请注明出处

Presto的单节点和多节点配置

近期在测试机上搭了一套impala和presto的测试环境,因为presto的文档资料比较少,配置时走过一些弯路,因此将我的配置给大家说一下,希望对想研究presto的同学能有些帮助。
Presto的架构,在官网上有介绍,我将官网的架构图稍微修改了一下,增加了Discovery的服务,这样可能看起来会更清楚一些。

下面分别说一下单节点和多节点的配置。

一、Presto单节点配置

首先,我在我的机器上安装了Cloudera Manger 4,部署了CDH HDFS、Hive和Impala。配置的过程很简单,因为Cloudera Manger还是很强大且方便的。
然后,我在这台单机上部署了Presto的单节点测试环境。

需要注意的是Presto只能支持jdk 1.7,因此必须安装好jdk 1.7,并配置好环境变量PATH和CLASSPATH,保证java 1.7在PATH路径中,保证Presto的lib在CLASSPATH路径中。

要下载的软件有两个:

  1. Presto server 0.52
  2. Presto client

进入server的目录,按照官网说明Deploying Presto创建etc文件夹和配置文件,由于是单机同时作为coordinator和workder,因此config.properties配置如下:

coordinator=true
datasources=jmx,hive
http-server.http.port=8080
presto-metastore.db.type=h2
presto-metastore.db.filename=var/db/MetaStore
task.max-memory=1GB
discovery-server.enabled=true
discovery.uri=http://v125203052.bja:8080

因为Presto的coordinator集成了一个简单的discovery服务,其端口号与Presto服务端口号8080一致,因此单节点不需要单独部署Discovery服务。
启动Presto客户端执行查询:
./presto --server v125203052.bja:8080 --catalog hive --schema default

二、Presto多节点配置

我在三台虚拟机上搭建了三个节点的测试环境,使用了Cloudera Manger 4进行了部署,我说一下这三台机器承担的主要角色吧:

  1. vm1:Presto Coordinator & Worker,Discovery Server,HDFS NameNode,HDFS DataNode,HDFS Balancer,Hive Metastore Server,Hive Gateway,Impala deamon,Impala StateStore Daemon,JobTracker,TaskTracker
  2. vm2:Presto Worker,HDFS DataNode,HDFS Gateway,Hive Gateway,Impala deamon,TaskTracker
  3. vm3:Presto Worker,HDFS DataNode,HDFS Gateway,Hive Gateway,Impala deamon,TaskTracker

同样,需要注意的是Presto只能支持jdk 1.7,因此必须安装好jdk 1.7,并配置好环境变量PATH和CLASSPATH,保证java 1.7在PATH路径中,保证Presto和Discovery的lib在CLASSPATH路径中。

在原来的服务器vm1上,还得安装一个Discovery Service,服务的配置与官方保持一致,端口为8411。先启动Discovery服务。
而Presto各个服务器上的配置注意事项有:

  1. node.id务必配置正确,各个服务器要不一样的node.id,可以在每个服务器上使用uuidgen命令生成一个id。
  2. 各个Presto服务的config.properties配置文件中,discovery.uri参数必须都指向discovery服务的地址。
  3. 原来Presto服务的config.properties配置文件中,discovery-server.enabled这一行必须注释掉。

以下是我的三个Presto服务的config.properties配置:

  • 1.vm1的config.properties配置:
  • coordinator=true
    datasources=jmx,hive
    http-server.http.port=8080
    presto-metastore.db.type=h2
    presto-metastore.db.filename=var/db/MetaStore
    task.max-memory=1GB
    discovery.uri=http://v125203052.bja:8411

  • 2.vm2和vm3的config.properties配置:
  • coordinator=false
    datasources=jmx,hive
    http-server.http.port=8080
    presto-metastore.db.type=h2
    presto-metastore.db.filename=var/db/MetaStore
    task.max-memory=1GB
    discovery.uri=http://v125203052.bja:8411

Now you can start the Presto client and execute the query:
./presto --server v125203052.bja:8080 --catalog hive --schema default
The output will be like these:

presto:default> select * from ljp limit 5;
a | b
—+——
0 | test
0 | test
1 | test
0 | test
1 | test
(5 rows)

Query 20131114_061434_00005_qcu94, FINISHED, 3 nodes
Splits: 12 total, 7 done (58.33%)
0:00 [42K rows, 337KB] [109K rows/s, 871KB/s]

And then, congralutions, let’s enjoy the Presto!!!


Data Warehouse For Ever原创文章,转载请注明出处