hadoop生态系统之hive的部署
hive的一些设计机制
hive的管理接口
hive的管理接口有三个:CLI,Client和 WUI。
其中最常用的是 CLI,Cli是本地的命令行接口。
Client是Hive的客户端,连接Hive Server。
WUI是通过web方式访问 Hive。
hive元数据存储
Hive的元数据可以存储在多种数据库里如mysql、derby、oracle、pgsql。一般选择是免费开源历史长的mysql。当然现在有通过hdfs本身来存储这些元数据
的方案。有机会可以去试试,也希望有人能提供经验。
HiveServer2与 HiveServer
简单说, HiveServer2是 HiveServer的升级版本,主要体现在:Kerberos身份验证支持,多客户端的并发支持。
HiveServer2可以使用bin/beeline命令来进入管理.在我这个发行版本中 ./hive --service hiveserver 启动的就是 HiveServer2。
hive的数据存储
与pig单纯的处理数据不同,hive有自己的数据存储空间。对非自己目录下的数据称为“外在”数据。hive没有专门的数据存储格式,也没有索引,只有按文件目录方式组织的表,
一般只需要确定列分隔符和行分隔符,Hive就可以解析数据为一个“表”。
Hive中数据按目录结构依次分为:Table(External Table也就是非hive目录下的Table),Partition,Bucket。
Table:对应一个相应的目录存储数据。例如,一个表 t1,它在HDFS中的路径就为:/warehouse/t1.而External Table不在/warehouse目录下面。属于一次性处理的数据.
Partition:一个 Partition(分区)对应于表下的一个目录,例如:t1表中的c1,c2分区,则对应于 c1=1,c2=2的目录为:/warehouse/t1/c1=1/c2=2;对应于 ds = 20090801, ctry = CA 的 HDFS 子目录为;/wh/pvs/ds=20090801/ctry=CA。
Buckets:对应一个文件。如:t1表中的c3列,将t3列分散至多个bucket,首先对t3列的值计算hash,对应hash值为0的文件为:/warehouse/t1/c1=1/c2=2/part-0000
对于hive的数据,你是可以直观的看到的。使用fs命令可以详细的看看你的数据如何被存储的。
hive与hbase结合
hive与hbase的结合将会越来越多,目前需要引用的jar包及方法:
1 在脚本前面添加:
ADD JAR /usr/lib/hive/lib/zookeeper.jar;
ADD JAR /usr/lib/hive/lib/hbase.jar;
ADD JAR /usr/lib/hive/lib/hive-hbase-handler-0.10.0-cdh4.3.0.jar
ADD JAR /usr/lib/hive/lib/guava-11.0.2.jar;
hive的部署
选用cloudera的 hive0.10.0-cdh4.3.0
选用理由:依据cloudera的特色,cloudera知名,有实力,商用性强,生态系统组件完善,且各个组件版本对应正确,文档维护好。
申请的机器:
192.168.2.21 hive
192.168.2.15 mysql服务器
假设你已经安装好了
配置过程:
在hive中,用户自定义配置文件hive-site.xml高于默认配置文件hive-default.xml.
配置hive-site.xml
javax.jdo.option.ConnectionURL jdbc:mysql://192.168.2.15/hive?createDatabaseIfNotExist=true mysql服务器用于保存hive元数据
javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver mysql的java驱动 注意hive不自带mysql-connector-java-5.1.25-bin.jar 这个jar包 需要你手动复制过去 或者添加classpath
javax.jdo.option.ConnectionUserName mysql服务器用户名
javax.jdo.option.ConnectionPassword mysql服务器密码
hive.metastore.uris thrift://192.168.2.21:9083 hiveserver地址
datanucleus.autoCreateSchema false 这个默认是true的 每次启动的时候都会去检查创建有时候还会有冲突 ,所以手动创建完数据库架构后就把它设为 false
datanucleus.fixedDatastore true
datanucleus.autoStartMechanism SchemaTable
hive.task.progress 为每个操作使用计数器?是为什么有这个设置。这个设置的话很浪费文件打开数。
如果要启动HiveServer2还需要下面的设置
hive.support.concurrency true 确定并发支持。
hive.zookeeper.quorum 192.168.2.21 用hbase的那个
hive.zookeeper.client.port 如果zookeeper不在默认端口,用这个指定
javax.jdo.option.ConnectionURL jdbc:hive2://192.168.2.21:10000
javax.jdo.option.ConnectionDriverName org.apache.hive.jdbc.HiveDriver
hive.metastore.execute.setugi true 用户使用自身及所在组的权限来使用hive的元数据
客户端使用jdbc连接HiveServer2需要添加hive以及hadoop的jar包到其classpath。
配置hive-env.sh
HADOOP_HOME 你的hadoop装在哪里就填写哪里的地址
设置权限 /hive/warehouse 为1777 ,1表示添加sticky bit,设置目点是允许所有用户创建添加表但是不能删除非自己创建的表,
初始化metadata的数据库
SOURCE {hive目录}/scripts/metastore/upgrade/mysql/hive-schema-0.10.0.mysql.sql;
运行命令
bin/hive
进入cli 命令行窗口
./hive --service metastore 如果metadata在远程的话必须启动远程服务
./hive --service hiveserver