hive
这里简单说明一下,好对大家配置hive有点帮助。hive是建立在hadoop上的,当然,你如果只搭建hive也没用什么错。说简单一点,hadoop中的mapreduce调用如果面向DBA的时候,那么问题也就显现了,因为不是每个DBA都能明白mapreduce的工作原理,如果为了管理数据而需要学习一门新的技术,从现实生活中来说,公司又需要花钱请更有技术的人来了。
开个玩笑,hadoop是为了存储数据和计算而推广的技术,而和数据挂钩的也就属于数据库的领域了,所以hadoop和DBA挂钩也就是情理之中的事情,在这个基础之上,我们就需要为了DBA创作适合的技术。
hive正是实现了这个,hive是要类SQL语句(HiveQL)来实现对hadoop下的数据管理。hive属于数据仓库的范畴,那么,数据库和数据仓库到底有什么区别了,这里简单说明一下:数据库侧重于OLTP(在线事务处理),数据仓库侧重OLAP(在线分析处理);也就是说,例如mysql类的数据库更侧重于短时间内的数据处理,反之。
无hive:使用者.....->mapreduce...->hadoop数据(可能需要会mapreduce)
有hive:使用者...->HQL(SQL)->hive...->mapreduce...->hadoop数据(只需要会SQL语句)
安装hive
1.安装在hadoop的namenode上,拷贝安装文件到linux中/usr/local/hive/apache-hive-2.1.1-bin.tar.gz
解压:
tar –zxvf apache-hive-2.1.1-bin.tar.gz
修改文件名
mv apache-hive-2.1.1-bin hive-2.1.1
2.配置环境变量
vi /etc/profile
编辑(i 进入编辑模式,添加如下信息 ESC 退出编辑模式 :wq 保存并退出 :q! 退出不保存)
#hive
export HIVE_HOME=/usr/local/hive/hive-21.1
export PATH=$PATH:$HIVE_HOME/bin
保存后使其生效:
source /etc/profile
测试是否安装成功
执行
hive --version
安装mysql作为hive的Metastore
首先检查mysql是否已安装:
rpm -qa | grep -i mysql
结果:
mysql-libs-5.1.71-1.el6.x86_64
删除已安装的mysql
yum -y remove mysql-libs*
解压安装MySQL
tar xvf MySQL-5.5.49-1.linux2.6.x86_64.rpm-bundle.tar
rpm -ivh MySQL-server-5.5.49-1.linux2.6.x86_64.rpm
rpm -ivh MySQL-devel-5.5.49-1.linux2.6.x86_64.rpm
rpm -ivh MySQL-client-5.5.49-1.linux2.6.x86_64.rpm
启动mysql
service mysql start
首次安装时,默认密码为空,可以使用如下命令修改root密码
mysqladmin -u root password mypassword
mypassword 为你设定的新密码
登录mysql
mysql -u root –p
rpm包安装的MySQL是不会安装/etc/my.cnf文件的,解决方法,只需要复制/usr/share/mysql目录下的my-huge.cnf 文件到/etc目录,并改名为my.cnf即可
cp /usr/share/mysql/my-huge.cnf /etc/my.cnf
mysql默认不可以远程访问,设置远程访问
--GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
上面这句远程访问不需要密码,如果需要密码使用下面这句
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'root' WITH GRANT OPTION;
使权限生效:
FLUSH PRIVILEGES;
设置etc/my.cnf文件,使binlog_format=mixed
vi etc/my.cnf
将注释掉的binlog_format=mixed这一行前面的注释去掉然后保存,重启mysql即可
service mysql restart
配置hive
1.在hdfs中新建目录/user/hive/warehouse
hdfs dfs –mkdir /tmp
hdfs dfs –mkdir /user
hdfs dfs –mkdir /user/hive
hdfs dfs –mkdir /user/hive/warehouse
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /user/hive/warehouse
2.将mysql的驱动jar包mysql-connector-java-5.1.7-bin.jar拷入hive的lib目录下面
复制mysql的驱动程序到hive/lib下面(这里已经拷贝好了)
3.进入hive的conf目录下面复制一下hive-default.xml.template名子命名为:hive-site.xml
cp hive-default.xml.template hive-site.xml
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.188.1: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>root</value>
<description>Username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>sa</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/usr/local/hive/hive-2.1.1/tmp</value>
<description>Local scratch space for Hive jobs</description>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/usr/local/hive/hive-2.1.1/tmp/resources</value>
<description>Temporary local directory for added resources in the remote file system.</description>
</property>
<property>
<name>hive.querylog.location</name>
<value>/usr/local/hive/hive-2.1.1/tmp</value>
<description>Location of Hive run time structured log file</description>
</property>
<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/usr/local/hive/hive-2.1.1/tmp/operation_logs</value>
<description>Top level directory where operation logs are stored if logging functionality is enabled</description>
</property>
使用schematool 初始化metastore的schema:
schematool -initSchema -dbType mysql
运行hive
Hive shell
----------------------------------------
错误总结:
1.在运行hive之前hadoop集群必须开启,否则回报拒绝连接
2.这里不得不说一下,如果你的 schematool -dbType mysql -initSchema 并没有执行成功怎么办,
在hive-site.xml中配置的 <value>jdbc:mysql://192.168.188.1:3306/hive?createDatabaseIfNotExist=true</value>
192.168.188.1:表示的是Windows是ip地址,是要连接Windows下的数据库,在数据库中创建hive数据库。
hive数据库一定不能存在,如果存在请修改配置将hive变成其他名字-例如hive01,否则会一直初始化不成功。
hive-site.xml中的配置只需要写下面内容即可,
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.188.1:3306/hive</value>(mysql地址192.168.188.1)
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>(mysql的驱动)
<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>123</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
</configuration>
3.出现HiveMetaException异常,有可能配置数据库写错了,我的是ip地址写错了。
4.Error: Duplicate key name 'PCS_STATS_IDX' (state=42000,code=1061)
详细错误描述
问题解决
以上错误查看mysql是否已经创建了metastore batabase, 如果创建,直接删除即可。
Metastore connection URL:后面配置的数据库名字,例如我的是hive。
这里的配置都在hive-site.xml中可以修改。