Hive搭建
系统环境:
- Ubuntu 16
- Java 8
- Hadoop 2.7
- Hive 1.2
- MySQL
按照链接安装Java(推荐使用Oracle Java JDK)。
查看Java所在目录:
$ whereis java
在/etc/profile文件末尾添加如下内容以配置环境变量JAVA_HOME:
# JAVA
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
使之立即生效:
$ source /etc/profile
安装MySQL(注意设置数据库用户及密码):
$ apt-get install mysql-server
$ apt install mysql-client
$ apt install libmysqlclient-dev
安装完后MySQL服务应该是自动启动了的,接下来安装SSH并配置SSH无密码登录,以方便操作:
$ apt-get install openssh-server
$ ssh-keygen -t rsa #如果提示root/.ssh/id_rsa already exists,则新创建一个目录,并且指定id_rsa存放到该目录下即可。否则都按回车即可。
$ cat ./id_rsa.pub >> ./authorized_keys #加入授权
$ ssh localhost #此时无需输入密码就可以直接登录了
$ exit #记得退出ssh连接,以继续搭建Hadoop
下载Hadoop并进行配置:
$ wget https://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz
$ tar -zxf hadoop-2.7.6.tar.gz -C /usr/local #解压到/usr/local中
$ cd /usr/local/
$ mv ./hadoop-2.7.6/ ./hadoop #将文件夹名改为hadoop
在/etc/profile文件末尾添加如下内容以配置环境变量HADOOP_HOME:
# Hadoop
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin
使之立即生效:
$ source /etc/profile
输入如下命令来检查Hadoop是否可用,成功则会显示Hadoop版本信息:
$ hadoop version
下载Hive:
$ wget http://mirrors.cnnic.cn/apache/hive/hive-1.2.2/apache-hive-1.2.2-bin.tar.gz
$ tar -zxvf apache-hive-1.2.2-bin.tar.gz -C /usr/local # 解压到/usr/local中
$ cd /usr/local/
$ mv apache-hive-1.2.2-bin hive # 将文件夹名改为hive
由于Hive默认使用的不是MySQL数据库,所以需要下载MySQL连接jar包。本文使用的jar包(mysql-connector-java-5.1.45.jar)可以在Maven仓库里面下载。把上述jar包移动到/usr/local/hive/lib目录下即可。
$ mv mysql-connector-java-5.1.45.jar /usr/local/hive/lib
配置MySQL以满足Hive的需要,首先连接MySQL:
$ msyql -u root -p
进入MySQL以后进行以下操作,使之适配Hive:
mysql> create user 'hive_user'@'%' identified by 'hive_pwd'; 这是Hive连接MySQL的用户名和密码,一会儿配置Hive时有用到。(要创建一个新的用户给hive使用,怕原有的用户元数据删除不干净或者有某些配置文件无法删除掉吧)
mysql> grant all privileges on *.* to 'hive_user'@'%' with grant option; 分配权限
mysql> flush privileges;
将Hive默认的配置文件复制一份:
$ cp /usr/local/hive/conf/hive-default.xml.template /usr/local/hive/conf/hive-site.xml
对hive-site.xml中原有内容进行如下修改:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive_db?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>hive_user</value>
<description>Username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive_pwd</value>
<description>password to use against metastore database</description>
</property>
在hive-site.xml中添加以下内容:
<property>
<name>system:java.io.tmpdir</name>
<value>/usr/local/hadoop/iotmp</value>
<description/>
</property>
<property>
<name>system:user.name</name>
<value>hive_user</value>
</property>
并创建上述配置中的目录:
$ mkdir /usr/local/hadoop/iotmp
在/etc/profile文件末尾添加如下内容以配置环境变量HIVE_HOME:
# Hive
export HIVE_HOME=/usr/local/hive
export PATH="$PATH:$HIVE_HOME/bin:$HIVE_HOME/conf"
使之立即生效:
$ source /etc/profile
在/usr/local/hadoop/etc/hadoop/hadoop-env.sh中进行如下修改以确保Hadoop中的JAVA_HOME可以正常使用:
# The java implementation to use.
# export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
启动Hive前必须先启动hdfs:
$ start-dfs.sh
初始化数据库:
$ schematool -dbType mysql -initSchema
测试Hive:
$ hive
hive> create table a(id int, name string)
> row format delimited fields terminated by ',';
OK
Time taken: 0.808 seconds
hive> load data local inpath '/home/a.txt' into table a;
Loading data to table default.a
Table default.a stats: [numFiles=1, totalSize=18]
OK
Time taken: 0.187 seconds
hive> show tables;
OK
a
Time taken: 0.069 seconds, Fetched: 1 row(s)
hive> select * from a;
OK
1 h
2 i
3 v
4 e
Time taken: 0.167 seconds, Fetched: 4 row(s)
hive> dfs -ls /user/hive/warehouse/a;
Found 1 items
-rwxr-xr-x 1 root root 18 2018-07-18 00:21 /user/hive/warehouse/a/a.txt
其中/home/a.txt的内容为:
1,h
2,i
3,v
4,e
实际上细心的读者发现我们只是在上述hive-site.xml配置文件中指定了hive存放元数据的数据库为hive_db,但是并没有创建该数据库,而且上一步骤中测试hive的时候并没有指定使用该数据库。实际上使因为上一步骤中使用了默认的数据库default。
再来回顾一下hive:Hive是一种用类SQL语句来协助读写、管理那些存储在分布式存储系统上大数据集的数据仓库软件。
也即是我们以后使用hive的时候基本都是在Hive命令行(Hive Command Line)中进行的,而不会再回到mysql中进行操作,二者互不冲突的。
接下来通过操作加深理解:
$ hive
hive> show databases;
OK
default
Time taken: 0.009 seconds, Fetched: 1 row(s)
hive> use default;
OK
Time taken: 0.012 seconds
hive> show tables;
OK
a
Time taken: 0.018 seconds, Fetched: 1 row(s)
hive> create database hive_db;
OK
Time taken: 0.289 seconds
hive> show databases;
OK
default
hive_db
Time taken: 0.018 seconds, Fetched: 2 row(s)
hive> use hive_db;
OK
Time taken: 0.011 seconds
hive> show tables;
OK
Time taken: 0.028 seconds
hive>
所以以后在存储数据以及查看数据的时候记得先进入hive命令行中,使用指定的hive_db数据库,再进行操作:
hive> use hive_db;
Hive搭建完成,如果搭建过程中有任何问题,可以参考那些年我们踩过的Hive坑。
网友评论