Hive 安装和配置
1 下载 hive 安装包
下载地址:http://hive.apache.org/downloads.html ,解压到任意目录
$ tar -zxvf apache-hive-2.1.1-bin.tar.gz
或使用 brew
命令安装
$ brew install hive
如果没有特别设定过 brew
的路径配置,那么文件会在目录 /usr/local/Cellar/hive
xia
2 配置文件和环境变量
环境变量需要设置下 HIVE_HOME
export HIVE_HOME=/usr/local/Cellar/hive/2.1.0
export $PATH:$HIVE_HOME/bin
在路径 ../hive/2.1.0/libexec/conf
下提供了一些 .template
模板wen j,拷贝文件并去掉 .template
后缀即可
2.1 hive-site.xml
将 hive-default.xml.template
文件复制一份,并且改名为 hive-site.xml
$ cp hive-default.xml.template hive-site.xml
在 hive-site.xml
中有这样的配置:
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.exec.scratchdir</name>
<value>/tmp/hive</value>
</property>
在 HDFS 中新建目录 /user/hive/warehouse
和 /tmp/hive
,赋予读写权限
$ hadoop fs -mkdir -p /user/hive/warehouse
$ hadoop fs -chmod 777 /user/hive/warehouse
$ hadoop fs -mkdir -p /tmp/hive
$ hadoop fs -chmod 777 /tmo/hive
修改 hive-site.xml 中的临时目录
将 ${system:java.io.tmpdir}
替换为本地 hive
的临时目录,并赋予读写权限
将 ${system:user.name}
都替换为 root
,全部替换掉
修改 hive-site.xml 中数据库相关的配置
配置项 | 描述 |
---|---|
javax.jdo.option.ConnectionURL | 数据库(MySQL)连接的地址 |
javax.jdo.option.ConnectionDriverName | 数据库(MySQL)驱动类路径 |
javax.jdo.option.ConnectionUserName | 数据库(MySQL)登录名 |
javax.jdo.option.ConnectionPassword | 数据库(MySQL)登录密码 |
hive.metastore.schema.verification | 修改为 false |
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://127.0.0.1:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value></value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
下载 MySQL 驱动包
放入到 lib
目录,下载地址:http://www.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.22.tar.gz/from/http://mysql.he.net/
2.2 hive-env.sh 配置
将 hive-env.sh.template
文件复制一份,改名为 hive-env.sh
文件
打开 hive-env.sh
配置并且添加以下内容:
export HADOOP_HOME=/usr/local/Cellar/hadoop/2.8.0/libexec
export HIVE_CONF_DIR=/usr/local/Cellar/hive/2.1.1/conf
export HIVE_AUX_JARS_PATH=/usr/local/Cellar/hive/2.1.1/lib
2.3 WebUI
Hive 2.0 版本开始,为 HiveServer2 提供了一个简单的 WEB UI 界面,可以直观的看到当前链接的会话、历史日志、配置参数以及度量信息。
<property>
<name>hive.server2.webui.host</name>
<value>127.0.0.1</value>
</property>
<property>
<name>hive.server2.webui.port</name>
<value>10002</value>
</property>
修改配置需要重启 HiveServer2
$ hive --service hiveserver2 &
3 启动和测试
对 MySQL 数据库进行初始化
执行成功后,hive 数据库里已经有一堆表创建好了
$ cd $HIVE_HOME/bin/
$ schematool -initSchema -dbType mysql
启动 hive
$ cd $HIVE_HOME/bin/
$ ./hive
测试
# 进入 hive 命令行
> show functions;
新建表以及导入数据的测试
# 创建测试表
> create database db_hive_edu;
> use db_hive_edu;
> create table student(id int,name string) row format delimited fields terminated by '\t';
# 将文件数据写入表中
$ touch /opt/hive/student.txt
001 zhangsan
002 lisi
003 wangwu
004 zhaoliu
005 chenqi
# 载入表
> load data local inpath '/opt/hive/student.txt' into table db_hive_edu.student;
# 测试
> select * from student;
OK
001 zhangsan
002 lisi
003 wangwu
004 zhaoliu
005 chenqi
# 查看 hdfs 上数据
/user/hive/warehouse/db_hive_edu.db/student
# 在 MySQL 中查看
$ SELECT * FROM hive.TBLS;
4 错误和解决办法
- WARN Unable to load native-hadoop library for yourplatform
这个警告可以不予理会。 -
报错 There are 2 datanode(s) running and 2 node(s) areexcluded in this operation.
原因是 Hadoop Datanode 有问题,没法写入数据,检查 Hadoop 是否正常运行 -
设置 MySql 数据库
root
用户密码报错
停止 MySql 服务sudo service mysql stop sudo service mysql status
跳过验证启动 MySql
mysqld_safe --skip-grant-tables & sudo service mysql status
执行如下语句
$ mysql -u root mysql> use mysql; mysql> update user set password = password('root') where user = 'root'; mysql> flush privileges;
重启 MySql 服务并查看状态
sudo service mysql stop sudo service mysql start sudo service mysql status
4.Hive 启动,CommandNeedRetryException 异常
Exception in thread "main" java.lang.NoClassDefFoundError:org/apache/hadoop/hive/ql/CommandNeedRetryException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
at org.apache.hadoop.util.RunJar.main(RunJar.java:149)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.ql.CommandNeedRetryException
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
检查 HADOOP_CLASSPATH
配置
5.使用 HQL 出现异常
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient
需要启动 metastore 和 hiveserver,通过 jps
命令查看
$ hive --service metastore &
$ hive --service hiveserver &