impala使用;kudu 的安装,python 链接 kudu

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_name
STORED AS KUDU
TBLPROPERTIES (
'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 10
STORED 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 -- 退出虚拟环境

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值