如何使用Java程序将数据加载到配置单元?

时间:2015-07-13 13:18:08

标签: java hadoop hive hadoop2

我已尝试使用命令行方式将数据加载到配置单元中。用这种方式工作正常。

现在我想通过Java加载数据。所以为了这个目的,我编写了代码&我可以创建表,数据库,在其中插入值,但在使用load命令时它无法正常工作。

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)我在表的HDFS路径上给hadoop用户授予所有权限 2)我给表,如SELECT,INSERT,DELETE

的所有权限

请帮我解决此问题。

1 个答案:

答案 0 :(得分:1)

确保以下内容 -

  • 如果您有kerberos安全设置,请不要忘记使用kinit
  • 用户“hadoop”应该有权访问该文件夹(hive表位置)。 - 对于要更改权限的任何HDFS路径,只需“更改权限”或“chmod”命令就不起作用。你需要运行“hdfs dfs -setfacl -R -m user :: rwx”。
  • 此外,请确保此表位置与您可以成功创建的其他表具有相同的父目录。 [有时,管理员可以限制在其他位置创建表格。]