然后在HDFS创建目录来保存数据。
hadoop fs -mkdir /tmp hadoop fs -mkdir /user/hive/warehouse hadoop fs -chmod g+w /tmp hadoop fs -chmod g+w /user/hive/warehouse
在启动hive之前,首先要启动hdfs。 新版本的HiveServer2已经代替了之前的HiveServer2,现在我们用HiveServer2来启动hive。
先用schematool工具来配置数据库schematool,如果使用mysql进行配置,拷贝MySQL驱动文件到hive的lib目录下,修改hive-site.xml文件如下
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/mysql?createDatabaseIfNotExist= true</value> <description>JDBC connect string for a JDBC metastore </description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> <description>username to use against metastore database </description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> </description> </property>
bin/schematool -dbType derby -initSchema或 bin/schematool -dbType mysql -initSchema
HiveServer2拥有自己的CLI叫做Beeline。使用Beeline运行Hive如下
bin/hiveserver2 bin/beeline -ujdbc:hive2://$HS2_HOST:$HS2_PORT 测试可用bin/beeline -u jdbc:hive2:// 注意启动hive之前,先把HIVE_HOME下jdbc目录下的jar放到lib目录下。
启动Hcatalogserver
$HIVE_HOME/hcatalog/sbin/hcat_server.sh
使用Hcatalog
$HIVE_HOME/hcatalog/bin/hcat
运行网页版
$HIVE_HOME/hcatalog/sbin/webhcat_server.sh
首先我们来看一下架构图:
Hive架构包括以下组件: 1. Driver组件:该组件包括Complier、Optimizer和Executor,它们的作用是将我们写的HQL进行解析、编译优化、生成执行计划,然后调用底层的mapreduce计算框架。 2. MetaStore组件:元数据服务组件,Hive的元数据存储在关系型数据库里,Hive支持的关系型数据库有Derby、MySql。元数据对Hive非常重要,因此Hive支持把MetaStore服务独立出来,安装到远程的服务器集群里,从而解耦Hive服务和MetaStore服务,保证Hive运行的健壮性。 3. 解释器、编译器和优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成,生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行。 4. Thrift服务组件:thrift是facebook开发的一个软件架构,它用来进行可扩展且跨语言的服务开发,Hive集成了该服务,能让不同的编程语言调用Hive接口。 5. CLI组件:command line interface命令行接口。 6. Thrift客户端组件:上面的架构图没有写Thrift客户端,但是Hive的许多客户端是建立在Thrift客户端基础上的,包括ODBC、JDBC接口。 7. WEBGUI组件:Hive提供了一种通过网页的方式访问Hive所提供的服务。这个接口对应Hive的hwi组件(Hive web interface),使用之前要启动hwi。 重点介绍一下MetaStore,MetaStore包括两个部分:MetaStore服务和后台数据的存储,后台数据存储的介质就是关系型数据库,例如Hive默认的嵌入式磁盘数据库是Derby,还有MySql。MetaStore服务是建立在后台数据介质之上,并且可以和Hive服务进行交互的服务组件,默认情况下,默认情况下MetaStore服务和Hive服务是安装在一起的,运行在同一个进程中,也可以把MetaStore服务剥离出来,独立安装在一个集群里,Hive远程调用MetaStore服务,这样我们就可以把元数据放到防火墙之后,客户端访问Hive服务,就可以连接到元数据这层,从而提供了更好的管理性和安全保障。使用远程MetaStore服务可以让Hive服务和MetaStore服务运行在不同的进程里,保障了Hive的稳定性以及以及提成了服务的效率。参考下图:
