Hive安装笔记

Hive安装部署 
Hive:数据仓库。存储在 hdfs 上,使用 mR 计算。
数据以文本形式如 txt 存储在 hdfs 上,用户通过 hive 可以使用传统的 sql 来对 hdfs 上的数据文件进行相关操作,并且 hive 可以将 sql 转化为 MR 代码来进行分布式计算。
Hive:解释器(将脚本 HiveQL 解释成 java 代码,成为 mp 程序)
      编译器(编译 java 代码),优化器。
H i ve数据存储在 hdfs 上,运行时,元数据存储在关系型数据中( mysql
(1)  新建 Hive 目录,将 apache-hive-1.2.1-bin.tar.gz 拷贝到目录下 :
tar zxvf apache-hive-1.2.1-bin.tar.gz
(2)  设置 hive 的环境变量。
vi /etc/profile
#set the hive environment
export HIVE_HOME=/home/hadoop/Hive/apache-hive-1.2.1-bin
PATH=$HIVE_HOME/bin:$PATH
export PATH
source /etc/profile
(3) hive-env.sh 配置( hive 的运行环境文件 ):
进入解压后的hive 目录,进入 conf
cp hive-env.sh.template hive-env.sh
Hadoop 需要 java 作支撑,而 hive 需要 hadoop 作为支撑, 配置hive-env.sh   添加 hadoop_home 路径:
将export HADOOP_HOME 前面的 ‘#’ 号去掉,并让它指向您所安装 hadoop 的目录 (就是切换到这个目录下有 hadoop conf,lib,bin  等文件夹的目录):
export HADOOP_HOME=/home/hadoop/hadoop
export HIVE_CONF_DIR=/home/hadoop/Hive/apache-hive-1.2.1-bin
export HIVE_AUX_JARS_PATH=/home/hadoop/Hive/apache-hive-1.2.1-bin/lib
:wq
source /hive-env.sh( 生效文件 )
(4)  安装 mysql
由于 hive 的元数据可能经常更新、修改和读取的操作,因此不宜存储在 hadoop hdfs 中,而是 RDBMS 中。主要有以下三种:
①  内嵌模式:内嵌的 Derby 数据库 (默认的):只能允许一个会话连接,只适用于简单的测试。
②  本地模式: MySQL 数据库安装在本地:支持多用户会话。
③  远程模式:把 metastore 配置到远程服务器上,可以配置多个
                             
本文将 mysql 替换 derby ,在 NameNode 上安装 MySQL ,具体如下:
1> sudo apt-get install mysql-server
执行后,可能会遇到以下问题:
正在读取软件包列表 ...  完成
正在分析软件包的依赖关系树       
正在读取状态信息 ...  完成       
您可能需要运行“ apt-get -f install ”来纠正下列错误:
下列软件包有未满足的依赖关系:
linux-generic-lts-vivid : 依赖 : linux-headers-generic-lts-vivid (= 3.19.0.26.13)  但是  3.19.0.25.12  正要被安装
 mysql-server : 依赖 : mysql-server-5.5  但是它将不会被安装
E: 有未能满足的依赖关系。请尝试不指明软件包的名字来运行“ apt-get -f install ( 也可以指定一个解决办法 )
 
因此我们首先执行: sudo apt-get – f install   (注意要使用 root 权限,否则报错 )
然后再: sudo apt-get install mysql-server
中间过程中会提示输入 mysql 密码,我们需要设定一下 .
 
2>   sudo apt-get install mysql-client
3> 测试安装是否成功:
在终端输入 sudo netstat -tap | grep  mysql
可以看到 mysql 的端口正在监听:
tcp  0   0 localhost:mysql *:*   LISTEN   5586/mysqld    
4>登录 mysql
mysql  uroot  p
输入密码,然后进入 mysql
 
创建hive 用户:
进入 mysql 命令行,创建 hive 用户并赋予所有权限:
mysql -uroot -proot
mysql>create user 'hive' identified by 'hive';
mysql>grant all on *.* TO 'hive'@'%' with grant option;
mysql>flush privileges;
 
 
关于 mysql
启动mysql服务
sudo service mysql start
设置为开机自启动
sudo chkconfig mysql on
设置root用户登录密码
sudo   /usr/bin/mysqladmin -u root password 'wu123'
登录mysql    以root用户身份登录
mysql -uroot -pwu123
创建hive用户,数据库等
insert into mysql.user(Host,User,Password) values("localhost","hive",password("hive"));
create   database   hive;
grant   all   on   hive.*   to   hive@'%'    identified   by   'hive';
grant   all   on   hive.*   to   hive@'localhost'    identified   by   'hive';
flush   privileges;  
退出mysql  
exit
验证hive用户
mysql -uhive -phive
 
(5)  hive-site.xml配置( hive 的配置文件
使用Hadoop 来创建相应的文件路径,并且要为它们设定权限:
hdfs dfs -mkdir -p /usr/hive/warehouse
hdfs dfs -mkdir -p /usr/hive/tmp
hdfs dfs -mkdir -p /usr/hive/log
hdfs dfs -chmod g+w /usr/hive/warehouse
hdfs dfs -chmod g+w /usr/hive/tmp
hdfs dfs -chmod g+w /usr/hive/log
Hive  系统会加载两个配置文件一个默认配置文件 “hive-default.xml” ,另一个就是用户自定义文件 “hive-site.xml” 。当 “hive-site.xml” 中的配置参数的值与 “hive-default.xml” 文件中不一致时,以用户自定义的为准。所以我们就把我们不需要的参数都删除掉,只留下上面所示的内容。
/conf 目录下 , 没有这两个文件 , 只有一个 “hive-default.xml.template”, 所以我们要复制两个 “hive-default.xml.template”, 并分别命名为 “hive-default.xml” “hive-site.xml” 
 
cp hive-default.xml.template hive-site.xml
// 或者也可以从其他配置好的 hive 中拷贝一份 hive-site.xml
vi hive-site.xml:
<property>
<name>hive.metastore. warehouse .dir</name>
<value>hdfs:// ubuntu1 :9000/usr/hive/warehouse</value>
</property>
 
<property>
<name>hive.exec. scratchdir </name>
<value>hdfs://  ubuntu1 :9000/usr/hive/warehouse</value>
</property>
 
<property>
<name>hive.querylog. location </name>
<value> hdfs://  ubuntu1 :9000/usr/hive/log</value>
</property>
 
<property>
<name>javax.jdo.option. ConnectionURL </name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNoExist=true</value>
</property>
//  Hive元数据存储使用的数据库连接 URL
 
<property>
<name>javax.jdo.option. ConnectionDriverName </name>
<value>com.mysql.jdbc.Driver</value>
</property>
//  Hive元数据存储使用的数据库驱动
<property>
   <name>javax.jdo.option. ConnectionUserName </name>
   <value> root </value>
</property>
//  Hive元数据存储使用的数据库用户名
<property>
<name>javax.jdo.option. ConnectionPassword </name>
   <value> 1234567890 </value>
   <description>password to use against metastore database</description>
</property>
//  Hive元数据存储使用的数据库密码
 
在hive 中用 java 来开发与 mysql 进行交互时,需要用到一个关于 mysql connector ,这个可以将 java 语言描述的对 database 进行的操作,转化为 mysql 可以理解的语句。 connector 是一个用 java 语言描述的 jar 文件。而这个 connector 可在官方网站上下载得到。经证实即便 connector mysql 的版本号不一致,也可以实现相应的功能。 mysql-connector-java -* .jar 是要 copy hive/lib 目录下面 的。
除此之外, 我们使用设定的用户在数据库中最好手动创建设定的数据库,否则的话启动 hive 时会报错( jdbc:mysql://localhost:3306/hive
Unable to open a test connection to the given database. JDBC url = jdbc:mysql://localhost:3306/hive?createDatabaseIfNoExist=true, username = root. Terminating connecti
on pool (set lazyInit to true if you expect to start your database after your app). Original Exception: ------
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:  Unknown database 'hive'
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
        at com.mysql.jdbc.Util.getInstance(Util.java:386)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
。。。。。。
(6)  修改日志文件存放目录:
cp hive-log4j.properties.template  hive-log4j.proprties
vi hive-log4j.properties
hive.log.dir =   /home/hadoop/Hive/logs
这个是当hive 运行时,相应的日志文档存储到什么地方,可以改为存放在 hdfs 系统中: hdfs:// ubuntu1 :9000/usr/hive/ log
 
修改完hive 日志目录后,在启动 hive 后如果报错,可以查看目录下的日志信息来查找错误。
 
(7)  运行 hive ,直接输入 :
hive
hive>show tables;//
hive>  create table tt(id int,name string)row format delimited
> fields terminated by '\t'; //创建表 tt
在建好表导入数据后,可以浏览与 Hive 相关的目录。在 Hive shell 上使用 dfs 命令可以执行 HDFS 文件的操作:
hive> dfs -ls /usr/hive/warehouse/;
Found 1 items
drwxrwxr-x   - hadoop supergroup          0 2015-08-31 14:47 /usr/hive/warehouse/tt
HDFS上该目录是 Hive 的数据仓库目录,每个表对应一个以表名命名的目录,目录下存放导入文件、分区目录、桶目录等数据文件。
 
默认情况下,使用hive derby 数据库存储的数据文件会存储在 bin/metastore_db/ 目录中。
MySQL中保存了 Hive 的元数据信息,包括表的属性、桶信息和分区信息等。查看元数据信息:
mysql> use hive;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_hive            |
+---------------------------+
| BUCKETING_COLS            |
| CDS                       |
| COLUMNS_V2                |
| DATABASE_PARAMS           |
| DBS                       |
| FUNCS                     |
| FUNC_RU                   |
| GLOBAL_PRIVS              |
| PARTITIONS                |
| PARTITION_KEYS            |
| PARTITION_KEY_VALS        |
| PARTITION_PARAMS          |
| PART_COL_STATS            |
| ROLES                     |
| SDS                       |
| SD_PARAMS                 |
| SEQUENCE_TABLE            |
| SERDES                    |
| SERDE_PARAMS              |
| SKEWED_COL_NAMES          |
| SKEWED_COL_VALUE_LOC_MAP  |
| SKEWED_STRING_LIST        |
| SKEWED_STRING_LIST_VALUES |
| SKEWED_VALUES             |
| SORT_COLS                 |
| TABLE_PARAMS              |
| TAB_COL_STATS             |
| TBLS                      |
| VERSION                   |
+---------------------------+
29 rows in set (0.00 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 |  1441003631 |     1 |                0 | hadoop |         0 |     1 |  tt         | MANAGED_TABLE | NULL               | NULL               |
+--------+-------------+-------+------------------+--------+-----------+-------+----------+---------------+--------------------+--------------------+
1 row in set (0.00 sec)
 
 Hive 原则上可以安装在集群上的任何一台机器上面,但是考虑到  master 节点的负荷比较大,我们可以 选择一台机器性能较好的datanode 来安装 hive
 
 
 
hiveQL:
Hive  CLI hive client, hive 命令行)
hive  DDL (hive data  definition  language): create
Hive  DML Hive Data Manipulation Language ):增删改查
 
创建含有分区的表 employInfo
create table  employInfo  (
id int,
name  STRING,
age int) 
partitioned by ( place  STRING) row format delimited fields terminated by ' , ';
注: row format delimited fields terminated  by 是 HiveQL 特有的,用来指定 数据的分隔方式(字段间) STORED AS TEXTFILE;(此句可以省略,默认存储形式为文本)
 
新建测试数据 employInfo.txt
1,张三 ,32, 销售部
2,李四 ,33, 开发部
3,王五 ,31, 运营部
4,孙六 ,30, 运维部
(注意分隔符中英文)
 
本地系统加载文件数据
接下来将上面的测试数据导入到 hive ,  进入到 tb_emp_info.txt 文件所在的目录 , 然后执行 hive 进入到 hive 模式
hive>load data local inpath  employInfo.txt  into table  employInfo   (无分区表形式)
hive> load data local inpath '  employInfo.txt  ' into table employInfo partition(place='BeiJing');  
(若是分区表的话,需要指定导入的分区,这里所有的分区都是 BeiJing
 
导入数据后,进入到 hdfs 文件系统:
 
可以看到目录下有个 usr à hive à warehouse:在这里可以看到新建的表,点击表明可以看到刚上传的文件。
 
查询数据:
hive> select count(*) from employInfo; //会自动创建 mapreduce ,然后提交到 hadoop 中去。
Query ID = hadoop_20150905124326_6b9e426c-2b99-474f-92d8-a611ce36929b
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
  set mapreduce.job.reduces=<number>
Job running in-process (local Hadoop)
2015-09-05 12:44:26,104 Stage-1  map   = 0%,   reduce   = 0%
2015-09-05 12:44:27,253 Stage-1 map = 100%,  reduce = 0%
2015-09-05 12:44:28,539 Stage-1 map = 100%,  reduce = 100%
Ended Job = job_local652702220_0001
MapReduce Jobs Launched: 
Stage-Stage-1:  HDFS Read: 234 HDFS Write: 234 SUCCESS
Total MapReduce CPU Time Spent: 0 msec
OK
5
Time taken: 62.679 seconds, Fetched: 1 row(s)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值