Hive 本地环境搭建

Hive version: 3.1.2

System: macOS Mojave 10.14.4

Run on Hadoop 2.10.0

 

安装准备

Java 8

https://www.jianshu.com/p/6289bd0bb69c

 

Hadoop 2.10.0

https://blog.csdn.net/adorechen/article/details/104589268

 

初始化

cp $HIVE_HOME/conf/hive-env.sh.template $HIVE_HOME/conf/hive-env.sh

vim $HIVE_HOME/conf/hive-env.sh

修改$HADOOP_HOME=你的hadoop安装路径

In addition, you must use below HDFS commands to create /tmp and /user/hive/warehouse (aka hive.metastore.warehouse.dir) and set them chmod g+w before you can create a table in Hive.

  $ $HADOOP_HOME/bin/hadoop fs -mkdir       /tmp
  $ $HADOOP_HOME/bin/hadoop fs -mkdir       /user/hive/warehouse
  $ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /tmp
  $ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /user/hive/warehouse

 

Running Hive CLI

To use the Hive command line interface (CLI) from the shell:

  $ $HIVE_HOME/bin/hive

 启动hive cli 后执行语句 select version(); 测试下, 发现报错:

FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

查看hive日志位置,然后查看日志得到错误信息。

find /private -name "hive.log" 2>/dev/null

Self-test query [select "DB_ID" from "DBS"] failed; direct SQL is disabled

javax.jdo.JDODataStoreException: Error executing SQL query "select "DB_ID" from "DBS"".

metastore 没有初始化。停止hive命令,运行下面的命令初始化metastore数据库,默认使用嵌入式数据库derby。

$HIVE_HOME/bin/schematool -dbType derby -initSchema  

再次测试 “select version();" 得到结果:

select version();

OK

3.1.2 r8190d2be7b7165effa62bd21b7d60ef81fb0e4af

Time taken: 1.966 seconds, Fetched: 1 row(s)

 至此Hive本地可以执行命令了。

 

运行HiveServer2 & Beeline

HiveServer2
Hive内置了HiveServer和HiveServer2服务,两者都允许客户端使用多种编程语言进行连接,但是HiveServer不能处理多个客户端的并发请求,所以产生了HiveServer2。

HiveServer2(HS2)允许远程客户端可以使用各种编程语言向Hive提交请求并检索结果,支持多客户端并发访问和身份验证。HS2是由多个服务组成的单个进程,其包括基于Thrift的Hive服务(TCP或HTTP)和用于Web UI的Jetty Web服务器。

HiveServer2拥有自己的CLI(Beeline),Beeline是一个基于SQLLine的JDBC客户端。由于HiveServer2是Hive开发维护的重点(Hive0.15后就不再支持hiveserver),所以Hive CLI已经不推荐使用了,官方更加推荐使用Beeline。
 

$HIVE_HOME/bin/hiveserver2

使用beeline客户端连接服务器:

$HIVE_HOME/bin/beeline -u jdbc:hive2://localhost:10000

得到的错误信息如下:

Error: Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: adore.chen is not allowed to impersonate anonymous (state=08S01,code=0)

 错误在于user adore.chen 不允许使用anonymous访问hadoop。hadoop proxy user 细节参考:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/Superusers.html

解决办法:在$HADOOP_HOME/etc/hadoop/core-site.xml configuration中加入

<property>

     <name>hadoop.proxyuser.adore.chen.hosts</name>

     <value>*</value>

   </property>

   <property>

     <name>hadoop.proxyuser.adore.chen.users</name>

     <value>*</value>

   </property>

还是不能解决上面的错误信息。原因在于我的用户名"adore.chen"里有“."和配置里的分隔符"."一致,所以它不认识。

 

使用root用户来启动hiveserver2

sudo $HIVE_HOME/bin/hiveserver2

修改proxyuser代理配置: $HADOOP_HOME/etc/hadoop/core-site.xml

<property>

     <name>hadoop.proxyuser.root.hosts</name>

     <value>*</value>

   </property>

   <property>

     <name>hadoop.proxyuser.root.users</name>

     <value>*</value>

   </property>

设置HADOOP_USER_NAME

vim ~/.bash_profile

export HADOOP_USER_NAME=root

 

查看启动日志,一切正常。使用beeline连接,终于成功了。

 beeline -u jdbc:hive2://localhost:10000

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/opt/hive-3.1.2/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/opt/hadoop-2.10.0/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]

Connecting to jdbc:hive2://localhost:10000

Connected to: Apache Hive (version 3.1.2)

Driver: Hive JDBC (version 3.1.2)

Transaction isolation: TRANSACTION_REPEATABLE_READ

Beeline version 3.1.2 by Apache Hive

0: jdbc:hive2://localhost:10000> 

总结:启动hiveServer2时自己的用户名一定不能带有点号。

 

 

使用hive-default.xml.template时碰到的问题

cp $HIVE_HOME/conf/hive-default.xml.template $HIVE_HOME/conf/hive-site.xml

 

然后抛出下面异常:

com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x8

 at [row,col,system-id]: [3215,96,"file:/opt/hive-3.1.2/conf/hive-site.xml"]

at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:621)

at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:491)

解决方案:

3215行: Exclusive locks for&#8;transactional tables.  

&#8;   改字符串系统不能识别,删除。

 

异常: 

${systemjava.io.tmpdir%7D$%7Bsystemuser.name%7D

替换下面的字段

<name>hive.exec.local.scratchdir</name>

<value>${system:java.io.tmpdir}/${system:user.name}</value>

 

<name>hive.downloaded.resources.dir</name>

 <value>${system:java.io.tmpdir}/${hive.session.id}_resources</value>

 

<name>hive.querylog.location</name>

 <value>${system:java.io.tmpdir}/${system:user.name}</value>

 

<name>hive.server2.logging.operation.log.location</name>

<value>${system:java.io.tmpdir}/${system:user.name}/operation_logs</value>

 

 

<name>hive.exec.local.scratchdir</name>

<value>/opt/hive-3.1.2/tmp/adore.chen</value>

 

<name>hive.downloaded.resources.dir</name>

<value>/opt/hive-3.1.2/tmp/${hive.session.id}_resources</value>

 

<name>hive.querylog.location</name>

 <value>/opt/hive-3.1.2/tmp/adore.chen</value>

 

<name>hive.server2.logging.operation.log.location</name>

<value>/opt/hive-3.1.2/tmp/adore.chen/operation_logs</value>

 

 

参考文章:

https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-InstallationandConfiguration

https://cwiki.apache.org/confluence/display/Hive/Setting+up+HiveServer2#SettingUpHiveServer2-Impersonation

https://blog.csdn.net/m0_37809146/article/details/91127860 

https://blog.csdn.net/qq_35036995/article/details/80473508

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值