Hive进阶之Metastore、hiveserver2配置及使用beeline连接Hbase

3 篇文章 0 订阅
3 篇文章 0 订阅

一、 Hive整合Hbase参考连接:

连接地址:https://blog.csdn.net/wx2007xing/article/details/88862762

二、 hive配置Metastore

 

2、 配置Metastore

Hadoop配置

进入到hadoop软件的配置目录

# cd $HADOOP_HOME/etc/hadoop
# vim core-site.xml
# 添加如下配置
  <property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
  </property>
  <property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
  </property>

注意:如果你使用的hadoop用户则name配置hadoop.proxyuser.hadoop.hosts和hadoop.proxyuser.hadoop.groups

Hive配置

进入到Hive软件的配置目录

不设置用户名密码的配置,连接Hbase的配置

# cd $HIVE_HOME/conf
# vim hive-site.xml
# 添加如下内容
   <property>
        <name>hive.metastore.uris</name>
        <value>thrift://h1:9083</value>
   </property>、
   <!--
    如果连接HBase需要将beeline连接hiveserver2的用户名密码禁用(暂时先这样设置)
    -->
   <property>
        <name>hive.server2.enable.doAs</name>
        <value>false</value>
        <description>
     如果为True:Hive Server会以提交用户的身份去执行语句
     如果为False:会以hive server daemon的admin user来执行语句
        </description>
    </property>

设置用户名密码的配置,不连接Hbase的配置

# cd $HIVE_HOME/conf
# vim hive-site.xml
# 添加如下内容
   <property>
        <name>hive.metastore.uris</name>
        <value>thrift://h1:9083</value>
   </property>、
   <!--配置hiveserver2用户名密码,目的是对外屏蔽到mysql真实的用户名密码 -->
   <property>
        <name>hive.server2.thrift.client.user</name>
        <value>root</value>
    </property>
    <property>
        <name>hive.server2.thrift.client.password</name>
        <value>root</value>
    </property>

至此配置完毕

三、启动

1、 启动Metastore

# 前台启动
# hive --service metastore
2019-03-28 20:40:45: Starting Hive Metastore Server
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/software/hive-3.1.1/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/software/hadoop-3.1.2/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]

# 或后台启动
# hive --service metastore &

2、 启动hiveserver2

# hive --service hiveserver2
# 或者(因为已经配置了环境变量,在hive的bin目录下有hiveserver2脚本)
# hiveserver2
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/software/hive-3.1.1/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/software/hadoop-3.1.2/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]
Hive Session ID = 83b12586-6bbe-4222-aa75-0a5df1da9df3
Hive Session ID = 04106346-c9b8-47ed-9be4-3c4c7dcc8804
Hive Session ID = 2f8adbe5-9f55-4a5d-84f5-cfd1d8865260
Hive Session ID = 111e0ec4-5137-4397-9f5b-cca045226581
OK

注意:由于hiveserver2启动比较慢,可以通过以下命令检查

# netstat -anp|grep 10000
tcp        0      0 192.168.247.11:39554    192.168.247.11:10000    ESTABLISHED 31370/java          
tcp6       0      0 :::10000                :::*                    LISTEN      31087/java          
tcp6       0      0 192.168.247.11:10000    192.168.247.11:39554    ESTABLISHED 31087/java

3、 使用beeline连接

# 由于已经配置了hive环境变量,所有可用直接使用beeline命令
# 也可以进入到hive的bin目录下,执行 ./beeline
# beeline
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/software/hive-3.1.1/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/software/hadoop-3.1.2/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]
Beeline version 3.1.1 by Apache Hive
beeline>
# 使用jdbc连接,期间会让输入用户名密码,由于已经配置了无需用户名密码,所以直接回车(Enter)即可
beeline> !connect jdbc:hive2://h1:10000
Connecting to jdbc:hive2://h1:10000
Enter username for jdbc:hive2://h1:10000: 
Enter password for jdbc:hive2://h1:10000: 
Connected to: Apache Hive (version 3.1.1)
Driver: Hive JDBC (version 3.1.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://h1:10000>

4、 测试

输入sql语句:show tables;

结果如下:

0: jdbc:hive2://h1:10000> show tables;
INFO  : Compiling command(queryId=root_20190328204908_23db4e7d-bd3d-4023-b403-90d42b79b8db): show tables
INFO  : Concurrency mode is disabled, not creating a lock manager
INFO  : Semantic Analysis Completed (retrial = false)
INFO  : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:tab_name, type:string, comment:from deserializer)], properties:null)
INFO  : Completed compiling command(queryId=root_20190328204908_23db4e7d-bd3d-4023-b403-90d42b79b8db); Time taken: 2.659 seconds
INFO  : Concurrency mode is disabled, not creating a lock manager
INFO  : Executing command(queryId=root_20190328204908_23db4e7d-bd3d-4023-b403-90d42b79b8db): show tables
INFO  : Starting task [Stage-0:DDL] in serial mode
INFO  : Completed executing command(queryId=root_20190328204908_23db4e7d-bd3d-4023-b403-90d42b79b8db); Time taken: 0.119 seconds
INFO  : OK
INFO  : Concurrency mode is disabled, not creating a lock manager
+----------------+
|    tab_name    |
+----------------+
| hbase_table_1  |
| spark_test     |
| test           |
+----------------+
3 rows selected (3.812 seconds)

其中test的是Hbase外部表,如果创建Hbase外部表,参考连接:https://blog.csdn.net/wx2007xing/article/details/88862762

测试是否可用连接到hbase上

0: jdbc:hive2://h1:10000> select * from test;
INFO  : Compiling command(queryId=root_20190328204920_ae673cf6-4b71-4976-a98d-6dffcf56b486): select * from test
INFO  : Concurrency mode is disabled, not creating a lock manager
INFO  : Semantic Analysis Completed (retrial = false)
INFO  : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:test.key, type:string, comment:null), FieldSchema(name:test.id, type:int, comment:null), FieldSchema(name:test.name, type:string, comment:null)], properties:null)
INFO  : Completed compiling command(queryId=root_20190328204920_ae673cf6-4b71-4976-a98d-6dffcf56b486); Time taken: 8.094 seconds
INFO  : Concurrency mode is disabled, not creating a lock manager
INFO  : Executing command(queryId=root_20190328204920_ae673cf6-4b71-4976-a98d-6dffcf56b486): select * from test
INFO  : Completed executing command(queryId=root_20190328204920_ae673cf6-4b71-4976-a98d-6dffcf56b486); Time taken: 0.001 seconds
INFO  : OK
INFO  : Concurrency mode is disabled, not creating a lock manager
+-----------+----------+------------+
| test.key  | test.id  | test.name  |
+-----------+----------+------------+
| 1         | 1        | wx         |
| 2         | 2        | user       |
+-----------+----------+------------+
2 rows selected (43.231 seconds)
0: jdbc:hive2://h1:10000> 

至此完毕

四、 总结

1、 异常一

Exception in thread "main" org.apache.hive.service.cli.HiveSQLException: java.io.IOException: org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=36, exceptions:
Sat Jun 17 16:09:48 CST 2017, null, java.net.SocketTimeoutException: callTimeout=60000, callDuration=68116: row 'hhh_tj_atmosphere_history,,00000000000000' on table 'hbase:meta' at region=hbase:meta,,1.1588230740, hostname=slave3,16020,1497683020356, seqNum=0

这个异常就是连接无法Hbase异常。

解决:

#beeline连接hbase时这里要设置为false
#默认情况下,HiveServer2以提交查询的用户执行查询(true),如果hive.server2.enable.doAs设置为false,查询将以运行hiveserver2进程的用户运行

<property>
    <name>hive.server2.enable.doAs</name>
    <value>false</value>
</property>

2、 异常二

User: root is not allowed to impersonate anonymous (state=08S01,code=0)

此异常是在hiveserver2启动时报的异常

解决:

  # 在hadoop的配置目录下的core-site.xml文件添加如下内容
  <property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
  </property>
  <property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
  </property>

  # 注意如果是其它的User:XXX..........,则将下面的root改为对应的用户。如hadoop,则为

  # 在hadoop的配置目录下的core-site.xml文件添加如下内容
  <property>
    <name>hadoop.proxyuser.hadoop.hosts</name>
    <value>*</value>
  </property>
  <property>
    <name>hadoop.proxyuser.hadoop.groups</name>
    <value>*</value>
  </property>

备注:如果有其它问题,请多查看日志信息

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 使用SparkSQL可以通过HiveServer2和Beeline查询Hive中的数据。具体步骤如下: 1. 首先需要启动HiveServer2服务,可以通过以下命令启动: ``` $ hive --service hiveserver2 ``` 2. 然后使用Beeline连接HiveServer2,可以通过以下命令连接: ``` $ beeline -u jdbc:hive2://localhost:10000 ``` 其中,localhost为HiveServer2所在的主机名或IP地址,10000为HiveServer2的端口号。 3. 连接成功后,可以使用SparkSQL语句查询Hive中的数据,例如: ``` SELECT * FROM mytable; ``` 其中,mytable为Hive中的表名。 4. 查询完成后,可以使用exit命令退出Beeline。 ``` !exit ``` 以上就是使用SparkSQL查询Hive数据的步骤。 ### 回答2: SparkSQL作为一种分布式计算引擎,与Hive的结合非常紧密,能够支持基于Hive元数据的DDL操作和HiveQL语言的查询。而HiveServer2作为Hive服务的一种实现,提供了支持多客户端并发访问的能力,通过Beeline客户端即可与HiveServer2进行交互。 下面我们主要介绍使用SparkSQL和HiveServer2 + Beeline查询Hive数据的步骤: 1.启动HiveServer2服务 首先需要启动HiveServer2服务,如果已经启动过则可以跳过此步骤。可以通过hive-site.xml配置文件中的hive.server2.enable.doAs参数来开启该服务,如下面的配置: <property> <name>hive.server2.enable.doAs</name> <value>true</value> </property> 2.启动Beeline客户端 接着我们需要启动Beeline客户端,并连接HiveServer2服务。在命令行中输入以下命令: beeline -u jdbc:hive2://localhost:10000/default 其中,localhost表示HiveServer2运行的机器地址,10000表示HiveServer2提供服务的端口号,default表示默认的数据库名称。 3.使用SparkSQL语法查询Hive数据 在Beeline客户端中,使用SparkSQL语法即可查询Hive数据。例如,我们可以使用以下命令查询一张名为student的表中的数据: SELECT * FROM student; 如果需要查询其他的数据库,可以使用USE语句切换到相应的数据库中。例如,使用以下命令切换到名为test的数据库中: USE test; 然后再执行相应的查询语句即可。 总之,通过SparkSQL和HiveServer2 + Beeline的组合使用,可以非常方便地进行Hive数据查询和分析。无需手动编写MapReduce程序,只需使用简单的SQL语句即可查询并分析庞大的Hive数据。同时,SparkSQL还能够与其他Spark生态系统中的组件无缝集成,如Spark Streaming、MLlib等等,提供全面的数据处理和分析能力。 ### 回答3: SparkSQL是Apache Spark生态系统中的一款数据处理工具,提供了结构化数据处理的功能。它可以通过使用Hive元存储实现与Hive的互操作性,与Hive集成使用可以提高开发的性能和执行效率。 SparkSQL通过HiveServer2和Beeline连接Hive中,可以在SparkSQL中使用Hive所有的数据操作指令。在使用之前,需要首先配置正确的连接信息。一般而言,使用以下命令可以实现连接: ```bash ./bin/beeline !connect jdbc:hive2://<host>:<port>/<dbname>;user=<username> ``` 其中,`<host>`为HiveServer2所在的机器IP地址或主机名, `<port>`为HiveServer2的端口号,`<dbname>`为Hive中的数据库名称,`<username>`为Hive用户名称。 连接成功后,可以使用SparkSQL查询语句直接查询Hive中的数据。例如: ```sql SELECT * FROM table_name LIMIT 10; ``` 以上命令会在SparkSQL中查询Hive中名为`table_name`的数据表,并且返回前10行数据。除此之外,还可以使用SparkSQL的一些其他的数据操作指令对Hive数据进行处理,例如: **创建表** ```sql CREATE TABLE my_table (id INT, name STRING, age INT); ``` **插入数据** ```sql INSERT INTO my_table VALUES (1, "Tom", 20); ``` **表联接** ```sql SELECT t1.id, t1.name, t2.age FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id; ``` 总之,使用SparkSQL连接Hive的方式可以大幅提高使用Hive进行数据处理的效率,它基于内存的高速数据处理引擎,可以在大规模的数据处理任务中表现出色。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值