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; 果然如此。然后进行赋权