热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Docker实战(十五):Docker安装Hive环境

Docker安装Hive环境Hive安装#Hive必须运行在Hadoop之上,则需要先安装Hadoop环境,而且还需要MySQL数据库,具体Hadoop安装请参考上一篇文章,我们这里继

Docker安装Hive环境

Hive安装
# Hive必须运行在Hadoop之上,则需要先安装Hadoop环境,而且还需要MySQL数据库,具体Hadoop安装请参考上一篇文章,我们这里继承上一篇已经安装好的Hadoop镜像

# 下载Hive
$ wget http://apache.mirrors.ionfish.org/hive/hive-1.2.1/apache-hive-1.2.1-bin.tar.gz

# 解压Hive压缩包
$ tar -zxvf apache-hive-1.2.1-bin.tar.gz

# 下载MySQL驱动包
$ wget http://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.38.tar.gz

# 解压MySQL驱动压缩包
$ tar -zxvf mysql-connector-java-5.1.38.tar.gz

# 需要修改下面Hive相关的配置文件
Dockerfile文件
############################################
# version : birdben/hive:v1
# desc : 当前版本安装的hive
############################################
# 设置继承自我们创建的 hadoop 镜像
FROM birdben/hadoop:v1

# 下面是一些创建者的基本信息
MAINTAINER birdben (191654006@163.com)

# 设置环境变量,所有操作都是非交互式的
ENV DEBIAN_FRONTEND noninteractive

# 添加 supervisord 的配置文件,并复制配置文件到对应目录下面。(supervisord.conf文件和Dockerfile文件在同一路径)
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# 复制 hive-1.2.1 文件到镜像中(hive-1.2.1 文件夹要和Dockerfile文件在同一路径),这里直接把上一篇Hadoop环境直接用上了
ADD apache-hive-1.2.1-bin /software/hive-1.2.1

# 复制MySQL的驱动包到镜像中
COPY mysql-connector-java-5.1.38/mysql-connector-java-5.1.38-bin.jar /software/hive-1.2.1/lib/mysql-connector-java-5.1.38-bin.jar

# 授权HIVE_HOME路径给admin用户
RUN sudo chown -R admin /software/hive-1.2.1

# 执行supervisord来同时执行多个命令,使用 supervisord 的可执行路径启动服务。
CMD ["/usr/bin/supervisord"]
Dockerfile源文件链接:

https://github.com/birdben/birdDocker/blob/master/hive/Dockerfile

supervisor配置文件内容
# 配置文件包含目录和进程
# 第一段 supervsord 配置软件本身,使用 nodaemon 参数来运行。
# 第二段包含要控制的 2 个服务。每一段包含一个服务的目录和启动这个服务的命令。

[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd -D

[program:metastore]
command=/software/hive-1.2.1/bin/hive --service metastore

[program:hiveserver2]
command=/software/hive-1.2.1/bin/hive --service hiveserver2
配置HIVE_HOME/conf/hive-env.sh(默认不存在,将hive-env.sh.template复制并改名为hive-env.sh)
HADOOP_HOME=/software/hadoop-2.7.1
配置HIVE_HOME/conf/hive-log4j.properties(默认不存在,将hive-log4j.properties.template复制并改名为hive-log4j.properties)
配置HIVE_HOME/conf/hdfs-site.xml(默认不存在,将hive-default.xml.template复制并改名为hive-site.xml)



<configuration>
<property>

<name>hive.metastore.localname>
<value>falsevalue>
property>
<property>

<name>javax.jdo.option.ConnectionURLname>
<value>jdbc:mysql://172.17.0.2:3306/hivevalue>
property>
<property>
<name>javax.jdo.option.ConnectionDriveNamename>
<value>com.mysql.jdbc.Drivervalue>
property>
<property>
<name>javax.jdo.option.ConnectionUserNamename>
<value>rootvalue>
property>
<property>
<name>javax.jdo.option.ConnectionPasswordname>
<value>rootvalue>
property>
<property>

<name>hive.metastore.warehouse.dirname>
<value>/hive/warehousevalue>
property>
<property>

<name>hive.metastore.urisname>
<value>thrift://Ben:9083value>
property>
configuration>
控制台终端
# 先启动MySQL的Docker容器
$ sudo docker run -p 9999:22 -p 3306:3306 -t -i -v /docker/mysql/data:/software/mysql-5.6.22/data birdben/mysql:v1

# 然后查看MySQL的Docker容器的IP地址,Hive连接MySQL的IP地址需要配置这个IP
$ sudo docker inspect --format '{{.NetworkSettings.IPAddress}}' 34b5ac61b8bd
$ 172.17.0.2

# 构建镜像
$ docker build -t="birdben/hive:v1" .
# 执行已经构件好的镜像,挂载在宿主机器的存储路径也不同,-h设置hostname,Hadoop配置文件需要使用
$ docker run -h Ben -p 9998:22 -p 9083:9083 -p 9000:9000 -p 8088:8088 -p 50020:50020 -p 50070:50070 -p 50075:50075 -p 50090:50090 -t -i 'birdben/hive:v1'


# 然后直接通过ssh远程连接使用admin账号远程登录Hive的Docker容器
$ ssh root@10.211.55.4 -p 9998

# 启动hive shell,发现如下的错误,原因是还没有启动Hadoop,所以hive连接Hadoop时,报错java.net.ConnectException: Call From Ben/172.17.0.3 to Ben:9000 failed on connection exception: java.net.ConnectException: Connection refused;

$ admin@Ben:/$ cd /software/hive-1.2.1/bin
$ admin@Ben:/$ ./hive shell
16/06/25 10:48:40 WARN conf.HiveConf: HiveConf of name hive.metastore.local does not exist

Logging initialized using configuration in file:/software/hive-1.2.1/conf/hive-log4j.properties
Exception in thread "main" java.lang.RuntimeException: java.net.ConnectException: Call From Ben/172.17.0.3 to Ben:9000 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused

# 所以我们先启动Hadoop
# 先初始化namenode
$ admin@Ben:/$ cd /software/hadoop-2.7.1/bin
$ admin@Ben:/software/hadoop-2.7.1/sbin$ ./hdfs namenode -format

# 启动所有服务
admin@Ben:/$ cd /software/hadoop-2.7.1/sbin
admin@Ben:/software/hadoop-2.7.1/sbin$ ./start-all.sh

# 执行jps命令之前需要先把$JAVA_HOME/bin添加到PATH环境变量
admin@Ben:/$ export PATH=/software/jdk7/bin/:$PATH

# 执行jps命令如果能看到下面的6个进程就说明Hadoop启动的没有问题
admin@Ben:/software/hadoop-2.7.1/sbin$ jps
985 Jps
282 DataNode
587 ResourceManager
436 SecondaryNameNode
166 NameNode
691 NodeManager

# 此时重新启动hive shell,就可以成功登录hive了
$ admin@Ben:/$ cd /software/hive-1.2.1/bin
$ admin@Ben:/$ ./hive shell
hive>
hive> show databases;
OK
default
Time taken: 1.323 seconds, Fetched: 1 row(s)

# 注意:这里我是使用了之前的MySQL的Docker镜像,因为之前的MySQL的Docker镜像已经处理了root账号的更改密码和远程登录授权问题,所以这里没有涉及这些问题,具体设置可以参考之前的Docker安装MySQL镜像的文章

# 我们需要预先在mysql中创建一个hive的数据库,因为hive-site.xml是连接到这个hive数据库的,所有的hive元数据都是存在这个hive数据库中的
# 我们在hive中创建新的数据库和表来验证hive的元数据都存储在mysql了

# 在hive中创建一个新的数据库test_hive,test_hive这个数据库会对应mysql中的hive数据库中的DBS表中的一条记录
hive> CREATE DATABASE test_hive;

# 在hive中创建一个新的表test_person,test_person这个表会对应mysql中的hive数据库中的TBLS表中的一条记录
hive> USE test_hive;
hive> CREATE TABLE test_person (id INT,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';


# 在hive创建表的时候可能会遇到如下问题,是因为MySQL数据库字符集设置的utf-8导致的
# Specified key was too long; max key length is 767 bytes
# 修改MySQL的hive数据库的字符集为latin1就好用了
$ alter database hive character set latin1;
# 参考:http://blog.163.com/zhangjie_0303/blog/static/990827062013112623615941/

# test_person.txt
1 John
2 Ben
3 Allen
4 Jimmy
5 Will
6 Jackson

# 用scp命令将本地test_person.txt文件传到hive的Docker容器中
$ scp -P 9998 /Users/ben/workspace_git/birdDocker/hive/test_person.txt admin@10.211.55.4:/software/hive-1.2.1/

# 导入数据到test_person.txt到test_person表
hive> LOAD DATA LOCAL INPATH '/software/hive-1.2.1/test_person.txt' OVERWRITE INTO TABLE test_person;
Loading data to table test_hive.test_person
Table test_hive.test_person stats: [numFiles=1, numRows=0, totalSize=45, rawDataSize=0]
OK
Time taken: 2.885 seconds

# 查看test_person表数据
hive> select * from test_person;
OK
1 John
2 Ben
3 Allen
4 Jimmy
5 Will
6 Jackson
Time taken: 0.7 seconds, Fetched: 6 row(s)

# 查看test_hive数据库在HDFS中存储的目录
$ admin@Ben:$ cd /software/hadoop-2.7.1/bin

# 查看HDFS中/hive/warehouse目录下的所有文件,此目录是在hive-site.xml中hive.metastore.warehouse.dir参数配置的路径/hive/warehouse
$ admin@Ben:/software/hadoop-2.7.1/bin$ ./hdfs dfs -ls /hive/warehouse/
Found 1 items
drwxr-xr-x - admin supergroup 0 2016-06-25 11:39 /hive/warehouse/test_hive.db

# 查看test_person表在HDFS中存储的目录
$ admin@Ben:/software/hadoop-2.7.1/bin$ ./hdfs dfs -ls /hive/warehouse/test_hive.db/
Found 1 items
drwxr-xr-x - admin supergroup 0 2016-06-25 11:52 /hive/warehouse/test_hive.db/test_person

# 在深入一层就能看到我们导入的文件test_person.txt了
$ admin@Ben:/software/hadoop-2.7.1/bin$ ./hdfs dfs -ls /hive/warehouse/test_hive.db/test_person/
Found 1 items
-rwxr-xr-x 3 admin supergroup 45 2016-06-25 11:52 /hive/warehouse/test_hive.db/test_person/test_person.txt

# 查看test_person.txt文件里的内容,就是我们导入的内容
$ admin@Ben:/software/hadoop-2.7.1/bin$ ./hdfs dfs -cat /hive/warehouse/test_hive.db/test_person/test_person.txt
1 John
2 Ben
3 Allen
4 Jimmy
5 Will
6 Jackson

# OK,大功告成了,可以回家了 ^_^
test_hive数据库在MySQL的hive数据库中的DBS表中的一条记录

DBS表

test_person表在MySQL的hive数据库中的TBLS表中的一条记录

TBLS表

元数据解析

在MySQL可以查看Hive元数据表,除了DBS和TBLS存储数据库和表的基本信息,其他表的说明见下表:

MySQL的表 说明
BUCKETING_COLS Hive表CLUSTERED BY字段信息(字段名,字段序号)
CDS
COLUMNS_V2 存放表格的字段信息
DATABASE_PARAMS
DBS 存放hive所有数据库信息
FUNCS
FUNC_RU
GLOBAL_PRIVS
PARTITIONS Hive表分区信息(创建时间,具体的分区)
PARTITION_KEYS Hive分区表分区键(名称,类型,comment,序号)
PARTITION_KEY_VALS Hive表分区名(键值,序号)
PARTITION_PARAMS
PART_COL_STATS
ROLES
SDS 所有hive表、表分区所对应的hdfs数据目录和数据格式。
SD_PARAMS
SEQUENCE_TABLE SEQUENCE_TABLE表保存了hive对象的下一个可用ID,如’org.apache.hadoop.hive.metastore.model.MTable’, 21,则下一个新创建的hive表其TBL_ID就是21,同时SEQUENCE_TABLE表中271786被更新为26(这里每次都是+5)。同样,COLUMN,PARTITION等都有相应的记录
SERDES Hive表序列化反序列化使用的类库信息
SERDE_PARAMS 序列化反序列化信息,如行分隔符、列分隔符、NULL的表示字符等
SKEWED_COL_NAMES
SKEWED_COL_VALUE_LOC_MAP
SKEWED_STRING_LIST
SKEWED_STRING_LIST_VALUES
SKEWED_VALUES
SORT_COLS Hive表SORTED BY字段信息(字段名,sort类型,字段序号)
TABLE_PARAMS 表级属性,如是否外部表,表注释等
TAB_COL_STATS
TBLS 所有hive表的基本信息
VERSION

参考文章:

  • http://my.oschina.net/u/204498/blog/522772
  • http://blog.fens.me/hadoop-hive-intro/
  • http://www.mincoder.com/article/5809.shtml
  • http://blog.163.com/zhangjie_0303/blog/static/990827062013112623615941/

推荐阅读
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 项目运行环境配置及可行性分析
    本文介绍了项目运行环境配置的要求,包括Jdk1.8、Tomcat7.0、Mysql、HBuilderX等工具的使用。同时对项目的技术可行性、操作可行性、经济可行性、时间可行性和法律可行性进行了分析。通过对数据库的设计和功能模块的设计,确保系统的完整性和安全性。在系统登录、系统功能模块、管理员功能模块等方面进行了详细的介绍和展示。最后提供了JAVA毕设帮助、指导、源码分享和调试部署的服务。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
author-avatar
欣欣大妮
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有