环境 Centos 5.5 (32位) , hadoop-1.2.1 ,hive-0.14.0
目录:
1 Hive 来历与作用
2 Hive官网
3 Hive 安装的三种模式
4 安装前提 (Hadoop 与mysql已经安装并测试完毕)
5 安装Hive
6 配置环境变量 并生效
7 创建Hive的配置文件 hive-log4j.properties 和hive-site.xml
8 修改hive-site.xml,将数据库连接改为Mysql
9 创建hive在hdfs上的目录并赋予写权限
10 修改 hive-log4j.properties 和hive-site.xml 中将${system:java.io.tmpdir},替换为/home/hive/tmp/
否者会出异常
11 拷贝mysql的驱动包到hive/lib目录中
12 启动hive并测试
-------------------------------------------------------------------------------------------------
详细:
1 Hive 来历与作用
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。
其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
2 Hive官网
http://hive.apache.org/
3 Hive 安装的三种模式
1 内嵌模式:将元数据保存在内嵌的Derby的数据库中,优点:安装简单 缺点:因为一个内嵌的Derby的数据库只能访问一个数据文件,这意味着这种方式不支持多回话连接,所以紧共初学者熟悉Hive使用 2)本地模式:将元数据保存在本地独立的数据库中(如:Mysql)能够支持多用户多回话连接。 3)远程模式:如果我们的Hive客户端比较多,在每个客户端都安装MySQL服务还是会造成一定的冗余和浪费,这种情况下,就可以更进一步, 将MySQL也独立出来,将元数据保存在远端独立的MySQL服务中。
4 安装前提
Hadoop 与mysql已经安装并测试完毕
5 安装Hive
tar -xvf apache-hive-0.14.0-bin.tar.gz
6 配置环境变量 并生效 ,这里讲java,hadoop,pig、hive的所有文件列出来,根据需要添加到/etc/profile最后
export JAVA_HOME=/web/jdk1.7.0_60 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export HADOOP_INSTALL=/web/hadoop-1.2.1 export PATH=$PATH:$HADOOP_INSTALL/bin:$HADOOP_INSTALL/sbin export PIG_HOME=/web/pig-0.13.0 export PATH=$PATH:$PIG_HOME/bin export PIG_CLASSPATH=/web/hadoop-1.2.1/conf export HIVE_HOME=/web/apache-hive-0.14.0-bin export PATH=$PATH:$HIVE_HOME/bin
添加环境变量后执行下面语句使环境变量配置生效
source /etc/profile
7 创建Hive的配置文件 hive-log4j.properties 和hive-site.xml
cp hive-default.xml.template hive-site.xml cp hive-log4j.properties.template hive-log4j.properties
也可以复制一个hive-default.xml 文件,则hive-default.xml用于默认设置 ,hive-site.xml 用于个性化设置,可覆盖默认配置
8 修改hive-site.xml,将数据库连接改为Mysql
这里用户名和密码是hive,需要在mysql数据库中创建用户hive,并赋予连接权限
<property> <name>javax.jdo.option.ConnectionURL</name> //所连接的MySQL数据库实例 <value>jdbc:mysql://127.0.0.1:3306/hive_metadata?createDatabaseIfNotExist=true</value> <description>JDBC connect string for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> //连接的MySQL数据库驱动 <value>com.mysql.jdbc.Driver</value> <description>Driver class name for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> //连接的MySQL数据库用户名 <value>hive</value> <description>username to use against metastore database</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> //连接的MySQL数据库密码 <value>hive</value> <description>password to use against metastore database</description> </property>
9 创建hive在hdfs上的目录并赋予写权限
在HDFS上建立/tmp和/user/hive/warehouse目录,并赋予组用户写权限。这是Hive默认的数据文件存放目录,在hive-site.xml文件中为默认配置
hadoop-1.2.1]$ bin/hadoop fs -mkdir /tmp hadoop-1.2.1]$ bin/hadoop fs -mkdir /usr/hive/warehouse hadoop-1.2.1]$ bin/hadoop fs -chmod a+w /tmp hadoop-1.2.1]$ bin/hadoop fs -chmod a+w /usr/hive/warehouse
10 修改 hive-log4j.properties 和hive-site.xml 中将${system:java.io.tmpdir},替换为/home/hive/tmp/(任何一个临时目录都行)
否者会出异常,这个参数解析不出来,具体原因不知道
异常 :Caused by: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
11 拷贝mysql的驱动包到hive/lib目录中
驱动包mysql-connector-java-3.1.14-bin.jar复制到hive的lib目录下
12 启动hive
hive 直接启动hive
13 测试
1)创建表
hive> create table test(id INT,str STRING)
> row format delimited
> fields terminated by ','
> stored as textfile;
2) 查看新建的表
hive> show tables;
3)加载本地测试数据
创建文件,内容:
1, a
2, b
3, c
4, d
5, e
6, f
7, g
8, h
9, i
10, j
执行加载命令:
hive> load data local inpath '/home/hadoop/data_test.txt'
> overwrite into table test;
Copying data from file:/home/hadoop/data_test.txt
Copying file: file:/home/hadoop/data_test.txt
Loading data to table default.test
OK
Time taken: 4.322 seconds
4)查询前10行信息
select * from test limit 10;
5)查询该文件中存在多少条数据,这时hive将执行一个map-reduce的过程来计算该值
hive> select count(1) from test;