hive安装

		hive安装
(1)tar -zxf hive-0.7.1-bin.tar.gz
(2)mv hive-0.7.1-bin /usr/local/hive
(3)vim hive-config.sh
export HADOOP_HOME=/usr/local/hadoop/hadoop-0.20.204.0/
export JAVA_HOME=/usr/java/jdk1.6.0_27
export HIVE_HOME=/usr/local/hive
(4)cd /usr/local/hadoop/hadoop-0.20.204.0
(5)bin/hadoop fs -mkdir /tmp
(6)bin/hadoop fs -mkdir /user/hive/warehouse
(7)bin/hadoop fs -chmod g+w /tmp
(8)bin/hadoop fs -chmod g+w /user/hive/warehouse
(9)vim /etc/profile
#hive home
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
(10)source /etc/profile
(11)检查echo $HIVE_HOME 
(12)修改core文件
cd /usr/local/hadoop/hadoop-0.20.204.0/conf
vim core-site.xml 
<name>fs.default.name</name>
<value>hdfs://master:9060</value>

hive使用mysql保存metastore .
Hive 将元数据存储在 RDBMS 中,有三种模式可以连接到数据库: 
1)ingle User Mode: 此模式连接到一个 In-memory 的数据库 Derby,一般用于 Unit Test。 
2)Multi User Mode:通过网络连接到一个数据库中,是最经常使用到的模式。 
3)Remote Server Mode:用于非 Java 客户端访问元数据库,在服务器端启动一个 MetaStoreServer,客户端利用 Thrift 协议通过 MetaStoreServer 访问元数据库。 

Hive默认是采用Derby来存储其Meta信息的, 
现在我们需要修改为mysql 



(13)安装mysql
tar -zxf mysql-5.1.51-linux-i686-glibc23.tar.gz

mv /mysql-5.1.51-linux-i686-glibc23 /usr/local/mysql

cp /usr/loacal/mysql/support-files/my-large.cnf /etc/my.cnf

groupadd mysql

useradd mysql -g mysql

chown -R root.mysql /usr/local/mysql

cd /usr/local/mysql

./scripts/mysql_install_db --user=mysql



vim /etc/my.cnf 找到log-bin=mysql-bin这一行,将其注释:
#log-bin=mysql-bin
#binlog_format=mixed
在client下加入
default-character-set=utf8
在mysqld下加入
default-character-set=utf8
key_buffer_size = 256M
max_allowed_packet = 64M

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

启动mysql: service mysql start

设置本地登录密码mysqladmin -u root password 123456


进入数据库 /usr/local/mysql/bin/mysql -uroot -p
远程登录权限设置grant all privileges on *.* to root@"%" identified by '123456' with grant option;
grant all privileges on *.* to root@"master" identified by '123456' with grant option;
create database hive

(14)把一个jar包mysql-connector-java-5.1.15-bin.jar拷贝到hive的lib目录下


连接数据库
主要配置项如下:

hive.metastore.warehouse.dir:(HDFS上的)数据目录 (即/user/hive/warehouse)
hive.exec.scratchdir:(HDFS上的)临时文件目录 (即/tmp)
连接数据库配置 
默认meta数据库为derby ,为了避免使用默认的Derby数据库(有并发访问和性能的问题),通常还需要配置元数据库为MySQL,(mysql的安装过程这里就省了哈),修改hive-site.xml配置以下参数:

javax.jdo.option.ConnectionURL:元数据连接字串 
javax.jdo.option.ConnectionDriverName:DB连接引擎,MySQL为com.mysql.jdbc.Driver 
javax.jdo.option.ConnectionUserName:DB连接用户名 
javax.jdo.option.ConnectionPassword:DB连接密码 

(1)cp hive-default.xml hive-site.xml
示例

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://master:3306/hive?useUnicode=true&characterEncoding=UTF-8&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>root</value>

<description>username to use against metastore database</description>

</property>
###################
<property>

<name>javax.jdo.option.ConnectionPassword</name>

<value>123456</value>

<description>password to use against metastore database</description>

</property>

***另外有一个需要注意的地方是
需要把一个jar包mysql-connector-java-5.1.15-bin.jar拷贝到hive的lib目录下才行,否则执行语句的时候会报错,类似下面这样

hive> show tables;
FAILED: Error in metadata: javax.jdo.JDOFatalInternalException: Error creating transactional connection factory
NestedThrowables:
java.lang.reflect.InvocationTargetException
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask


测试
hive> CREATE TABLE tt(id int,name string)    
    > ROW FORMAT DELIMITED    
    > FIELDS TERMINATED BY ','       ########与后面load文件数据格式有关
    > STORED AS TEXTFILE;  

#####可以指定将表创建到外部hdfs文件系统中。

CREATE EXTERNAL TABLE foo(id INT) 

STORED AS TEXTFILE LOCALTION '/user/foo/foo_data';


hive> show tables;
OK
tt 
***************************在hive中查询插入的表

进入mysql***************************************在mysql中查询刚插入的表tt
/usr/local/mysql/bin/mysql -uroot -p
mysql> use hive
mysql> show tables;

-----------------+
| Tables_in_hive  |
+-----------------+
| BUCKETING_COLS  |
| COLUMNS         |
| DATABASE_PARAMS |
| DBS             |
| PARTITION_KEYS  |
| SDS             |
| SD_PARAMS       |
| SEQUENCE_TABLE  |
| SERDES          |
| SERDE_PARAMS    |
| SORT_COLS       |
| TABLE_PARAMS    |
| TBLS            |
| federal_address |
+-----------------+
14 rows in set (0.02 sec)
mysql> select * from TBLS;
+--------+-------------+-------+------------------+-------+-----------+-------+----------+---------------+--------------------+--------------------+
| TBL_ID | CREATE_TIME | DB_ID | LAST_ACCESS_TIME | OWNER | RETENTION | SD_ID | TBL_NAME | TBL_TYPE      | VIEW_EXPANDED_TEXT | VIEW_ORIGINAL_TEXT |
+--------+-------------+-------+------------------+-------+-----------+-------+----------+---------------+--------------------+--------------------+
|      1 |  1320808723 |     1 |                0 | root  |         0 |     1 | tt       | MANAGED_TABLE | NULL               | NULL               |
+--------+-------------+-------+------------------+-------+-----------+-------+----------+---------------+--------------------+--------------------+
1 row in set (0.00 sec)

插入数据
LOAD DATA [LOCAL] INPATH '/data/userdata' [OVERWRITE] INTO TABLE user;

使用LOCAL选项将使用本地文件系统 ,否则将使用hdfs文件系统。使用OVERWRITE选项将删除原来table中的数据,否则将新数据添加到文件末尾。

########Load data导入数据将仅仅将文件拷贝到hive管理的目录下,并用table的元数据去解释这个文件。所以必须保证数据文件的结构必须和table的结构一致,
否则可以load data成功但是数据解释不正确。特别注意fields分隔符和lines分隔符要和Table一致。id int,name string。。哈哈格式是
1,'la'
2,'yu'
3,'ji'


#########查询语句。 这里列出一些和标准SQL不同的地方。

不能使用select count(*);需要指定count的列下标,select count(1) 。

不能使用CREATE TABLE newtable SELECT * FROM user;必须事先Create table,再用INSERT向其中写入数据。

排序关键字是SORT BY。

LIMIT关键字只能跟一个数字,即从第一条记录开始选出若干条。

INSERT语句变换很大,不能直接插入一条记录。插入的数据必须用SELECT子查询获取或者从某个文件导入


附录:出现下列错误
hive> show tables;
FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Access denied for user 'root'@'master' (using password: YES)
NestedThrowables:
java.sql.SQLException: Access denied for user 'root'@'master' (using password: YES)
可能是用户名密码错误
进行下面操作查询用户密码
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
mysql> use mysql
mysql> select host,user,password from user;


果然如此。然后进行赋权

  

posted @ 2012-06-01 16:33  菜鸟MM  阅读(1465)  评论(0编辑  收藏  举报