Hadoop Hive安装,配置mysql元数据库

  由于Hive依赖于Hadoop,安装Hive之前必须确认Hadoop可用,关于Hadoop的安装可以参考集群分布式 Hadoop安装详细步骤,这里不再叙述。

1.下载Hive安装包
  下载地址为:http://www.apache.org/dyn/closer.cgi/hive(或点击下面链接),选择一个稳定版本,假设下载的版本为:apache-hive-1.0.1-bin.tar.gz,解压:

tar -zxvf apache-hive-1.0.1-bin.tar.gz

  在apache的下载列表中可以看到hive-1.0.1.src.tar.gz和hive-hive-1.0.1.bin.tar.gz两个包,名字中带bin的压缩包中只包括已经编译好的的Hive程序,不包括Hive的源代码。

2.配置环境变量
  实际上即使不对操作系统的环境变量进行配置,Hive依然可以使用,但是如果每次都输入全路径效率很低,因此推荐对Linux操作系统的环境变量按以下方式进行配置。
修改全局配置文件/etc/profile或者用户目录下的私有文件~/.bashrc,在文件中加入以下信息:

export HIVE_HOME=/home/hadoop/apache-hive-1.0.1-bin
export PATH=$HIVE_HOME/bin:$HIVE_HOME/conf:$PATH

为了让配置立即生效,而不需要重新启动系统或者重新登录,运行以下命令:

source /etc/profile 或
source ~/.bashrc

3.创建Hive数据文件目录
在HDFS中建立用于存储Hive数据的文件目录(/tmp 目录可能已经存在):

hadoop fs -mkdir /tmp
hadoop fs -mkdir /user/hive/warehouse
hadoop fs -chmod 777 /tmp
hadoop fs -chmod 777 /user/hive/warehouse

  以上命令在HDFS中建立了/tmp及/usr/hive/warehouse目录,其中/tmp主要用于存放一些执行过程中的临时文件,/user/hive/warehouse用于存放hive进行管理的数据文件。

4.修改hive配置文件
  这一步不是必须的,如果不配置,Hive将使用默认的配置文件,通过Hive配置文件可以对Hive进行定制及优化。最常见的是对“元数据存储层”的配置,默认情况下Hive使用Derby数据库作为“元数据存储层”。
在Hive中Derby默认使用“单用户”模式进行启动,这就意味着同一时间只能有一个用户使用Hive,这适用于开发程序时做本地测试。
  Hive配置文件位于$Hive_Home/conf目录下面,名为hive-site.xml,这个文件默认情况下是不存在的,需要进行手动创建,在此目录下有个hive-default.xml.template的模板文件,首先需要通过它创建hive-site.xml文件。

cp hive-default.xml.template hive-site.xml

关于元数据库Dergy的默认配置如下:

<!--JDBC元数据仓库连接字符串-->
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:derby:;databaseName=metastore_db;create=true</value>
    <description>JDBC connect string for a JDBC metastore</description>
  </property>
  <!--JDBC元数据仓库驱动类名-->
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>org.apache.derby.jdbc.EmbeddedDriver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>
  <!--元数据仓库用户名-->
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>APP</value>
    <description>Username to use against metastore database</description>
  </property>
   <!--元数据仓库密码-->
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>mine</value>
    <description>password to use against metastore database</description>
  </property>

  从上面的配置中可以看到关于元数据库的配置,由于Hive中已经包含了这个内置的Derby数据库,因此不需要进行数据库的安装,同时在$Hive_Home/lib下还可以看到Derby的数据库驱动包(derby-xx.x.x.x.jar)。至此已经完成Hive各项工作的安装,可以通过以下命令测试Hive是否正常运行:

hive
hive> SET -v;
hive> quit;

出错处理:Exception in thread “main” java.lang.RuntimeException: java. lang. IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI:
${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:444)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:672)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.main(RunJar.java:160)
Caused by: java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI:
处理:
在hive-site.xml中新建配置项,iotmp文件夹是新建的:

<property>
<name>system:java.io.tmpdir</name>
<value>/home/hadoop/hive-1.0.1/iotmp</value>
<description/>
</property>

下面是配置mysql 元数据库,替换Derby

  如前所述,Hive在缺省情况下是使用内置的Derty数据库存储元数据,这对程序开发时本地测试没有任何问题。但如果在生产环境中,由于需要支持多用户同时进行系统访问,这可能不能满足应用需求。通过配置,可以让Derty运行为“多用户”模式来满足多用户访问需求。进一步,在实际的生产环境中通常会选用存储功能更为强大的Mysql数据库作为“元数据存储层”。Mysql作为最流行的开源关系型数据库,使用面广、功能多样,必要时可以充当临时的标准数据查询与分析系统使用,因此得到大量的Hive用户的青睐。
如果使用Mysql作为“元数据存储层”,首先需要安装Mysql,可以使用如下命令:

#sudo apt-get install mysql-server

安装之后再数据库中建立Hive账号并设置权限:

mysql> create user 'hive'@'%' identified by 'hive';
mysql> grant all privileges on *.* to 'hive'@'%' with grant option;
mysql> flush privileges;

接下来需要对hive-sive.xml配置文件进行以下修改,以支持mysql:

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost:3306/metastore_db?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>Driver class name for a JDBC metastore</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>password to use against metastore database</description>
</property>

  另外,由于Hive没有默认包含Mysql的JDBC驱动,因此需要将mysql-connector-java-x.x.xx.jar文件拷贝到$Hive_Home/lib目录中,否则Hive无法与Mysql进行通信。至此,基于Mysql作为“元数据存储层”的Hive系统配置完成。(jar包下载需要注册oracle,需要的可以留言)

参考文献:《深入理解大数据 大数据处理与编程实战》主编:黄宜华老师(南京大学)

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