经常忘记hive的用处和方法,所以转载一篇方便下次查看,原博文地址:http://blog.csdn.net/wangmuming/article/details/25226951
我们沿用之前Hadoop wordcount的结果数据:
[hadoop@icity0 ~]
hadoopfs−cat/wc/out/part−r−00000Warning:
HADOOP_HOME is deprecated.
beautiful 1
day 1
dear 2
hello 2
hometown 1
honey 2
is 2
my 2
one 1
sunny 1
this 1
today 1
world 3
现在我们在Hive上新建一张wordcount的数据表,然后将hdfs 中的/wc/out/part-r-00000数据导入到hive中:
cd hive/bin
./hive
CREATE TABLE wordcount(name string,id int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’;
LOAD DATA INPATH ‘hdfs://icity0:9000/wc/out/part-r-00000’ INTO TABLE wordcount;
查询wordcount数据表:
统计wordcount 数据表中的不同的单词个数,及count
从这个结果中,其实可以看出,我们之前所说的结论:
查询是通过MapReduce来完成的(并不是所有的查询都需要MapReduce来完成,比如select * from XXX就不需要;
hive介绍:
Apache Hive数据仓库软件提供对存储在分布式中的大型数据集的查询和管理,它本身是建立在Apache Hadoop之上,主要提供以下功能:
(1)它提供了一系列的工具,可用来对数据进行提取/转化/加载(ETL);
(2)是一种可以存储、查询和分析存储在HDFS(或者Hbase)中的大规模数据的机制;
(3)查询是通过MapReduce来完成的(并不是所有的查询都需要MapReduce来完成,比如select * from XXX就不需要;
(4)在Hive0.11对类似select a,b from XXX的查询通过配置也可以不通过MapReduce来完成
在hadoop生态圈中属于数据仓库的角色。他能够管理hadoop中的数据,同时可以查询hadoop中的数据。
本质上讲,hive是一个SQL解析引擎。Hive可以把SQL查询转换为MapReduce中的job来运行。
hive有一套映射工具,可以把SQL转换为MapReduce中的job,可以把SQL中的表、字段转换为HDFS中的文件(夹)以及文件中的列。
这套映射工具称之为metastore,一般存放在derby、mysql中。
hive在hdfs中的默认位置是/user/hive/warehouse,是由配置文件hive-conf.xml中属性hive.metastore.warehouse.dir决定的。
1) 在mysql里创建hive用户,并赋予其足够权限
[root@node01 mysql]# mysql -u root -p
Enter password:
mysql> create user ‘hivedb’ identified by ‘hivedb’;
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on *.* to ‘hivedb’ with grant option;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
2)测试hive用户是否能正常连接mysql,并创建hive数据库
[root@node01 mysql]# mysql -u hivedb-p
Enter password:
mysql> create database hivedb;
Query OK, 1 row affected (0.00 sec)
mysql> use hivedb;
Database changed
mysql> show tables;
Empty set (0.00 sec)
3)解压缩hive安装包
tar -xzvf hive-0.9.0.tar.gz
mv hive-0.9.0 hive
cd hive
ls
4)下载mysql连接Java的驱动 并拷入hive home的lib下
mv mysql-connector-java-5.1.24-bin.jar ./hive/lib
5)修改环境变量,把Hive加到PATH
vi .bash_profile
export HIVE_HOME=/home/hadoop/hive
export PATH=
PATH:
HIVE_HOME/bin
保存退出;
source .bash_profile
6)修改hive-env.sh
cp hive-env.sh.template hive-env.sh
7)拷贝hive-default.xml 并命名为 hive-site.xml
修改四个关键配置 为上面mysql的配置
cp hive-default.xml.template hive-site.xml
vi hive-site.xml
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hivedb?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>hivedb</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hivedb</value>
<description>password to use against metastore database</description>
</property>
8)修改hadoop的配置文件hadoop-env.sh
修改hadoop的配置文件hadoop-env.sh,修改内容如下:
export HADOOP_CLASSPATH=.:
CLASSPATH:
HADOOP_CLASSPATH:$HADOOP_HOME/bin
9)在目录$HIVE_HOME/bin下面,修改文件hive-config.sh
在目录$HIVE_HOME/bin下面,修改文件hive-config.sh,增加以下内容:
export JAVA_HOME=/usr/java/jdk
export HIVE_HOME=/home/hadoop/hive
export HADOOP_HOME=/home/hadoop/hadoop
10)启动hadoop
./start-all.sh
11)启动hive
cd hive/bin
./hive