基于CDH5.x 下面使用eclipse 操作hive 。使用java通过jdbc连接HIVESERVICE 创建表
[mw_shl_code=applescript,true]import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* Created by Sebastian on 2016/10/25.
*
*/
public class Hive {
private static String driverName = "org.apache.hive.jdbc.HiveDriver"; //驱动名称
private static String url = "jdbc:hive2://cluster1:10000/default"; //由于我的HIVE版本是hive1.1所以使用hive2
private static String user = "root";
private static String password = "root123";
private static String sql = "";
private static ResultSet res;
public static void main (String[] args) {
try {
Class.forName(driverName);
Connection conn = DriverManager.getConnection(url,user,password);
Statement stmt = conn.createStatement();
//需要创建的表名
String tableName = "testHiveTable";
// 如果表存在就删除
// sql = "drop table" + tableName;
// stmt.execute(sql);
// 创建表
sql = "CREATE table " + tableName + " (key int, value string) row format delimited fields terminated by '\t' STORED AS TEXTFILE";
stmt.execute(sql);
conn.close();
conn = null;
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
} catch (SQLException e) {
e.printStackTrace();
System.exit(1);
}
}
}[/mw_shl_code]
要执行上面的代码需要以下依赖包:
还有一个Hadoop-core-1.1.1.jar
执行上面的代码会出现:
Error while compiling statement: No privilege ‘Create’ found for outputs { database:default }
根据代码提示我们就要去搞权限的问题了。 CDH5的Hive权限配置
1、默认是没有限制的,所以我们通过执行命令开启。(特意提醒:在hive里面执行。。。) [mw_shl_code=applescript,true]set hive.security.authorization.enabled=true;
[/mw_shl_code]
2.Cloudera Manager中配置
2.1首先在hive-site.xml的客户端配置代码段里面设置
第一个就是开启权限
第二个就是表的创建者对其创建的表,拥有所有的权限。
第三个就是权限控制配置罗
2.2要在hive-site.xml 的 HiveServer2 高级配置代码段(安全阀)添加如下配置
然后在CDH里面重启过期服务。进入hive开始设置权限权限列表:
名称 | 描述 | ALL | 所有权限 | ALTER | 允许修改元数据(modify metadata data of object)—表信息数据 | UPDATE | 允许修改物理数据(modify physical data of object)—实际数据 | CREATE | 允许进行Create操作 | DROP | 允许进行DROP操作 | INDEX | 允许建索引(目前还没有实现) | LOCK | 当出现并发的使用允许用户进行LOCK和UNLOCK操作 | SELECT | 允许用户进行SELECT操作 | SHOW_DATABASE | 允许用户查看可用的数据库 |
1.创建角色 [mw_shl_code=applescript,true]create role test_role;
//创建一个测试角色
create role admin;[/mw_shl_code]
2.给角色授权 [mw_shl_code=applescript,true]grant all on database default to role admin;
//赋予所有权限给admin这个角色
grant select on database default to role admin;
//这个是例子。。。[/mw_shl_code] 3.给角色添加用户
grant role admin to user root;
因为我最上面的代码账号是root,要执行那段代码需要赋予权限给root 这个是CSDN上面某位大哥的 http://blog.csdn.net/wangyijie0219/article/details/46564587
1.给用户授权 基于数据库 grant select on database default to user admin;
基于某张表: grant select on table TTT to user admin;
2.给组授权 基于数据库: grant select on database default to group admin;
基于某张表 grant select on table TTT to group admin;
3.给角色授权 基于数据库: grant select on database default to role admin;
基于某张表 grant select on table ppdata to role admin;
4.创建角色 create role test_role;
5.给用户添加角色 grant role test_roleto user user Sebastian;
6.给用户移除权限 基于数据库: revoke select on database default from user Sebastian; 基于某张表 revoke select on table TTT from Sebastian;
7.查看权限
SHOW GRANT user root ON DATABASE default;
SHOW GRANT group test_role ON DATABASE default;
|