ClickHouse之 HDFS / Kafka / MySQL /ODBC /JDBC 集成引擎 (4)

ClickHouse集成HDFS (4)

一 HDFS (在clickhouse 上创建表格插入数据,将数据存储在hdfs端)=>不提倡使用这种方法

1 先在 clickhouse shell客户端建立一个HDFS 类型的表格

//  建表
create table tb_hdfs(
id Int32,
name String,
gender String)
engine=HDFS('hdfs://doit03:8020/cch','CSV');  //CVS是hdfs的shell客户端上装有数据的文件的文件类型

2 克隆一个当前正在使用的机器 ,将 hdfs 开启

start-all.sh

3 向创建的clickhouse 客户端的 tb_hdfs 表中插入数据

insert into tb_hdfs values(1,'zss','M'),(2,'lii','F');

4 可能会出现提示说 /cch 文件打不开" Unable to open HDFS file:" 可能因为clickhouse端只有写的权限 ,其他的权限不够 ,所有需要去 hdfs 的shell客户端将 /cch文件的权限打开 ,如下 ;

// 将hdfs 上根目录下的所有文件的所有权限全部打开
hdfs dfs -chmod -R 777 /  ()

5 回到clickhouse 的shell客户端 ,继续向 clickhouse 的tb_hdfs 表中插入数据
6 查询数据 :

 select * from tb_hdfs;
 ┌─id─┬─name─┬─gender─┐
│  1      │     zss    │       M      │
│  2      │       lii      │        F      │
└────┴──────┴──────┘

7 去数据存储的路径下查看数据存储情况 :

cd /var/lib/clickhouse/data/default 

8 查看后 ,没有看到tb_hdfs 这个新建的表格 ;
在这里插入图片描述
9 但是tb_hdfs这个表里面的数据在hdfs web端上cch中存储着 ;
在这里插入图片描述
注 : 在clickhouse 上创建表格插入数据,将数据存储在hdfs端 ,这个方法不建议使用

二 FROM(从hdfs的shell客户端获得数据 ,直接以对应的数据格式将数据传输/拉取/读取到 clickhouse shell客户端)

使用的是集成引擎 HDFS ,和HDFS集成 ,直接读取/拉取 hdfs 上的数据
基本的语法语句 : (从表的引擎和集成引擎里面取数据)==>直接读取引擎中的数据
需要在一个机器上克隆出两个机器处理 ,一个操作hdfs的shell客户端 ,一个操作 clickhouse 的shell客户端 ,一个在机器的普通操作端

1 在 hdfs shell客户端的根目录下

hdfs dfs -mkdir /hdfs

2 在机器的 /root/

vi app.csv    // 创建文件并向里面编辑以下内容
1,URL1,2020-07-21,click          //  (id Int ,url String ,ctime Date, event String)
2,URL1,2020-07-21,show
3,URL1,2020-07-21,click
4,URL1,2020-07-21,show
5,URL1,2020-07-21,click
6,URL1,2020-07-21,click

:wq!        //退出编辑模式后,保存退出

3 将集群 /root/app.csv 文件上传到 hdfs shell客户端的 /hdfs 文件夹上

hdfs dfs -put app.csv /hdfs

4 在 clickhouse 客户端上直接读取hdfs shell客户端上 /hdfs/app.csv 的数据

select * from hdfs('hdfs://doit03:8020/hdfs/app.csv','CSV','id Int8,url String,ctime Date,event String');
┌─id─┬─url──┬──────ctime─┬─event─┐
│  1    │  URL1 │      2020-07-21   │   click    │
│  2    │  URL1 │      2020-07-21   │   show  │
│  3    │  URL1 │      2020-07-21   │   click   │
│  4    │  URL1 │      2020-07-21   │   show  │
│  5    │  URL1 │      2020-07-21   │   click   │
│  6    │  URL1 │      2020-07-21   │   click   │
└───┴─────┴──────────┴─────┘
6 rows in set. Elapsed: 0.077 sec.       //获取数据速度很快 ,用时 0.077s .

三 在hive 的shell客户端上读取 hdfs/app.csv 的数据
与 clickhouse 比较一下速度

1 启动 hive

//  根据提示 ,一步步将一下内容输入
hiveserver2 &         // 开启服务端  /  开启元数据库 ???           
beeline
!connect jdbc:hive2://doit03:10000      // 开启客户端   (也可以 在hive jar包下的 bin目录下 , 输入 hive 开启客户端)
root                                   // 用户名
123456                                 //密码
show databases                        // 查看hive中数据库情况

2 建一个 hive 表

create external table tb_hive(
id int,
url string,
ctime string,
event string)
row format delimited fields terminated by ','
location 'hdfs://doit03:8020/hdfs';

3 查询 hive 中表创建的情况

select * from tb_hive;
//  结果如下 :
1       URL1    2020-07-21      click 
2       URL1    2020-07-21      show
3       URL1    2020-07-21      click
4       URL1    2020-07-21      show
5       URL1    2020-07-21      click
6       URL1    2020-07-21      click
Time taken: 2.25 seconds, Fetched: 6 row(s)

总结 : 经过比较,速度相差不多 ,但是 hive shell客户端上读取hdfs上的 hdfs/app.csv 数据的速度还是比 clickhouse shell客户端上读取hdfs上 hdfs/app.csv 数据的速度要慢一点 .

五 比较聚合速度 ==>clickhouse 和 hive 进行比较

1 clickhouse shell客户端上聚合(查询数据)

select count(1),event from hdfs('hdfs://doit03:8020/hdfs/app.csv','CSV','id Int8,url String,ctime Date,event String') group by event;

// 查询结果 :
┌─count(1)─┬─event─┐
│        4         │    click   │
│        2         │    show  │
└───────┴──────┘
2 rows in set. Elapsed: 0.132 sec.   ===>聚合速度用时 : 0.132s .

2 hive shell客户端上聚合(查询数据)

select count(1),event from tb_hive group by event;

//  查询结果
3       click
1       click 
2       show
Time taken: 91.786 seconds, Fetched: 3 row(s)    ===>聚合速度用时 : 91.786s .

总结 :
处理同样的数据 ,用一样的算法 ,clickhouse 处理数据 特别快 ,hive处理数据特别慢 ,clickhouse 比 hive处理数据快上百倍有余 .

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值