Hive的安装部署
先决条件
- 搭建好三节点Hadoop集群;
- hadoop100上先安装好MySQL服务;
准备安装包
- 下载hive安装包
apache-hive-3.1.2-bin.tar.gz
- 规划安装目录
/opt/pkg/hive
- 上传安装包到hadoop100服务器中
解压
解压安装包到指定的规划目录/opt/pkg/
1 2 |
[hadoop@hadoop100 ~]$ cd /export/softwares/ [hadoop@hadoop100 soft]$ tar -xzvf apache-hive-3.1.2-bin.tar.gz -C /opt/pkg/ |
修改配置文件
- 进入hive安装目录
1 |
[hadoop@hadoop100 servers]$ cd /opt/pkg |
- 重新命名hive目录
1 |
[hadoop@hadoop100 install]$ mv apache-hive-3.1.2-bin/ hive |
- 修改/opt/pkg//conf目录下的hive-site.xml, 默认没有该文件, 需要手动创建
1 2 |
[hadoop@hadoop100 install]$ cd /opt/pkg/hive/conf/ [hadoop@hadoop100 conf]$ vim hive-site.xml |
- 进入编辑模式, 文件内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<?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日志存储目录
1 |
[hadoop@hadoop100 conf]$ mkdir /opt/pkg/hive/logs/ |
重命名生成文件hive-log4j.properties
1 2 3 4 |
[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属性的值
1 2 |
#更改以下内容,设置我们的hive的日志文件存放的路径,便于排查问题 hive.log.dir=/opt/pkg/hive/logs/ |
拷贝mysql驱动包
上传mysql驱动包,如mysql-connector-java-5.1.38.jar
到/opt/download/
目录中
由于运行hive时,需要向mysql数据库中读写元数据,所以需要将mysql的驱动包上传到hive的lib目录下
1 2 |
[hadoop@hadoop100 ~]$ cd /opt/download/ [hadoop@hadoop100 soft]$ cp mysql-connector-java-5.1.38.jar /opt/pkg/hive/lib/ |
解决日志Jar包冲突
1 2 3 4 |
# 进入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
文件
1 |
$ sudo vim /etc/profile |
末尾添加如下内容
1 2 |
export HIVE_HOME=/opt/pkg/hive export PATH=$PATH:$HIVE_HOME/bin |
使修改生效
1 |
$ source /etc/profile |
初始化元数据库
- 新建一个hadoop100连接, 登录MySQL
1 2 |
# 连接MySQL, 用户名root, 密码niit1234 [hadoop@hadoop100 ~]$ mysql -uroot -pniit1234 |
- 创建hive元数据, 需要和hive-site.xml中配置的一致
1 2 3 |
-- 创建数据库, 数据库名为: metastore create database metastore; show databases; |
- 退出mysql
1 |
exit |
- 初始化元数据库
1 |
[hadoop@hadoop100 ~]$ schematool -initSchema -dbType mysql -verbose |
看到schemaTool completed 表示初始化成功
验证安装
- hadoop集群已启动
- mysql服务已启动
- 在hadoop100上任意目录启动hive cli命令行客户端
1 2 |
[hadoop@hadoop100 ~]$ hive # 启动成功之后, 警告信息可以忽略 |
查看有哪些数据库
1 |
show databases; |
说明hive安装成功
退出cli
1 |
quit; |
HBase与Hive整合配置
拷贝jar包
将我们HBase的五个jar包拷贝到hive的lib目录下
hbase的jar包都在/opt/pkg/hbase/lib
我们需要拷贝五个jar包名字如下
1 2 3 4 5 |
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执行以下命令
1 |
cd /opt/pkg/hbase-2.2.2/lib |
1 2 3 4 5 |
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
1 2 |
cd /opt/pkg/hive/conf vim hive-site.xml |
添加以下两个属性的配置
1 2 3 4 5 6 7 8 |
<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配置文件
1 2 3 |
cd /opt/pkg/apache-hive-3.1.2/conf cp hive-env.sh.template hive-env.sh vim hive-env.sh |
- 添加以下配置
1 2 3 |
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表
1 2 |
cd /opt/pkg/hive/ bin/hive |
创建hive数据库与hive对应的数据库表
1 2 3 4 5 |
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执行以下命令,创建数据文件
1 2 |
cd /opt/data vim hive-hbase.txt |
文件内容如下
1 2 3 4 |
1 zhangsan 80 2 lisi 60 3 wangwu 30 4 zhaoliu 70 |
vim编辑时
:set noexpandtab
关闭将tab转换成空格的设置,输入时使用制表符作为分隔符
可以:set list
用来查看制表符(^I)和换行($)
进入hive客户端进行加载数据
1 2 |
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当中创建内部表
1 2 3 |
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 插入数据
1 |
insert overwrite table course.hbase_score select id,cname,score from course.score; |
hbase当中查看表 hbase_score
进入hbase的客户端查看表hbase_score,并查看当中的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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客户端,
1 |
bin/hbase shell |
手动创建一张表,并插入加载一些数据进去
1 2 3 4 5 6 7 8 9 |
# 创建一张表 # 通过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当中的表数据
1 2 3 |
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
1 |
select * from course.hbase2hive; |
Views: 15