2015-07-13 69 views
1

我試過用命令行方式將數據加載到配置單元中。它的工作方式很好。如何使用Java程序將數據加載到配置單元中?

現在我想通過Java加載數據。所以爲此目的,我寫了代碼&我可以創建表,數據庫,插入值,但使用加載命令時,它不工作。

private static String driverName = "org.apache.hive.jdbc.HiveDriver"; 
     private static String databaseURL = "jdbc:hive2://server_name:10001/test"; 
     private static String userName = "<hadoop_user"; 
     private static String password = "<password>"; 
     private static Connection con = null; 
     private final static Logger log = 
     private static String dbName="db_name", 
       tableName="table_name", 
       path = ""; 
private void loadData(String path,String tableName) { 

      // create statement 
      Statement stmt; 
      try { 
       stmt = con.createStatement(); 
       String sql = "LOAD DATA LOCAL INPATH 'file:/"+path+ "' OVERWRITE INTO TABLE "+tableName+""; 
       System.out.println("Load Data into successful"+sql); 
       stmt.execute("LOAD DATA LOCAL INPATH 'file:/"+path+ "' OVERWRITE INTO TABLE "+tableName+""); 



       con.close(); 
      } catch (SQLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

給這個問題,

Caused by: org.apache.hadoop.hive.ql.security.authorization.plugin.HiveAccessControlException: Permission denied: Principal [name=hadoop, type=USER] does not have following privileges for operation LOAD [[SELECT, INSERT, DELETE, OBJECT OWNERSHIP] on Object [type=LOCAL_URI, name=file:/D:/DTCC/Pig/Dummy_data_Main.tsv]] 
    at org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLAuthorizationUtils.assertNoDeniedPermissions(SQLAuthorizationUtils.java:414) 
    at org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizationValidator.checkPrivileges(SQLStdHiveAuthorizationValidator.java:96) 
    at org.apache.hadoop.hive.ql.security.authorization.plugin.HiveAuthorizerImpl.checkPrivileges(HiveAuthorizerImpl.java:85) 
    at org.apache.hadoop.hive.ql.Driver.doAuthorizationV2(Driver.java:725) 
    at org.apache.hadoop.hive.ql.Driver.doAuthorization(Driver.java:518) 
    at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:455) 
    at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:303) 
    at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1067) 
    at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1061) 
    at org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:100) 
    ... 15 more 

我的嘗試: 1)我給所有權限的Hadoop用戶表 2的HDFS路徑)我給所有的權限表,如SELECT上, INSERT,DELETE

請幫我解決這個問題。

+0

http://stackoverflow.com/questions/31825086/mismatched-input-row-expecting-eof-error-while-creating-hive-table 請參考上面的問題和回答我 – nani

回答

1

確保以下 -

  • 如果你有Kerberos安全設置時,不要忘了使用的kinit
  • 用戶「的Hadoop」應有權訪問該文件夾上書寫(蜂巢表的位置) 。 - 對於任何要更改權限的HDFS路徑,只需「更改權限」或「chmod」命令將不起作用。您需要運行「hdfs dfs -setfacl -R -m user :: rwx」。
  • 此外,請確保此表位置具有與您成功創建的其他表相同的父目錄。 [有時,管理員可以限制在其他位置創建表]。
相關問題