基於CDH5.x 下面使用eclipse 操作hive 。使用java通過jdbc連接HIVESERVICE 創建表
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);
}
}
}
要執行上面的代碼需要以下依賴包:
還有一個hadoop-core-1.1.1.jar
執行上面的代碼會出現:
Error while compiling statement: No privilege 'Create' found for outputs { database:default }
根據代碼提示我們就要去搞權限的問題了。
CDH5的Hive權限配置
1、默認是沒有限制的,所以我們通過執行命令開啟。(特意提醒:在hive里面執行。。。)
set hive.security.authorization.enabled=true;
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.創建角色
create role test_role;
//創建一個測試角色
create role admin;
2.給角色授權
grant all on database default to role admin;
//賦予所有權限給admin這個角色
grant select on database default to role admin;
//這個是例子。。。
3.給角色添加用戶
grant role admin to user root;
因為我最上面的代碼賬號是root,要執行那段代碼需要賦予權限給root
這個是CSDN上面某位大哥的
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;