Hadoop CDH4.5 Hive部署

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

Hadoop CDH4.5 Hive部署_第1张图片

                    这是CDH部署Hive的metastore的默认模式,在这种模式下metastore使用一个derby数据库,database和metastore服务同时运行在HiveServer的主进程中,所以启动Hive进程的时候,它们是同时启动的。这种模式使用很少的配置就能运行,但是它只支持一个活跃用户。

             2    Local Mode        

Hadoop CDH4.5 Hive部署_第2张图片

                    这种模式下Hive的metastore服务也是运行在HiveServer进程中的,但是metastore数据库是运行在一个单独的进程中的,而且可以分离到其他机器上。

             3    Remote Mode

Hadoop CDH4.5 Hive部署_第3张图片

                    在这种模式下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 start
            2    检查HiveServer2是否正常运行,在命令行运行如下命令:

beeline
beeline>SHOW TABLES
                    beeline是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-server2
1    U-7上安装Metastore的后端数据库,本文采用mysql

apt-get install mysql-server
2    U-7安装mysql转接器

apt-get install libmysql-java
ln -s /usr/share/java/libmysql-java.jar /usr/lib/hive/lib/libmysql-java.jar
3    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-metastore
6    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 start
8    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-server2
10  U-7启动hive-server2

service hive-server2 start
11  U-7上使用beeline客户端测试

Hadoop CDH4.5 Hive部署_第4张图片

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客户端命令进行测试

Hadoop CDH4.5 Hive部署_第5张图片






你可能感兴趣的:(hive,cdh)