hive JDBC异常到多租户

  hive jdbc执行select count(*) from test报错。
  return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
  google网调(百度毛也没有搜到,还是国内大牛都不屑于回答问题),终于发现原来是因为jdbc需要在代码中指定用户(可以不指定密码),代表可以使用哪个用户来调用该语句。
  这个问题解决了大数据的多租户问题;在代码中只要通过jdbc链接字符串指定了用户名(id都不需要指定)即可指定执行用户的名称;

  hive的jdbc字符串+YARN的resource pool也就实现了多租户处理。

  至于用于,一定是要在hadoop目录的/user下面已经存在的用户;如果需要创建:
  hadoop fs -mkdir /user/bd
  hadoop fs -chown bd:bd /user/bd
即可。
  如上创建目录以及目录权限之后,就可以进行MapReduce操作了。
    在hadoop世界里面,宿主机的用户和和hadoop用户映射的,一般情况下,都是当前机器执行用户来扮演同名的hadoop用户。上例,bd是centos用户,但是开始没有在hadoop中进行创建;在hive的jdbc的链接串的时候指定bd用户,将会返回retun code 1,看一下日志可以发现是权限问题。
但是也不是绝对,对于hive这种情况下,可能并不是在系统中直接运行脚本,而是通过api去告诉YARN用户名,也不需要和系统用户一一对应;比如在cloudera安装的CDH默认会创建HUE2用户,这个用户就没有对应系统用户。

posted on 2017-12-23 22:11  下士闻道  阅读(642)  评论(0编辑  收藏  举报

导航