1 启动hiveserver2服务,直接到hive/bin目录下执行hiveserver2,或者./hive --service hiveserver2.默认端口是10000,可以通过hiveConf进行配置;
2 依赖包导入有两种方式:a 将hive安装目录的lib下面的全部jar包和hadoop安装目录的share/hadoop/common/lib下的全部jar包一起导入到项目下;b 通过maven将必要的几个jar包依赖导入;自己用的方法a。
3 java程序访问
package com.sf.scala.sparkSql.test; import java.sql.*; /** * Created by zkw on 17-10-12. */ public class HiveTest { private static String driverName = "org.apache.hive.jdbc.HiveDriver"; public static void main(String[] args){ try{ Class.forName(driverName); Connection con = DriverManager.getConnection("jdbc:hive2://ip:10000/selfwork","hadoop","hadoop"); String sql = "select * from srczkw"; PreparedStatement pstmt = con.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); while (rs.next()){ System.out.println(rs.getInt("key")+"**"+rs.getString("value")); } }catch(ClassNotFoundException e){ e.printStackTrace(); }catch (SQLException e){ e.printStackTrace(); } } }
可能遇到的问题:
1 driverName错误,有一种是带hadoop的,可以通过引入的jar包查看具体的路径和名称
2 connection的url错误,我们用的是hive2,另一种hive使用不了;
3 User: hadoop is not allowed to impersonate hive 。修改hadoop的配置文件core-site.xml,添加
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property><property>
4 重启hadoop(无需重新format),之后立刻运行程序会报Name node is in safe mode,这是因为hadoop还在同步数据,稍等片刻等同步完成即可正常运行了。
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>