目录
背景
装完hadoop装hive、spark,然后开始尝试让客户端以jdbc的方式连接hive数据库,结果出了几个棘手的错误
error starting hiveServer2
java.lang.NoSuchMethodError: org.eclipse.jetty.server.Server.setThreadPool(Lorg/eclipse/jetty/util/thread/ThreadPool;)V
客户端要想连接hive,就必须启动hiveserver2,但启动hiveserver2时,爆出了这么一个错误,jetty中Server里没有setThreadPool()方法。这是hadoop3.0.2中jettyServer包的问题,没得别的方法,只能把hadoop由3.0.2降到2.8.5,其间可能遇到的问题请参见文章win10编译Hadoop3.0.2源码遇到的坑和win10启动hadoop时遇到的坑,2.8.5的编译运行过程和3.0.2的一模一样。
为什么要重新编译hadoop源码,是因为我在使用hive建表时,爆了一个错:
java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z:
要解决它,就必须修改hadoop源码(hadoopHome\hadoop-common-project\hadoop-common\src\main\java\org\apache\hadoop\io\nativeio),让access()方法直接返回true
hiveServer启动完后,就可以用jdbc客户端连接hive了,其间遇到的问题和解决方案如下:
ConnectionException:Call from ... to localhost:10000 failed on connection exception:Connection refused no further information
得先启动hadoop,并且检查客户端连接url,端口号要和hiveserver2的一致(默认10000)
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException):user is not allowed to impersonate hive
权限问题,在hadoophome\etc\hadoop\core-site.xml文件里,添加如下内容:
<property>
<name>hadoop.proxyuser.123.groups</name>
<value>*</value>
<description>Allow the superuser oozie to impersonate any members of the group group1 and group2</description>
</property>
<property>
<name>hadoop.proxyuser.123.hosts</name>
<value>*</value>
<description>The superuser can connect only from host1 and host2 to impersonate a user</description>
</property>
中间的123换成自己的用户名,然后重启hadoop和hiveserver就可以了
资源下载
hadoop2.8.5源码下载链接:
链接:https://pan.baidu.com/s/1IPhMuM1V3sxoXOZ69iyI5w
提取码:uv41
编译好的hadoop2.8.5下载链接:
链接:https://pan.baidu.com/s/1mRDlZpfvNwhTBi0T2FD_Pg
提取码:d35w