`
houzhaowei
  • 浏览: 497926 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

云计算实战 (海量日志管理)hive -- hive + hiveclient (hive 客户端)

阅读更多

      五个节点的hadoop服务器集群搭建完成后,得想办法提高开发效率,mapreduce 我不是高手,写起来有点麻烦,公司业务不等人,还是决定上hive。

      话说想玩好hadoop 还得学精mapreduce ,或许我把这个任务往后放放。

      废话不多说,接下来介绍下hive 的安装和实际应用。

      hive 安装:

      本人hadoop 用的就是cloudera 的release 当然hive 也不例外。

      所以安装很简单:

      Debian 上安装:

 

$ sudo apt-get install hadoop-hive
  

 

    redhat/centos 上安装:

 

$ sudo yum install hadoop-hive

 

    启动hive 控制台:

 

 

$ hive
hive>

okay,可以使用hive 了  你可以参照hive 的wiki 里的介绍(很全面)玩一玩hive 的操作

http://wiki.apache.org/hadoop/Hive

玩了会儿了,该干正事了。

hive 默认带的是derby 数据库来存放创建的表信息(只存放表结构,内容放到hdfs里)

derby毕竟是嵌入式数据库,作正式应用不安全。幸好hive支持mysql,于是安装mysql

我用的是centos 安装自然很简单:

 

yum install mysql-server

 

 启动mysql:

  /etc/init.d/mysqld start

 

 为hadoop/hive 创建mysql用户:

 

mysql
mysql> CREATE USER 'hadoop'@'centos1' IDENTIFIED BY 'hadoop';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'hadoop'@'centos1' WITH GRANT OPTION;
mysql> exit

  测试是否成功:

 

 

su - hadoop
mysql -h centos1 -u hadoop -p

 

  okay 现在我们成功安装了hive 下面我们修改hive 的配置让hive使用mysql  
  如果你用的cloudera 的话:

vi /etc/hive/conf/hive-site.xml

 

 

然后改成这样:
  
<property>
  <name>hive.metastore.local</name>
  <value>true</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://centos1:3306/hive?createDatabaseIfNotExist=true</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hadoop</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>hadoop</value>
</property>

 okay, 现在启动 hive:

$hive

 

用的就是mysql 数据库存放表结构了。 

你会惊奇地发现之前玩的那些表都没了,就让它们长眠在derby里吧!

 

集群搭建完毕,于是乎实际应用来了。

由于scribe 用的时间不长,产生的日志量还少,我们需要对过去三个月的cookie访问数据进行一个分析。

怎么办? 写个java程序吧数据库里的数据导进来(scribe之前 ,还是吧所有日志写到数据库中的,可想而知查询得多慢)

导出了15G的数据(3各月cookie访问记录)

下面就有个不能满足的需求了:要求把分析结果放回到mysql 数据库中方便管理人员查看

你懂的, linux控制台操作的hive 是不可能把结果数据放进mysql的(就我的能力而言。) 只能打印到控制台或者写入文件

 

于是乎想到了hive 是有jdbc 客户端的

 

首先启动hive server:

 

hive --service hiveserver 50031(端口号)

好了服务启动了,等待客户端连接并执行客户端代码。

 

hive 支持多种客户端,jdbc odbc php python 等等 想了解的可以去wiki 看看。

 

 

okay 用eclipse 写hive 吧~  这回熟悉了吧

在eclipse 中创建一个新的javaproject 

把hive/lib 下的所有jar copy到项目的lib目录下 另外再加一个mysql-connector-5.*.*.jar 用来把数据写入mysql

废话不说 ,贴代码:

 

package com.hive;

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;

public class HiveJdbcClient {
	private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";

	/**
	 * @param args
	 * @throws SQLException
	 */
	public static void main(String[] args) throws SQLException {
		try {
			Class.forName(driverName);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.exit(1);
		}
		Connection con = DriverManager.getConnection(
				"jdbc:hive://192.168.3.201:50031/defalt", "hadoop",
				"masterninja");
		Statement stmt = con.createStatement();
		ResultSet res = stmt
				.executeQuery("select  cookie_id ,COUNT(cookie_id)count  from cookie_info where uid=5779665 group by cookie_id ORDER BY count DESC limit 20");
		while (res.next()) {
			System.out.println(res.getString(1) +"         "+ res.getInt(2));
		}
	}
}

 我这里只是把结果集打印出来了  没有写入mysql (贴的只是测试代码)

写好后运行就成。如果您公司的服务器与外网是隔离的(我们公司就是)

就把程序打个jar 上传到服务器集群中的一台上(起码能访问到hiveserver 的)

运行java -jar XXX.jar

你会发现hive server 的那台机器开始在linux控制台打印了...

成功~

 

若有疑问欢迎交流。

 

1
0
分享到:
评论
7 楼 刘宇斌 2014-02-26  
您好 有个问题想请教您一下 
您这个是通过jdbc连接的,如何配置成动态的数据源,或者链接池的,望能指教,
麻烦您了
6 楼 Angel_Night 2011-09-22  
houzhaowei 写道
fuyanqing03 写道
你好,问个问题:在生产环境上也是通过JDBC连接hive去执行HQL语句吗? 他支持连接池吗?

不要把hive 当成mysql等关系型数据库去用。 hive 只是用来操作mapreduce 的,你用连接池干嘛? 不要想着用它来查互联网的实时数据   想要实时数据用hbase 或cassandra 等数据仓库。 先好好了解hive 的原理再用。原理都不了解 怎么上生产环境



我在生产环境就遇到这种问题了……

首先我每天大约要给hive导入10亿条左右的数据……

10条意味着n多个文件

n多个文件 意味着多次调用 load data local inpath
考虑下连接池有错啊……
5 楼 chenbo19867758 2011-08-30  
用虚拟机内存设置为1G,还报内存溢出,为什么?
4 楼 houzhaowei 2011-03-31  
fuyanqing03 写道
你好,问个问题:在生产环境上也是通过JDBC连接hive去执行HQL语句吗? 他支持连接池吗?

不要把hive 当成mysql等关系型数据库去用。 hive 只是用来操作mapreduce 的,你用连接池干嘛? 不要想着用它来查互联网的实时数据   想要实时数据用hbase 或cassandra 等数据仓库。 先好好了解hive 的原理再用。原理都不了解 怎么上生产环境
3 楼 fuyanqing03 2011-03-31  
你好,问个问题:在生产环境上也是通过JDBC连接hive去执行HQL语句吗? 他支持连接池吗?
2 楼 z_post 2010-12-15  
哈,问题解决。

“把hive/lib 下的所有jar copy到项目的lib目录下 另外再加一个mysql-connector-5.*.*.jar”这段话很有启发。

我再将hadoop-*.*-core.jar也放了到lib目录下。就好了。

谢了
1 楼 z_post 2010-12-14  
很好。我用的是postgres。但"org.apache.hadoop.hive.jdbc.HiveDriver"总是配不好。
eclipse,运行提示错误:
java.lang.ClassNotFoundException: org.apache.hadoop.hive.jdbc.HiveDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at HiveJdbcClient.main(HiveJdbcClient.java:21)

postgres_java_dirver.jar,已放到hive/lib下了
还有什么注意的地方吗?

谢谢

相关推荐

    含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-3.1.2-bin.tar.gz

    含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-3.1.2-bin.tar.gz 含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-3.1.2-bin.tar.gz 含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-...

    hive-jdbc-uber-3.1.2+yanagishima-18.0

    而Hive JDBC是连接Hive与各种客户端应用程序的桥梁,使得用户可以通过标准的JDBC接口来操作Hive。这里我们关注的是"Hive-jdbc-uber-3.1.2",这是一个包含所有依赖的Uber jar包,旨在简化部署和使用流程。 Hive JDBC...

    hive-spark-client-3.1.2.jar

    hive-on-spark客户端

    apache-hive-2.1.1-bin.tar

    apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tarapache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tarapache-hive-2.1.1-bin.tar apache-hive-2.1.1-...

    Hive-2.1.1-CDH-3.6.1 相关JDBC连接驱动 Jar 包集合

    可用于数据库客户端连接、FineReport 等报表工具连接 包含 Jar 包列表: 01、hadoop-common-3.0.0-cdh6.3.1.jar 02、hive-exec-2.1.1-cdh6.3.1.jar 03、hive-jdbc-2.1.1-cdh6.3.1.jar 04、hive-jdbc-2.1.1-cdh6.3.1-...

    hive驱动包hive-jdbc-uber-2.6.5.0-292.jar(用户客户端连接使用)

    Hive JDBC驱动是Hive与各种数据库管理工具、应用程序之间建立连接的关键组件,使得用户可以通过标准的JDBC接口来访问和操作Hive中的数据。 标题中的"**hive-jdbc-uber-2.6.5.0-292.jar**"是一个Uber(也称为Shaded...

    hive-exec-2.1.1.jar

    Apache Hive 是一个构建在 Hadoop 之上的数据仓库基础设施,它允许用户以 SQL(结构化查询语言)的形式查询和管理大型数据集。Hive 提供了一种 SQL 接口来访问数据,这些数据通常存储在 Hadoop 的分布式文件系统...

    SpringBoot整合hive-jdbc示例

    &lt;artifactId&gt;hadoop-client &lt;version&gt;3.2.0 &lt;!-- 其他Spring Boot相关依赖 --&gt; ``` ### 4. 配置Hive连接 在`application.properties`中配置Hive服务器的相关信息: ```properties hive.jdbc.url=jdbc:hive2...

    apache-hive-3.1.2-bin.tar.gz

    Apache Hive 是一个基于Hadoop的数据仓库工具,它允许用户通过SQL-like语法查询、管理大量结构化数据。在大数据处理领域,Hive 提供了一个灵活、可扩展的框架,使得数据分析人员能够对存储在Hadoop分布式文件系统...

    hive-jdbc-jar-多版本.zip

    Hive JDBC驱动是Java开发人员用来与Hadoop上的Hive数据仓库进行交互的重要工具。它提供了标准的JDBC接口,使得任何支持JDBC的应用程序,如Java应用或BI工具,都可以方便地连接到Hive执行SQL查询。"hive-jdbc-jar-多...

    Apache Hive(apache-hive-3.1.3-bin.tar.gz)

    Apache Hive(apache-hive-3.1.3-bin.tar.gz、apache-hive-3.1.3-src.tar.gz)是一种分布式容错数据仓库系统,支持大规模分析,并使用 SQL 促进读取、写入和管理驻留在分布式存储中的 PB 级数据。Hive 构建在 Apache...

    DBeaver链接hive驱动包下载: hive-jdbc-uber-2.6.5.0-292.jar

    《DBeaver与Hive连接:hive-jdbc-uber-2.6.5.0-292.jar驱动详解》 在大数据处理领域,Hive作为一个基于Hadoop的数据仓库工具,广泛用于数据查询和分析。而DBeaver,作为一款跨平台的数据库管理工具,以其用户友好的...

    hive-jdbc-1.2.1-standalone.jar

    hive-jdbc-1.2.1-standalone.jar hive-jdbc驱动jar包,欢迎下载

    hive-jdbc-3.1.2-standalone

    hive-jdbc-3.1.2-standalone适用于linux

    hive-java开发驱动包

    hive java开发驱动包列表hive-common-2.3.4.jarhive-exec-2.3.4.jarhive-jdbc-2.3.4.jarhive-llap-client-2.3.4.jarhive-llap-common-2.3.4.jarhive-llap-server-2.3.4.jarhive-llap-tez-2.3.4.jarhive-metastore-...

    hive-exec-*.jar包

    Missing Hive Execution Jar: /hive/hive1.2.1/lib/hive-exec-*.jar

    hive-jdbc-uber-2.6.5.jar

    hive-jdbc-uber-2.6.5.0-292.jar DbVisualizer (as of version 9.5.5) Below is an example configuration using DbVisualizer: Open the Diver Manager dialog ("Tools" &gt; "Driver Manager...") and hit the ...

    apache-hive-2.3.3-bin.tar.gz

    `apache-hive-2.3.3-bin.tar.gz` 是Apache Hive 2.3.3版本的源码或二进制发行版的压缩包,通常包含了运行和管理Hive所需的所有文件。 在这个版本中,我们可能会发现以下关键组件和功能: 1. **Hive Metastore**:...

    Apache Hive(apache-hive-1.2.2-bin.tar.gz)

    Apache Hive(apache-hive-1.2.2-bin.tar.gz、apache-hive-1.2.2-src.tar.gz)是一种分布式容错数据仓库系统,支持大规模分析,并使用 SQL 促进读取、写入和管理驻留在分布式存储中的 PB 级数据。Hive 构建在 Apache...

Global site tag (gtag.js) - Google Analytics