首先明确几点:
- Hive是数据仓库(DW),Hbase是数据库(DB)
- Hive是基于hdfs的,数据存储为hdfs上的文本内容(类似表的二维结构),而不是RDBMS的一张张二维数据表。但是Hive屏蔽了这些,对用户而言,就可以看做是一张张的二维表
- Hive只需要安装在集群中的任何一台机器上即可,不需要所有机器都安装
- Hive是支持JDBC的,尽管不是支持JDBC的所有特性,但是大多数是可以正常使用的
- Hive不是数据库,不要用来做行级别的事务处理,Hive是做数据仓库的,用来批处理,适用于大规模数据
- Hive其实只是提供了一个把SQL语句翻译为MapReduce程序的引擎而已,真正执行的还是MapReduce程序
- Hive的SQL语句和MySQL的SQL语句很相似,可以参照
- Hive可以使用远程的mysql存储元数据,即metastore
明确了所有的这些之后,我们进行Hive安装。
这里,我是将mysql安装在master上,hive也安装在master上。
1.安装MySQL
2.配置MySQL数据库允许Hive接入
3.配置hive
3.1 新建hive数据库,用来保存hive的元数据
mysql> creat database hive;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'creat database hive' at line 1
mysql> create database hive;
Query OK, 1 row affected (0.00 sec)
3.2 将hive数据库下的所有表的所有权限赋给hadoop用户,并配置mysql为hive-site.xml中的连接密码,然后
刷新系统权限关系表
mysql> use hive;
Database changed
mysql> CREATE USER 'hadoop'@'%' IDENTIFIED BY 'mysql';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'hadoop'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,password from mysql.user;
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| hadoop | % |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
4 rows in set (0.00 sec)
mysql> CREATE USER 'hadoop'@'%' IDENTIFIED BY 'mysql';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'hadoop'@'%' WITH GRANT OPTION;
mysql> flush privileges;
3.3 修改hive-site.xml,设置MySQL为默认的meta数据库
要找到文件中原有的配置删除掉
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive?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>hadoop</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>mysql</value>
3.4 将mysql-connector-java-***.jar,复制到hive安装目录下的lib下
需要下载mysql的jdbc<mysql-connector-java-5.1.28.jar>,然后将下载后的jdbc放到hive安装包的lib目录下
下载链接是:http://dev.mysql.com/downloads/connector/j/
也可以从我的云盘下载 链接是:https://pan.baidu.com/s/1i5mTBEH 密码是:xbf
2.3 修改配置文件
解压安装文件到指定的的文件夹 /opt/hive
tar -zxf apache-hive-2.1.0-bin.tar.gz -C opt/hive
2.3.1 设置环境变量
vi /etc/profile:
2.3.2 修改hive-site.xml文件
2.3.3 修改hive-env.sh
cp hive-env.sh.template hive-env.sh
vi hive-env.sh
HADOOP_HOME=/root/app/hadoop-2.7.5
export HIVE_CONF_DIR=/root/app/hadoop-2.7.5/hive/conf
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>mysql
<value>jdbc:mysql://192.168.1.111:3306/hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
scp -r hive/ slave1:/root/app/hadoop-2.7.5/
2.4 运行hive
运行hive之前首先要确保meta store服务已经启动,
nohup hive --service metastore > metastore.log 2>&1 &
如果需要用到远程客户端(比如 Tableau)连接到hive数据库,还需要启动hive service
nohup hive --service hiveserver2 > hiveserver2.log 2>&1 &
然后由于配置过环境变量,可以直接在命令行中输入hive
2.5 测试hive是否可以正确使用
2.5.1 创建测试表dep
2.5.2 通过Mysql查看创建的表
2.5.3 通过UI页面查看创建的数据位
访问 xxx.xxx.xxx.xxx:50070
- <property>
- <name>hbase.rootdir</name>
- <!-- hbase存放数据目录 -->
- <value>hdfs://master:9000/hbase/hbase_db</value>
- <!-- 端口要和Hadoop的fs.defaultFS端口一致-->
- </property>
- <property>
- <name>hbase.cluster.distributed</name>
- <!-- 是否分布式部署 -->
- <value>true</value>
- </property>
- <property>
- <name>hbase.master</name>
- <value>master:60000</value>
- </property>
- <property>
- <name>hbase.zookeeper.quorum</name>
- <!-- list of zookooper -->
- <value>master,base0186,base0185,base0184,base0183</value>
- </property>
- <property>
- <!--zookooper配置、日志等的存储位置 -->
- <name>hbase.zookeeper.property.dataDir</name>
- <value>/opt/hbase/zookeeper</value>
- </property>
当报错信息里有以下路径,解决方法,自己新建目录替换hive-site.sh中的以下路径
${system:java.io.tmpdir}
${system:user.name}
/root/app/hadoop-2.7.5/hive/iotmp/user
: