Hive的安装部署
先决条件
- 搭建好三节点Hadoop集群;
- hadoop100上先安装好MySQL服务;
准备安装包
- 下载hive安装包
apache-hive-3.1.2-bin.tar.gz - 规划安装目录
/opt/pkg/hive - 上传安装包到hadoop100服务器中
解压
解压安装包到指定的规划目录/opt/pkg/
[hadoop@hadoop100 ~]$ cd /export/softwares/
[hadoop@hadoop100 soft]$ tar -xzvf apache-hive-3.1.2-bin.tar.gz -C /opt/pkg/
修改配置文件
- 进入hive安装目录
[hadoop@hadoop100 servers]$ cd /opt/pkg
- 重新命名hive目录
[hadoop@hadoop100 install]$ mv apache-hive-3.1.2-bin/ hive
- 修改/opt/pkg//conf目录下的hive-site.xml, 默认没有该文件, 需要手动创建
[hadoop@hadoop100 install]$ cd /opt/pkg/hive/conf/
[hadoop@hadoop100 conf]$ vim hive-site.xml
- 进入编辑模式, 文件内容如下
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop100:3306/metastore?useSSL=false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>niit1234</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hadoop100</value>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
</configuration>
- 修改日志配置文件hive-log4j.properties
创建hive日志存储目录
[hadoop@hadoop100 conf]$ mkdir /opt/pkg/hive/logs/
重命名生成文件hive-log4j.properties
[hadoop@hadoop100 conf]$ pwd
/opt/pkg/hive/conf
[hadoop@hadoop100 conf]$ mv hive-log4j2.properties.template hive-log4j2.properties
[hadoop@hadoop100 conf]$ vim hive-log4j2.properties # 修改文件
修改此文件的hive.log.dir属性的值
#更改以下内容,设置我们的hive的日志文件存放的路径,便于排查问题
hive.log.dir=/opt/pkg/hive/logs/
拷贝mysql驱动包
上传mysql驱动包,如mysql-connector-java-5.1.38.jar到/opt/download/目录中
由于运行hive时,需要向mysql数据库中读写元数据,所以需要将mysql的驱动包上传到hive的lib目录下
[hadoop@hadoop100 ~]$ cd /opt/download/
[hadoop@hadoop100 soft]$ cp mysql-connector-java-5.1.38.jar /opt/pkg/hive/lib/
解决日志Jar包冲突
# 进入lib目录
[hadoop@hadoop100 conf]$ cd /opt/pkg/hive/lib/
# 重新命名 或者直接删除
[hadoop@hadoop100 lib]$ mv log4j-slf4j-impl-2.10.0.jar log4j-slf4j-impl-2.10.0.jar.bak
配置Hive环境变量
打开/etc/profile文件
$ sudo vim /etc/profile
末尾添加如下内容
export HIVE_HOME=/opt/pkg/hive
export PATH=$PATH:$HIVE_HOME/bin
使修改生效
$ source /etc/profile
初始化元数据库
- 新建一个hadoop100连接, 登录MySQL
# 连接MySQL, 用户名root, 密码niit1234
[hadoop@hadoop100 ~]$ mysql -uroot -pniit1234
- 创建hive元数据, 需要和hive-site.xml中配置的一致
-- 创建数据库, 数据库名为: metastore
create database metastore;
show databases;
- 退出mysql
exit
- 初始化元数据库
[hadoop@hadoop100 ~]$ schematool -initSchema -dbType mysql -verbose
看到schemaTool completed 表示初始化成功
验证安装
- hadoop集群已启动
- mysql服务已启动
- 在hadoop100上任意目录启动hive cli命令行客户端
[hadoop@hadoop100 ~]$ hive
# 启动成功之后, 警告信息可以忽略
查看有哪些数据库
show databases;
说明hive安装成功
退出cli
quit;
HBase与Hive整合配置
拷贝jar包
将我们HBase的五个jar包拷贝到hive的lib目录下
hbase的jar包都在/opt/pkg/hbase/lib
我们需要拷贝五个jar包名字如下
hbase-client-2.2.2.jar
hbase-hadoop2-compat-2.2.2.jar
hbase-hadoop-compat-2.2.2.jar
hbase-it-2.2.2.jar
hbase-server-2.2.2.jar
- 在hadoop100执行以下命令
cd /opt/pkg/hbase-2.2.2/lib
cp hbase-protocol-2.2.2.jar /opt/pkg/hive/lib/
cp hbase-server-2.2.2.jar /opt/pkg/hive/lib/
cp hbase-client-2.2.2.jar /opt/pkg/hive/lib/
cp hbase-common-2.2.2.jar /opt/pkg/hive/lib/
cp hbase-common-2.2.2-tests.jar /opt/pkg/hive/lib/
如果发现hive/lib已经存在相同jar包(大版本相同即可),也可以先不拷贝。
修改hive的配置文件
编辑hadoop100服务器上面的hive的配置文件hive-site.xml
cd /opt/pkg/hive/conf
vim hive-site.xml
添加以下两个属性的配置
<property>
<name>hive.zookeeper.quorum</name>
<value>hadoop100,hadoop101,hadoop102</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop100,hadoop101,hadoop102</value>
</property>
修改hive-env.sh配置文件
cd /opt/pkg/apache-hive-3.1.2/conf
cp hive-env.sh.template hive-env.sh
vim hive-env.sh
- 添加以下配置
export HADOOP_HOME=/opt/pkg/hadoop
export HBASE_HOME=/opt/pkg/hbase
export HIVE_CONF_DIR=/opt/pkg/hive/conf
需求一:将hive表当中分析的结果保存到hbase表当中去
hive当中建表
- hadoop100执行以下命令,进入hive客户端,并创建hive表
cd /opt/pkg/hive/
bin/hive
创建hive数据库与hive对应的数据库表
create database course;
use course;
create external table if not exists course.score(id int, cname string, score int)
row format delimited fields terminated by '\t' stored as textfile ;
准备数据内容如下并加载到hive表
hadoop100执行以下命令,创建数据文件
cd /opt/data
vim hive-hbase.txt
文件内容如下
1 zhangsan 80
2 lisi 60
3 wangwu 30
4 zhaoliu 70
vim编辑时
:set noexpandtab关闭将tab转换成空格的设置,输入时使用制表符作为分隔符
可以:set list用来查看制表符(^I)和换行($)
进入hive客户端进行加载数据
hive (course)> load data local inpath '/opt/data/hive-hbase.txt' into table score;
hive (course)> select * from score;
创建hive管理表与HBase进行映射
我们可以创建一个hive的管理表与hbase当中的表进行映射,hive管理表当中的数据,都会存储到hbase上面去
hive当中创建内部表
create table course.hbase_score(id int,cname string,score int)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties("hbase.columns.mapping" = "cf:name,cf:score") tblproperties("hbase.table.name" = "hbase_score");
通过insert overwrite select 插入数据
insert overwrite table course.hbase_score select id,cname,score from course.score;
hbase当中查看表 hbase_score
进入hbase的客户端查看表hbase_score,并查看当中的数据
hbase(main):023:0> list
TABLE
hbase_score
myuser
myuser2
student
user
5 row(s) in 0.0210 seconds
=> ["hbase_score", "myuser", "myuser2", "student", "user"]
hbase(main):024:0> scan 'hbase_score'
ROW COLUMN+CELL
1 column=cf:name, timestamp=1550628395266, value=zhangsan
1 column=cf:score, timestamp=1550628395266, value=80
2 column=cf:name, timestamp=1550628395266, value=lisi
2 column=cf:score, timestamp=1550628395266, value=60
3 column=cf:name, timestamp=1550628395266, value=wangwu
3 column=cf:score, timestamp=1550628395266, value=30
4 column=cf:name, timestamp=1550628395266, value=zhaoliu
4 column=cf:score, timestamp=1550628395266, value=70
4 row(s) in 0.0360 seconds
需求二:创建hive外部表,映射HBase当中已有的表模型
HBase当中创建表并手动插入加载一些数据
进入HBase的shell客户端,
bin/hbase shell
手动创建一张表,并插入加载一些数据进去
# 创建一张表
# 通过put插入数据到hbase表
create 'hbase_hive_score',{ NAME =>'cf'}
put 'hbase_hive_score','1','cf:name','zhangsan'
put 'hbase_hive_score','1','cf:score', '95'
put 'hbase_hive_score','2','cf:name','lisi'
put 'hbase_hive_score','2','cf:score', '96'
put 'hbase_hive_score','3','cf:name','wangwu'
put 'hbase_hive_score','3','cf:score', '97'
建立hive的外部表,映射HBase当中的表以及字段
在hive当中建立外部表
进入hive客户端,然后执行以下命令进行创建hive外部表,就可以实现映射HBase当中的表数据
CREATE external TABLE course.hbase2hive(id int, name string, score int)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf:name,cf:score") TBLPROPERTIES("hbase.table.name" ="hbase_hive_score");
查看hive表course.hbase2hive
select * from course.hbase2hive;
Views: 15
