day 第一天
1.1 zookeeper 总结
安装 1 解压 tar -zxvf zookeeper-3.4.10.tar.gz
进入 zookeeper 创建 mkdir data
在进入conf 目录下 mv zoo_samle.cfg.zoo.cfg
在 vim zoo.cfg 下面加上
dataDir=/opt/zookeeper-3.4.10/data
server.1=hdp1:2888:3888 server.2=hdp2:2888:3888 server.3=hdp3:2888:3888
加上 唯一标识id
在 data 目录下 vim myid
分发zookeeper到hdp2 和hdp3 => myid第一台1 第二台2 第三台3
scp -r 要发送的文件 想要发送的主机名字:/opt
启动服务
./ zkServer.sh start
停止服务
./ zkServer.sh stop
kafka 总结
在hdp1下:
vim kafka_2.12-1.0.0/config --> server.properties
broler.id=0 标志当前机器在集群中的唯一标识
listeners=PLAINTEXT://hdp1:9092 提供的地址
log.dirs=/opt/kafka_2.11-2.4.1/kafka_logs
zookeeper.connect=hdp1:2181,hdp2:2181,hdp3:2181
可选配置 message.max.byte=5242880 default.replication.factor=2 集群保存消息的副本数 replica.fetch.max.bytes=5242880 取消息的最大字节数
将kafka复制到hdp2和hdp3,
更改hdp2和hdp3中broler.id,listeners,使id唯一,listener对应各节点ip
启动服务: 后台 启动
./kafka-server-start.sh -daemon ../config/server.properties
kafka 的 查看帮助命令
[root@hdp1 bin]# ./kafka-topics.sh --help
kafka 创建主题的命令
./kafka-topics.sh ----bootstrap-server hdp1:9092,hdp2:9092,hdp3:9092 --create --topic test
查看kafka中的 主题
./kafka-topics.sh --bootstrap-server hdp1:9092,hdp2:9092,hdp3:9092 --list
删除主题
[root@hdp1 bin]# ./kafka-topics.sh --bootstrap-server hdp1:9092,hdp2:9092,hdp3:9092 --delete --topic topic1
生产者 消费者:
./kafka-console-producer.sh --topic test --broker-list hdp1:9092,hdp2:9092,hdp3:9092
./kafka-console-consumer.sh --topic test --bootstrap-server hdp1:9092,hdp2:9092,hdp3:9092
day 第二天
启动 spark
sbin/start-all.sh
1.在终端中输入以下命令,查看安装在本机的网卡:
nmcli d
2.切换到/etc/sysconfig/network-scripts/目录下,打开“ifcfg-en....”文件:
[root@node1 ~]# cd /etc/sysconfig/network-scripts/
.动态配置 或 静态配置
-
动态配置
修改为以下内容
BOOTPROTO=dhcp
ONBOOT=yes
-
静态配置
修改为以下内容
BOOTPROTO=static
ONBOOT=yes
重新启动网络服务:
systemctl restart network
下载镜像
yum -y install rsync
先启动生产者
nc -lk 9999
生产者
[root@hdp1 bin]# ./kafka-console-producer.sh --broker-list hdp1:9092,hdp2:9092,hdp3:9092 --topic test
day 第三天
查看组的 偏移量
[root@hdp1 bin]# ./kafka-consumer-groups.sh --bootstrap-server hdp1:9092,hdp2:9092,hdp3:9092 --describe --group group1
启动生产者
./kafka-console-producer.sh --broker-list hdp1:9092,
hdp2:9092,hdp3:9092
--topic test
查看组
./kafka-consumer-groups.sh --bootstrap-server hdp1:9092,
hdp2:9092,hdp3:9092
--describe --group group1
day 第四天
连接 linux 数据库 连接不上 解决问题
进入 mysql
mysql -uroot -proot
使用数据库
use mysql;
查看所有表
show tables; 找到 user 表
进行查询 user 数据
select host , user, password from user;
// 创建 %
create user root identified 'root';
//给root赋值权限
grant all privileges on . to root@'%' identified by 'root';
//刷新
flush privileges;
配置/opt/spark-2.4.5-bin-hadoop2.7/conf 修改如下配置文件
[root@hdp1 conf]# mv spark-env.sh.template spark-env.sh
vim spark-env.sh
export JAVA_HOME=/opt/jdk1.8.0_131/ export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hdp1:2181,hdp2:2181,hdp3:2181 -Dspark.deploy.zookeeper.dir=/spark"
mv slaves.template slaves
vim slaves
hdp1 hdp2 hdp3
将hdp1的spark-2.4.4-bin-hadoop2.7拷贝到其他节点
启动 spark集群下 bin standalone模式
./start-all.sh
在启动 zookeeper 进程
查看spark 网页
spark -jar 运行
先启动 nc -lk 9999
[root@hdp1 bin]# pwd /opt/spark-2.4.5-bin-hadoop2.7/bin
[root@hdp1 bin]# ./spark-submit --class com.lqz.de.SparkStreamWCforeachPartition --master spark://hdp1:7077 /opt/day02-1.0-SNAPSHOT.jar
查看数据库中数据
解决安全模式
hadoop dfsadmin -safemode leave
格式化
hadoop namenode -format
启动 yarn
任意目录下启动hadoop
start-all.sh
启动日志服务:
mr-jobhistory-daemon.sh start historyserver
yarn 上运行 第一种方式client
先启动 nc -lk 9999
[root@hdp1 bin]# ./spark-submit --class com.lqz.de.SparkStreamWCforeachPartition --master yarn --deploy-mode client /opt/day02-1.0-SNAPSHOT.jar
yarn 上运行 第二种方式cluster
先启动 nc -lk 9999
[root@hdp1 bin]# ./spark-submit --class com.lqz.de.SparkStreamWCforeachPartition --master yarn --deploy-mode cluster /opt/day02-1.0-SNAPSHOT.jar
day 第五天
Flink集群安装
(1) 下载flink:
flink-1.13.1-bin-scala_2.11.tgz
(2)上传flink到linux
conf/master
hdp1:8081
conf/workers
hdp1 hdp2 hdp3
flink-conf.yaml
jobmanager.rpc.address: hdp1
day 第六天
standalone模式
[root@hdp1 bin]# ./flink run
-c day04flink.sourceinsert.FlinkSinkToJDBC /opt/day02-1.0-SNAPSHOT.jar
flink on yarn
Session Mode
JobManager分发任务给TaskManager执行
^C[root@hdp1 bin]# ./yarn-session.sh -jm 1024 -tm 1024
^C[root@hdp1 bin]# ./flink run --class day04flink.sourceinsert.FlinkSinkToJDBC /opt/day02-1.0-SNAPSHO.jar
Application Mode
[root@hdp1 bin]# ./flink run-application -t 目标 yarn-application -c day04flink.sourceinsert.FlinkSinkToJDBC /opt/day02-1.0-SNAPSHOT.jar
Per-Job Cluster Mode
[root@hdp1 bin]# ./flink run -t 目标 (target) yarn-per-job -c day04flink.sourceinsert.FlinkSinkToJDBC /opt/day02-1.0-SNAPSHOT.jar
day 第十三天
一、安装hbase
export JAVA_HOME=/opt/jdk1.8.0_131
export HBASE_MANAGES_ZK=false
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://hdp1:8020/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.master.port</name> <value>16000</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>hdp1,hdp2,hdp3</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/opt/zookeeper-3.4.10/hbase</value> </property> <property> <name>zookeeper.znode.parent</name> <value>/hbase</value> </property> </configuration>
regionservers
hdp1 hdp2 hdp3
Hbase 1 解压
启动 ./start-hbase.sh
./hbase shell
创建 空间
create_namespace 'lqz'
查看空间
list_namespace
创建表结构
create 'lqz:person','info'
查看
scan 'lqz:person'
查看表结构
hbase(main):011:0> describe ‘student’
访问 Hbase页面
http://hdp1:16010/master-status
day 第十四天
一、安装
官网:ClickHouse - Fast Open-Source OLAP DBMS
下载地址:Index of /repos/clickhouse/stable/el7
1、 vim /etc/selinux/config
修改:SELINUX=disabled
2、 yum install -y libtool
3、在 hadoop102 的/opt/software 下创建 clickhouse 目录
mkdir clickhouse
安装包
4、rpm -ivh *.rpm
5、vim /etc/clickhouse-server/config.xml
把 <listen_host>::</listen_host> 的注释打开
在这个文件中,有 ClickHouse 的一些默认路径配置,比较重要的
数据文件路径:<path>/var/lib/clickhouse/</path>
日志文件路径:<log>/var/log/clickhouse-server/clickhouse-server.log</log
6、启动
systemctl start clickhouse-server
7、关闭开机自启
systemctl disable clickhouse-server
8、客户端登录
clickhouse-client -m
-m :可以在命令窗口输入多行命令
二、数据类型
1整数类型: Int8/Int16/Int32/Int64 分别对应mysql类型tinyint/smallint/int/bigint 取值范围:是-2的(Int后数字-1)的平方到2的(Int后数字的平方-1)-1,Int8对应-128~127 UInt8/UInt16/UInt32/UInt64 前面加U 例如 UInt8 代表全部是正数, 取值范围0到2的Int后面数字次方-1,如UInt8对应0-255 2 浮点类型: Float32/Float64 分别对应mysql的float与double Decimal(n,p)对应于mysql decimal(n,p)
a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38。 b指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 a之间的值。默认小数位数是 0。
但是有简写形式Decimal32(p),Decimal64(p),Decimal128(p),分别对应 Decimal(1~9,p),Decimal(10~18,p)``Decimal(19~38,p)
如:123.1234567
Decimal32(5)保留5位:123.12345 不会四舍五入
mysql decimal类型与decimal长度用法详解 - BuildyMan - 博客园
3 字符串类型 String/FixedString/UUID String不像mysql一样有大小限制,它可以表示成msyql varchar/text/clob/blob的合集 FixedString(n) 定长字符串,相当于char 4 日期类型 Date yyyy-MM-dd格式 DateTime yyyy-MM-dd HH:mm:ss格式
三、表引擎
表引擎是 ClickHouse 的一大特色。可以说, 表引擎决定了如何存储表的数据。包括:
➢ 数据的存储方式和位置,写到哪里以及从哪里读取数据。
➢ 支持哪些查询以及如何支持。
➢ 并发数据访问。
➢ 索引的使用(如果存在)。
➢ 是否可以执行多线程请求。
➢ 数据复制参数。
表引擎的使用方式就是必须显式在创建表时定义该表使用的引擎,以及引擎使用的相关
参数
TinyLog:
以列文件的形式保存在磁盘上,不支持索引,没有并发控制。一般保存少量数据的小表,
生产环境上作用有限。可以用于平时练习测试用。
create table t_tinylog ( id String, name String) engine=TinyLog;
Memory:
内存引擎,数据以未压缩的原始形式直接保存在内存当中,服务器重启数据就会消失。
读写操作不会相互阻塞,不支持索引。简单查询下有非常非常高的性能表现(超过 10G/s)。
一般用到它的地方不多,除了用来测试,就是在需要非常高的性能,同时数据量又不太
大(上限大概 1 亿行)的场景。
MergeTree:
ClickHouse 中最强大的表引擎当属 MergeTree(合并树)引擎及该系列(*MergeTree)
中的其他引擎,支持索引和分区,地位可以相当于 innodb 之于 Mysql。
CREATE TABLE insert_select_testtable ( `a` Int8, `b` String, `c` Int8 ) ENGINE = MergeTree() ORDER BY a INSERT INTO insert_select_testtable (*) VALUES (1, 'a', 1) ;
例子2:
create table t_order_mt( id UInt32, sku_id String, total_amount Decimal(16,2), create_time Datetime ) engine =MergeTree partition by toYYYYMMDD(create_time) primary key (id) order by (id,sku_id); insert into t_order_mt values (101,'sku_001',1000.00,'2020-06-01 12:00:00') , (102,'sku_002',2000.00,'2020-06-01 11:00:00'), (102,'sku_004',2500.00,'2020-06-01 12:00:00'), (102,'sku_002',2000.00,'2020-06-01 13:00:00'), (102,'sku_002',12000.00,'2020-06-01 13:00:00'), (102,'sku_002',600.00,'2020-06-02 12:00:00'); --orderby必选 rder by 设定了分区内的数据按照哪些字段顺序进行有序保存。 order by 是 MergeTree 中唯一一个必填项,甚至比 primary key 还重要,因为当用户不 设置主键的情况,很多处理会依照 order by 的字段进行处理 --ClickHouse 中的主键,和其他数据库不太一样,它只提供了数据的一级索引,但是却不是唯一约束。这就意味着是可以存在相同 primary key 的数据的 TTL 即 Time To Live,MergeTree 提供了可以管理数据表或者列的生命周期的功能。 下面的这条语句是数据会在 create_time 之后 10 秒丢失 alter table t_order_mt3 MODIFY TTL create_time + INTERVAL 10 SECOND; create table t_order_mt3( id UInt32, sku_id String, total_amount Decimal(16,2) TTL create_time+interval 10 SECOND, create_time Datetime ) engine =MergeTree partition by toYYYYMMDD(create_time) primary key (id) order by (id, sku_id); insert into t_order_mt3 values (106,'sku_001',1000.00,'2020-06-12 22:52:30'), (107,'sku_002',2000.00,'2020-06-12 22:52:30'), (110,'sku_003',600.00,'2020-06-13 12:00:00');
四、sql
INSERT INTO | ClickHouse Documentation
1、Insert
基本与标准 SQL(MySQL)基本一致
(
1)标准
insert into [table_name] values(…),(….)
(
2)从表到表的插入
insert into [table_name] select a,b,c from [table_name_2]
2、update和delete
Alter 的一种。
虽然可以实现修改和删除,但是和一般的 OLTP 数据库不一样,Mutation 语句是一种很
“重”的操作,而且不支持事务。
“重”的原因主要是每次修改或者删除都会导致放弃目标数据的原有分区,重建新分区。
所以尽量做批量的变更,不要进行频繁小数据的操作。
(
1)删除操作
alter table t_order_smt delete where sku_id ='sku_001';
(
2)修改操作
alter table t_order_smt update total_amount=toDecimal32(2000.00,2) where id
=102;
由于操作比较“重”,所以 Mutation 语句分两步执行,同步执行的部分其实只是进行
新增数据新增分区和并把旧分区打上逻辑上的失效标记。直到触发分区合并的时候,才会删
除旧数据释放磁盘空间,一般不会开放这样的功能给用户,由管理员完成。
3、查询操作
ClickHouse 基本上与标准 SQL 差别不大
➢ 支持子查询
➢ 支持 CTE(Common Table Expression 公用表表达式 with 子句)
➢ 支持各种 JOIN,
但是 JOIN 操作无法使用缓存,所以即使是两次相同的 JOIN 语句,
ClickHouse 也会视为两条新 SQL
➢ 窗口函数
➢ 不支持自定义函数
➢ GROUP BY 操作增加了 with rollup\with cube\with total 用来计算小计和总计。
(
1)插入数据
hadoop102 :) alter table t_order_mt delete where 1=1;
insert into t_order_mt values
(101,'sku_001',1000.00,'2020-06-01 12:00:00'),
(101,'sku_002',2000.00,'2020-06-01 12:00:00'),
(103,'sku_004',2500.00,'2020-06-01 12:00:00'),
(104,'sku_002',2000.00,'2020-06-01 12:00:00'),
(105,'sku_003',600.00,'2020-06-02 12:00:00'),
(106,'sku_001',1000.00,'2020-06-04 12:00:00'),
(107,'sku_002',2000.00,'2020-06-04 12:00:00'),
(108,'sku_004',2500.00,'2020-06-04 12:00:00'),
(109,'sku_002',2000.00,'2020-06-04 12:00:00'),
(110,'sku_003',600.00,'2020-06-01 12:00:00');
2)with rollup:从右至左去掉维度进行小计
hadoop102 :) select id , sku_id,sum(total_amount) from t_order_mt group by
id,sku_id with rollup;
3)with cube : 从右至左去掉维度进行小计,再从左至右去掉维度进行小计
hadoop102 :) select id , sku_id,sum(total_amount) from t_order_mt group by
id,sku_id with cube;
4)with totals: 只计算合计
hadoop102 :) select id , sku_id,sum(total_amount) from t_order_mt group by
id,sku_id with totals;
WITH ( SELECT sum(bytes) FROM system.parts WHERE active ) AS total_disk_usage SELECT (sum(bytes) / total_disk_usage) * 100 AS table_disk_usage, table FROM system.parts GROUP BY table ORDER BY table_disk_usage DESC LIMIT 10 ┌──────table_disk_usage─┬─table──────┐ │ 66.13563015490257 │ hits_v1 │ │ 29.31875240635302 │ visits_v1 │ │ 5.843957690326289 │ t_dict │ │ 0.3967229532123266 │ metric_log │ │ 0.0012069656728751568 │ trace_log │ │ 0.000137742753168703 │ part_log │ └───────────────────────┴────────────┘ --https://www.saoniuhuo.com/article/detail-82.html --https://www.codeleading.com/article/12084056248/ WITH ( SELECT avg(total_amount) AS avga FROM t_order_mt ) AS avga SELECT * FROM t_order_mt WHERE total_amount > toDecimal64(avga, 2)
4、alter
同 MySQL 的修改字段基本一致
1)新增字段
alter table tableName add column newcolname String after col1;
2)修改字段类型
alter table tableName modify column newcolname String;
3)删除字段
alter table tableName drop column newcolname;
5、导出数据
clickhouse-client --query "select * from t_order_mt where
create_time='2020-06-01 12:00:00'" --format CSVWithNames>
/opt/module/data/rs1.csv
hive with
--1 with cte_order as ( select store_id,channel,paid_date,order_id,gmv from testdb.order_line where channel in ('SNG','JDDJ') ) --with as 语句不能加分号 ; select store_id,order_id,paid_date,order_id,gmv from cte_order where channel='SNG' union all select store_id,order_id,paid_date,order_id,gmv from cte_order where channel='JDDJ' ;
表引擎:
sql: 数据类型、查询语句 、分组聚合、join、函数。