Hive的部署,Hive是啥呢?
Hive部署的节点信息如下:
1 安装Hive包
与Hive相关的包有四个:
hive – 基础安装包,提供了运行时完整的语言支持,必须安装的
hive-metastore – 在作为单独的服务运行时提供了存储元数据的脚本,可选的。
hive-server – 在作为单独的HiveServer服务运行时,提供运行脚本,可选的。
hive-server2 –在作为单独的HiveServer服务运行时,提供运行脚本,可选的。
安装
apt-get install <pkg1> <pkg2>
2 配置Hive
配置Hive的Metastore(Hive的metastore服务存储了Hive表和分区相关的库的metadata),Hive运行总共有三种模式:
1 Embedded Mode
这是CDH部署Hive的metastore的默认模式,在这种模式下metastore使用一个derby数据库,database和metastore服务同时运行在HiveServer的主进程中,所以启动Hive进程的时候,它们是同时启动的。这种模式使用很少的配置就能运行,但是它只支持一个活跃用户。
2 Local Mode
这种模式下Hive的metastore服务也是运行在HiveServer进程中的,但是metastore数据库是运行在一个单独的进程中的,而且可以分离到其他机器上。
3 Remote Mode
在这种模式下metastore服务运行在自己的JVM进程中,HiveServer2,HCatalog, Cloudera ImpalaTM,和其他进程通过Thrift network API来通讯,metastore服务通过JDBC和metastore数据库通讯,HiveServer进程和metastore服务可以部署在同一台机机器上。
3 配置Metastore数据库(支持多种数据库:mysql/postgresql)
1 配置一个远程MySQL数据库作为Hive Metastore(metastorehost)
apt-get install mysql-server service mysql start
2 配置MySQL服务和转接器
apt-get install libmysql-java ln -s /usr/share/java/libmysql-java.jar /usr/lib/hive/lib/libmysql-java.jar
3 创建库和用户
1 初始化数据库,登陆mysql数据库执行以下命令
CREATE DATABASE metastore; USE metastore; SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive-schema-0.10.0.mysql.sql;
2 为Hive配置一个MySQL用户来访问mysql。
CREATE USER 'hive'@'metastorehost' IDENTIFIED BY 'mypassword'; REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'hive'@'metastorehost'; GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES,EXECUTE ON metastore.* TO 'hive'@'metastorehost'; FLUSH PRIVILEGES; quit;
4 配置Metastore服务连接MySQL数据库(client, metastore, HiveServer) /etc/hadoop/conf/hive-site.xml
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://myhost/metastore</value> <description>the URL of the MySQL database</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>mypassword</value> </property> <property> <name>datanucleus.autoCreateSchema</name> <value>false</value> </property> <property> <name>datanucleus.fixedDatastore</name> <value>true</value> </property> <property> <name>datanucleus.autoStartMechanism</name> <value>SchemaTable</value> </property> <property> <name>hive.metastore.uris</name> <value>thrift://<n.n.n.n>:9083</value> <description>IP address (or fully-qualified domain name) and port of the metastore host</description> </property>
4 配置HiveServer2
在使用HiveServer2之前,必须做如下配置的改变:
1 Table Lock Manager (Required),你必须适当的配置Hive's Table Lock Manager,这个需要你安装ZooKeeper,Lock Manager设置如下(/etc/hive/conf/hive-site.xml):
<property> <name>hive.support.concurrency</name> <description>Enable Hive's Table Lock Manager Service</description> <value>true</value> </property> <property> <name>hive.zookeeper.quorum</name> <description>Zookeeper quorum used by Hive's Table Lock Manager</description> <value>zk1.myco.com,zk2.myco.com,zk3.myco.com</value> </property> #你在开启Lock Manager的时候不指定zookeeper节点列表回导致不可预估的行为。如果你的zookeeper监听的不是默认的端口,则需要在Hive-site.xml重新设置端口信息。 <property> <name>hive.zookeeper.client.port</name> <value>2222</value> <description>The port at which the clients will connect.</description> </property>
2 JDBC驱动配置的连接格式
HiveServer_v2 jdbc:hive2://<host>:<port> org.apache.hive.jdbc.HiveDriver HiveServer_v1 jdbc:hive://<host>:<port> org.apache.hadoop.hive.jdbc.HiveDriver
3 认证授权
HiveServer2可以为所有的连接进行授权认证,默认情况下允许所有客户端连接,HiveServer2支持Kerberos或者LDAP认证,可以再hive-site.xml中通过hive.server2.authentication选项进行配置。你也可以配置认证插件,它允许你提供普通的认证给HiveServer2。
4 HiveServer2 for YARN
如果你把HiveServe2和YARN搭配使用,你就必须设置HADOOP_MAPRED_HOME环境变量在/etc/default/hive-server2文件中
export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce
5 同时运行HiveServer2和HiveServer
Cloudera建议你在大多数情况下使用HiveServer2来代替HiveServer (HiveServer1), HiveServer2和HiveServer1可以运行在同一个系统中,共享相同的数据设置。因为两者都是监听10000端口,所以如果运行在同一台机器上需要你修改其中一个的监听端口。例如修改HiVeServer2的端口在hive-site.xml文件中:
<property> <name>hive.server2.thrift.port</name> <value>10001</value> <description>TCP port number to listen on, default 10000</description> </property>
5 启动Metastore
如果你运行的是远程模式的metastore,则你必须在启动HiveServer2之前启动metastore服务。如下:
service hive-metastore start 或者 hive --service metastore
6 启动,,停止HiveServer2服务
cloudera建议使用HiveServer2服务,因为版本2支持多客户端和客户认证
1 启动
service hive-server2 start2 检查HiveServer2是否正常运行,在命令行运行如下命令:
beeline beeline>SHOW TABLESbeeline是hiveserver2的新CLI接口,你可以使用beeline和Hiveserver2进行交互,例如:
$ beeline beeline> !connect jdbc:hive2://localhost:10000 username password org.apache.hive.jdbc.HiveDriver 0: jdbc:hive2://localhost:10000>3 停止
service hive-server2 stop
7 启动HiveServer1
1 启动
service hiveserver start
2 验证,启动hive1的CLI接口
hive hive> show tables; OK Time taken: 10.345 seconds
8 Hive配合HBase使用
允许hive脚本连接Hbase,只需要在脚本中添加以下语句,例如:
ADD JAR /usr/lib/hive/lib/zookeeper.jar; ADD JAR /usr/lib/hive/lib/hive-hbase-handler-<Hive-HBase-Handler_version>-cdh<CDH_version>.jar ADD JAR /usr/lib/hive/lib/guava-<Guava_version>.jar;
9 在客户端安装Hive的JDBC
1 安装
apt-get install hive-jdbc
2 设置
把/usr/lib/hive/lib/*.jar和/usr/lib/hadoop/*.jar增加到你的classpath中
10 为使用YARN设置HADOOP_MAPRED_HOME
如果一些用户想使用pig、hive、sqoop来提交mapreduce2(YARN)的job,则需要设置HADOOP_MAPRED_HOME环境变量,如下:
export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce
11 你的hive数据存储在HDFS上面,一般在/user/hive/warehouse目录下。一般是hive-site.xml的hive.metastore.warehouse.dir属性设置。
下面开始部署,部署环境如下:
IP Hostname 192.168.1.40 U-4 Hive-server 192.168.1.50 U-5 Metastore 192.168.1.70 U-7 MetastoreDB(mysql) Hive-server21 U-7上安装Metastore的后端数据库,本文采用mysql
apt-get install mysql-server2 U-7安装mysql转接器
apt-get install libmysql-java ln -s /usr/share/java/libmysql-java.jar /usr/lib/hive/lib/libmysql-java.jar3 U-7 mysql数据库初始化,初始化metastore库
#mysql -uroot -hlocalhost -p mysql> CREATE DATABASE metastore; Query OK, 1 row affected (0.00 sec) mysql> USE metastore; Database changed mysql> SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive-schema-0.12.0.mysql.sql; Query OK, 0 rows affected (0.00 sec) mysql> CREATE USER 'hive'@'U-5' IDENTIFIED BY 'mypassword'; Query OK, 0 rows affected (0.00 sec) mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'hive'@'U-5'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES,EXECUTE ON metastore.* TO 'hive'@'U-5'; Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql> quit除了使用SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive-schema-0.12.0.mysql.sql来手动初始化 metastore库外,官方还提供一个一个工具schematool用来自动化初始化 metastore库,不过这个 schematool工具没找到.......
4 U-7上修改mysql配置文件/etc/mysql/my.cnf
#bind-address = 172.0.0.1 bind-address = 0.0.0.0
mysql默认监听本地回环地址,而一会儿要从远程链接mysql,所以需要修改监听地址。然后重启mysql服务即可。
5 U-5安装metastore
apt-get install hive-metastore6 U-5配置/etc/hive/conf/hive-site.xml文件
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://U-7/metastore</value> <description>the URL of the MySQL database</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>mypassword</value> </property> <property> <name>datanucleus.autoCreateSchema</name> <value>false</value> </property> <property> <name>datanucleus.fixedDatastore</name> <value>true</value> </property> <property> <name>datanucleus.autoStartMechanism</name> <value>SchemaTable</value> </property> <property> <name>hive.metastore.uris</name> <value>thrift://U-5:9083</value> <description>IP address (or fully-qualified domain name) and port of the metastore host</description> </property> </configuration>7 U-5上启动metastore服务
service hive-metastore start8 U-5的hive-site.xml文件拷贝到U-7的相同目录下,并在U-7的hive-site.xml中追加如下内容:
<property> <name>hive.support.concurrency</name> <description>Enable Hive's Table Lock Manager Service</description> <value>true</value> </property> <property> <name>hive.zookeeper.quorum</name> <description>Zookeeper quorum used by Hive's Table Lock Manager</description> <value>U-2,U-3,U-4</value> </property> </configuration>
9 U-7上安装hive-server2
apt-get install hive-server210 U-7启动hive-server2
service hive-server2 start11 U-7上使用beeline客户端测试
12 因为集群中同时支持hive-server和hive-server2,在U-4上安装hive-server
apt-get install hive-server
13 U-7的hive-site.xml文件拷贝到U-4的相同目录下
14 U-4上使用hive客户端命令进行测试