impala 数据更新方式
invalidate metadata; -- 重新加载所有库中的所有表
invalidate metadata [table]; -- 重新加载指定的某个表
# -------- kudu -----------
# --------- 命令行impala ---------------
impala-shell;
connect hdp-224;
使用该impala-shell命令启动Impala Shell 。默认情况下,impala-shell 尝试连接到localhost端口 21000 上的Impala守护程序。
要连接到其他主机,请使用该-i <host:port>选项。要自动连接到特定的Impala数据库,请使用该-d <database>选项。
例如,如果您的所有Kudu表都位于数据库中的Impala中impala_kudu,则-d impala_kudu可以使用
此数据库
例如:
impala-shell -i hdp-224:21000 -d dw;
impala-shell -i hdp-224 -u hive
# -- kudu_master_hosts = <master1> [:port] ,<master2> [:port] ,<master3> [:port]
# -- 由于Sentry实现了Hive权限与Impala的同步,因此可以用beeline同样的方法对kudu表进行授权
grant select on table a_kudu_database.a_kudu_table to role read;
grant all on table b_kudu_database.b_kudu_table to role ddl;
grant role read to group a_user;
grant role ddl to group b_user;
--------------------------------------
create database if not exists a_kudu_database; -- 创建一个kudu 库
create database if not exists b_kudu_database;
create table a_kudu_database.a_kudu_table(
id int,
name string,
age int,
PRIMARY KEY(id))
STORED AS KUDU
TBLPROPERTIES (
'kudu.master_addresses' = 'hdp-224:7051'
);
create table b_kudu_database.b_kudu_table(
id bigint,
age int,
sorce int,
PRIMARY KEY(id))
STORED AS KUDU
TBLPROPERTIES (
'kudu.master_addresses' = 'hdp-224:7051'
);
--------------
insert into a_kudu_database.a_kudu_table values(13461,'zhou',21);
insert into a_kudu_database.a_kudu_table values(23854,'wang',29);
insert into a_kudu_database.a_kudu_table values(52865,'wu',24);
insert into a_kudu_database.a_kudu_table values(78935,'zheng',31);
insert into a_kudu_database.a_kudu_table values(34211,'meng',26);
insert into a_kudu_database.a_kudu_table values(15356,'zhang',35);
insert into b_kudu_database.b_kudu_table values(1,32,86);
insert into b_kudu_database.b_kudu_table values(2,28,92);
insert into b_kudu_database.b_kudu_table values(3,30,88);
insert into b_kudu_database.b_kudu_table values(4,31,78);
-- ----------- --------------
CREATE TABLE b_kudu_database.customers (
state STRING,
name STRING,
purchase_count int,
PRIMARY KEY (state, name)
)
PARTITION BY RANGE (state)
(
PARTITION VALUE = 'al',
PARTITION VALUE = 'ak',
PARTITION VALUE = 'ar',
PARTITION VALUE = 'wv',
PARTITION VALUE = 'wy'
)
STORED AS KUDU;
insert into b_kudu_database.customers values('al','dzh',1);
insert into b_kudu_database.customers values('ak','zw',2);
insert into b_kudu_database.customers values('ar','cf',3);
insert into b_kudu_database.customers values('gg','gg',4);
insert into b_kudu_database.customers values('mm','mm',5);
# -- 备注:1:分区表不接受 没有在分区里面的数据信息;
# -- 2:kudu 对字段属性不能自动转化;
# -- 映射已有Kudu表到Impala中
CREATE EXTERNAL TABLE impala_kudu.imp_table_nameSTORED AS KUDUTBLPROPERTIES ('kudu.table_name' = 'table_name');# -- ------- 建立表KUDU 表信息 --------CREATE TABLE impala_kudu.dim_table_name(pm_id INT,*etl_time STRING,PRIMARY KEY(pm_id))PARTITION BY HASH(pm_id) PARTITIONS 10STORED AS kudu;
# --------- HIVE beeline连接 ----------
# -- 在命令行中键入:hive --service metastore &
# -- 在命令行中键入:hive --service hiveserver2 &
beeline
!connect jdbc:hive2://IP:10000
# --------------------(CDH6.2) HUE 权限设置 ----------------------------
1: 建立用户 bi_dev_analyst 用户组权限 bi_dev 在HUE 里面权限组
2: beeswax.access:Launch this application -- HIVE
3:impala.access:Launch this application -- impala
4: jobbrowser.access:launch this applictaion -- job 执行形况
# --------- hue 权限增加 -------------
1: HiveServer2 -- 服务器上必须增加用户账号;
2: HUE -- 用户权限,角色,用户组,都是单独自己的;
第二部分:
1.使用beeline连接HiveServer2,并登录hive用户
beeline
!connect jdbc:hive2://IP:10000
这时会让你输入用户名和密码,这里都输入hive
2.创建admin,impala,bigdata角色
create role admin;
create role impala;
create role bigdata;
drop role bigdata; -- 删除角色
3.为角色赋予超级权限
grant select on table a_kudu_database.a_kudu_table to role read; -- 用户赋予查询权限
grant all on table b_kudu_database.b_kudu_table to role ddl; -- DDL 权限
grant all on database dw to role bigdata; -- 整个库权限
grant all on server server1 to role admin;
grant select on server server1 to role impala;
grant create on server server1 to role bigdata;
revoke create on server server1 from role bigdata; -- 从角色 bigdata 中删除建表权限
4.将角色授权给各个用户组
grant role admin to group hive; -- hive 用户组有admin权限
grant role impala to group impala; -- impala 用户组有查询权限
grant role bigdata to group bigdata; -- bigdata 用户组有查询和创建权限。
grant role user1_role to group user1; -- 把user1_role 用户的权限给 user1
revoke role bigdata from group bigdata; -- 从bigdata 用户组删除bigdata 角色
# -------- 权限案例 -----------
1:hue 已经增加了pbdd 用户现有访问hive权限
create role pbdd; -- (创建数据库角色)
grant create on database test to role pbdd; -- (给角色test库的建表权限)
grant select on database test to role pbdd; -- (给查询权限)
grant role pbdd to group pbdd; -- (给用户组赋角色权限)
revoke all on database test from user pbdd; -- (收回权限)
show roles; -- 查看已经有的角色
show grant role bi_dev_sentry; -- 查看角色权限;
show grant user pbdd; -- (查看用户已有权限)
show grant user pbdd on database test; -- (查看用户在test数据库的已有权限)
show grant user pbdd on c_vip; -- (查看用户在表的权限)
--赋予角色权限
grant select on database db_name to role role_name;
grant select on [table] t_name to role role_name;
--查看角色权限
show grant role role_name on database db_name;
show grant role role_name on [table] t_name;
--角色赋予用户
grant role role_name to user user_name
--回收角色权限
revoke select on database db_name from role role_name;
revoke select on [table] t_name from role role_name;
--查看某个用户所有角色
show role grant user user_name;
测试
1: 建立用户 bi_dev_analyst
2: 建立角色
create role bi_dev_sentry;
grant select on table test.test_02 to role bi_dev_sentry; -- 给角色赋权限
grant all on table test.test_03 to role bi_dev_sentry; -- 给角色赋权限
# -- grant role bi_dev_sentry to group bi_data; -- 给用户组赋角色权限
grant role bi_dev_sentry to user bi_dev_analyst; -- 角色赋予用户
show grant role bi_dev_sentry; -- 查看角色权限;
show grant user bi_dev_analyst; -- 查看用户权限;
show role grant user bi_dev_analyst; -- 查看某个用户所有角色
# --------------- KUDU 参数设置 ----------------
1: maintenance_manager_num_threads -- 配置 4
2: block_cache_capacity_mb -- 配置 4G
3: memory_limit_hard_bytes -- 配置 24G
4: Maximum Process File Descriptors
5: Default Number of Replicas
# ------------- CDH6.2 中 KUDU1.9版本 ----------------
1:通过Kudu API或其他集成(如Apache Spark)创建的表在Impala中不会自动显示。要查询它们,
必须首先在Impala中创建外部表,以将Kudu表映射到Impala数据库:
CREATE EXTERNAL TABLE impala_kudu.imp_table_name
STORED AS KUDU
TBLPROPERTIES (
'kudu.table_name' = 'table_name'
);
2:Kudu中的分区方法主要有两种:partition by hash 和 partition by range
kudu表基于其partition方法被拆分成多个分区,每个分区就是一个tablet,
一张kudu表所属的所有tablets均匀分布并存储在tablet servers的磁盘上。
因此在创建kudu表的时候需要声明该表的partition方法,同时要指定primary key作为partition的依据。
3: 建议每个表50columns左右,不能超过300个;
4: hash分区数量 * range分区数量不能超过60个(1.7.0版本之后没限制了)
# ------- kudu 数据导入导出的案例 ----------------
1.1: 数据导入;
导入流程:准备数据 -> 上传hdfs -> 导入impala临时表 -> 导入kudu表 -- 数据流程
1.2: hadoop dfs -mkdir /input/data/pujh -- HDFS 临时推送文件位置
1.3: 因为impala不支持导入本地文件(和hive有点区别),所以要先上传到hdfs上,再加载数据(impala 里面,local是保留字)
hdfs dfs -put /home/table_name.csv /input/data/pujh -- 把加载推送上去(权限问题要注意)
hdfs dfs -chmod 777 /input/data/pujh -- 权限修改
1.4:导入临时的impala 临时表(impala 提前建立临时表)
CREATE TABLE test.table_name(*) row format delimited fields terminated by ',';
impala-shell -i hdp-224 -u hive -- 进入impala 命令行里
load data inpath '/input/data/pujh/table_name.csv' into table test.table_name; -- 加载 impala 临时表里
# ------------ 权限限制 必须走hive 客户端 -------------
-- sed -i "s/\t/,/g" table_name.tmp -- 文件中 tab键替换成逗号 HIVE 加载 ----
beeline
!connect jdbc:hive2://IP:10000
load data local inpath '/home/table_name.tmp' overwrite into table test.table_name; -- 本地加载 hive里
CREATE TABLE test.table_name_new as select * from test.table_name; -- 创建临时表(直接加载HIVE 的
test.table_name impala 看不到)
invalidate metadata; -- 刷新数据
refresh [table]; -- 刷数据信息
1.5: 把impala 表数据导入到kudu表中(KUDU 类型格式很严格)
impala-shell -i hdp-224 -u hive -- 进入 impala 命令行
insert into impala_kudu.table_name select * from test.table_name_new; -- 把数据同步到 kudu 表里(字段类型必须一致不然报错,必须格式转化)
# -- 内粗溢出问题一致报错
# -- impala Daemon 内存限制 设置 mem_limit 为0 内存溢出不出现了; -- 参数配置
scp /data/data_tmp/fact_table_name.tmp root@IP:/home/ -- 远程文件传送
# -------------- kudu 数据导入导出 --------------
1:导出 kudu表数据 为csv文件
impala-shell中 导出kudu表数据为csv文件,或者说是通过impala的外部映射表把kudu表数据导出为csv文件
impala-shell -q "select * from rawdata.event_wos_p1 LIMIT 100" -B --output_delimiter="," -o/home/gzp/event_wos_p1.csv
2:把csv文件 导入到 kudu表中
2.1 首先impala中要创建带分隔符的临时表,即impala中创建的表带有row format delimited fields terminated by ',';
create table event_wos_p1_temp(day int,...)row format delimited fields terminated by ',';
2.2 使用 kudu java api 创建kudu表 或 impala中 创建kudu表
2.3 impala中 创建映射kudu表 的impala外部 映射表
2.4 INSERT INTO impala外部映射表/kudu表 SELECT * FROM 带分隔符的临时表;
INSERT INTO event_wos_p1 SELECT * FROM event_wos_p1_temp;
一、kudu数据导出到文件
impala-shell -l -u xuyi --auth_creds_ok_in_clear -q "select sms_content from warehouse.restart
where eventId='filtrate_inbox_sms_delete_sms' " -B --output_delimiter=“,” --print_header -o /home/xuyi/sms.xls
-q: 从命令行中传递一个查询或其他 shell 命令
-B: 从命令行中传递一个查询或其他 shell 命令
--output_delimiter 选项指定分隔符
-o 保存所有查询结果到指定的文件
二、文件数据导入到kudu
1、put数据到hadoop文件系统
2、创建impala表
create table impala_table(
aid string,
ts timestamp,
count bigint
)
row format delimited fields terminated by ',';
3、hdfs下的数据文件导入impala表中
load data inpath '/tem/my_data.csv' into table impala_table;
4、创建kudu表
create table kudu_table(
aid string not null,
ts timestamp,
count bigint
primary key(aid)
)
partition by hash(aid) partition 3
stored as kudu;
5、把impala 表数据导入到kudu表中
insert into kudu_table select * from impala_table;
-------------- kudu 数据导入导出 --------------
# ------------- python-kudu 安装 --------------
yum install kudu-client-devel kudu-client0
yum install gcc
yum install gcc-c++
yum install python-devel.x86_64 cyrus-sasl-devel.x86_64
----------- python impala ---------
pip3 install thrift_sasl
pip3 install sasl
pip3 install pandas
pip3 install impyla
pip3 install -i https://pypi.douban.com/simple --ignore-installed Cython==0.21.0
pip3 install -i https://pypi.douban.com/simple --ignore-installed kudu-python==1.11.0
pip3 uninstall Cython -- 卸载老版本
pip3 install setuptools==39.0.1 -- 版本如果不对容易报错
pip3 install impyla
pip3 list | grep -E -i "six|bitarray|thrift|ply|Cython|kudu|impyla"
pip3 install kudu
pip3 install kudu-python
--------- kudu-python 安装包 版本如下 ----------
bitarray 1.2.1
certifi 2019.11.28
chardet 3.0.4
Click 7.0
Cython 0.29.14
gitdb2 2.0.6
GitPython 3.0.7
idna 2.8
impyla 0.16.2
kudu 0.7
kudu-python 1.11.1
pathtools 0.1.2
pip 20.0.2
ply 3.11
pytz 2019.3
PyYAML 5.3
requests 2.22.0
setuptools 39.0.1
six 1.14.0
smmap2 2.0.5
thrift 0.13.0
thriftpy2 0.4.10
urllib3 1.25.8
watchdog 0.10.2
wheel 0.34.2
---------- 安装 ---------
# 下载 Python 源文件
wget --no-check-certificate https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
tar -xzvf Python-3.7.0.tgz # 解压缩包
cd Python-3.7.0 # 进入解压目录
编译安装
$ mkdir /usr/local/python3
$ ./configure --prefix=/usr/local/python3
$ make && make install
------- 建立软连接 -----
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
##ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
ln -s /usr/local/bin/pip3 /usr/bin/pip3
--------------------------------
-- 安装python3的virtualenv并建立superset的env ---------
pip3 install -i https://pypi.douban.com/simple --ignore-installed virtualenv
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
mkdir myproject
virtualenv --no-site-packages kudupy3 -- 建立KUDU 的kudupy3
source kudupy3/bin/activate -- 激活KUDU 的kudupy3 -- **** python 下虚拟环境
deactivate -- 退出虚拟环境