开发环境
系统: CentOS 7.4
主机名: prs3000
ip: 10.3.36.246
hadoop 2.8.0
hadoop安装参考上一篇
hive下载
下载地址:http://hive.apache.org/downloads.html 点击
选择2.3.4版本下载
解压和安装
下载好后拷贝文件到prs3000机器/opt/hive目录下
scp apache-hive-2.3.4-bin.tar.gz root@10.3.36.246:/opt/hive
解压:
tar -xzvf apache-hive-2.3.4-bin.tar.gz
创建tmp并文件夹赋予读写权限
chmod 777/opt/hive/tmp
如图:
环境变量配置
输入vim /etc/profile
编辑/etc/profile文件,增加hive,hadoop,java相关的环境变量配置(需要和你机器安装路径一致),我的配置如下:
export JAVA_HOME=/root/jdk1.8.0_202
export HADOOP_HOME=/opt/hadoop/hadoop-2.8.0
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib"
export HIVE_HOME=/opt/hive/apache-hive-2.3.4-bin
export HIVE_CONF_DIR=${HIVE_HOME}/conf
export CLASS_PATH=.:${JAVA_HOME}/lib:${HIVE_HOME}/lib:$CLASS_PATH
export PATH=.:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${HIVE_HOME}/bin:$PATH
环境变量完成后,让配置文件生效
source /etc/profile
hive配置
新建hive-site.xml文件
进入解压缩目录,将hive-default.xml.template文件复制一份,并且改名为hive-site.xml
cd /opt/hive/apache-hive-2.3.4-bin/conf
cp hive-default.xml.template hive-site.xml
使用hadoop新建hdfs目录
因为在hive-site.xml中有这样的配置:
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<name>hive.exec.scratchdir</name>
<value>/tmp/hive</value>
使用hadoop新建/user/hive/warehouse目录,执行命令:
$HADOOP_HOME/bin/hadoop fs -mkdir -p /user/hive/warehouse
给刚才新建的目录赋予读写权限,执行命令:
$HADOOP_HOME/bin/hadoop fs -chmod 777 /user/hive/warehouse
使用hadoop新建/tmp/hive/目录,执行命令:
$HADOOP_HOME/bin/hadoop fs -mkdir -p /tmp/hive/
给刚才新建的目录赋予读写权限,执行命令:
$HADOOP_HOME/bin/hadoop fs -chmod 777 /tmp/hive
检查hdfs目录是否创建成功
检查/user/hive/warehouse目录是否创建成功,执行命令:
$HADOOP_HOME/bin/hadoop fs -ls /user/hive/
如图:
检查/tmp/hive是否创建成功,执行命令:
$HADOOP_HOME/bin/hadoop fs -ls /tmp/
修改hive-site.xml
将hive-site.xml文件中的${system:java.io.tmpdir}替换为hive的临时目录,也就是之前创建的/opt/hive/tmp,注意有多处需要修改
<property>
<name>hive.downloaded.resources.dir</name>
<value>/opt/hive/tmp/${hive.session.id}_resources</value>
<description>Temporary local directory for added resources in the remote file system.</description>
</property>
将${system:user.name}都替换为root,注意有多处需要替换,我这里只列举了1个
<property>
<name>hive.querylog.location</name>
<value>/opt/hive/tmp/root</value>
<description>Location of Hive run time structured log file</description>
</property>
接着修改hive-site.xml数据库相关的配置,搜索javax.jdo.option.ConnectionURL,将name对应的value修改为mySQL地址
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://10.3.36.246:3306/hive?createDatabaseIfNotExist=true</value>
<description>
JDBC connect string for a JDBC metastore.
To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
</description>
</property>
搜索javax.jdo.option.ConnectionDriverName,将该name对应的value修改为MySQL驱动类路径
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
搜索javax.jdo.option.ConnectionUserName,将对应的value修改为MySQL数据库登录名,我的用户名和密码是paradb/supermas
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>paradb</value>
<description>Username to use against metastore database</description>
</property>
搜索javax.jdo.option.ConnectionPassword,将对应的value修改为MySQL数据库的登录密码:
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>supermas</value>
<description>password to use against metastore database</description>
</property>
搜索hive.metastore.schema.verification,将对应的value修改为false:
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<description>
Enforce metastore schema version consistency.
True: Verify that version information stored in is compatible with one from Hive jars. Also disable automatic
schema migration attempt. Users are required to manually migrate schema after Hive upgrade which ensures
proper metastore schema migration. (Default)
False: Warn if the version information stored in metastore doesn't match with one from in Hive jars.
</description>
</property>
修改hive-env.sh
进入/opt/hive/apache-hive-2.3.4-bin/conf
cd /opt/hive/apache-hive-2.3.4-bin/conf
复制hive-env.sh.template并改名为hive-env.sh
cp hive-env.sh.template hive-env.sh
打开hive-env.sh添加以下内容
export HADOOP_HOME=/opt/hadoop/hadoop-2.8.0
export HIVE_CONF_DIR=/opt/hive/apache-hive-2.3.4-bin/conf
export HIVE_AUX_JARS_PATH=/opt/hive/apache-hive-2.3.4-bin/lib
mysql驱动包上传
将MySQL驱动包上载到Hive的lib目录下,我的路径是/opt/hive/apache-hive-2.3.4-bin/lib
hive启动和测试
对mysql数据库进行初始化
进入到hive的bin目录 执行命令:
cd /opt/hive/apache-hive-2.3.4-bin/bin
对数据库进行初始化,执行命令:`
schematool -initSchema -dbType mysql
这里出现了很多问题,一一解决
问题1:显示非法字符
经过多方排查发现是工具问题,ultraedit和notepad编辑hive-site.xml后存储会出现这样问题,换成visual studio code编辑hive-site.xml后传入就正常了
问题2:权限问题,显示hive-site.xml里面配置的paradb/supermas没有权限
解决办法,root登陆mysql,查看用户:
给paradb用户赋予权限
grant all on *.* to paradb@'%' identified by 'supermas';
grant all on *.* to paradb@'localhost' identified by 'supermas';
重新执行,mysql初始化成功
schematool -initSchema -dbType mysql
启动hive
进入hive的bin目录执行命令
cd /opt/hive/apache-hive-2.3.4-bin/bin
启动
./hive
如图:
测试
进入hive命令行模式后,执行一些测试命令,比如
show functions;
如图:
查看sum函数的详细信息的命令:
desc function sum;
如图:
新建表及导入数据的测试
新建数据库db_hive_edu
执行新建数据库的hive命令:
create database db_hive_edu;
新建数据表
在刚才创建的数据库中创建数据表,执行hive命令:
use db_hive_edu;
create table employee(id int,name string) row format delimited fields terminated by '\t';
创建文件写入表中
在/opt/hive目录内新建一个文件
touch /opt/hive/employee.txt
注意:ID和name直接是TAB键,不是空格,因为在上面创建表的语句中用了terminated by '\t’所以这个文本里id和name的分割必须是用TAB键(复制粘贴如果有问题,手动敲TAB键吧),还有就是行与行之间不能有空行,否则下面执行load,会把NULL存入表内,该文件要使用unix格式,如果是在windows上用txt文本编辑器编辑后在上载到服务器上,需要用工具将windows格式转为unix格式,例如可以使用Notepad++来转换。
添加如下内容:
完成上面的步骤后,在磁盘上/opt/hive/student.txt文件已经创建成功,文件中也已经有了内容,在hive命令行中执行加载数据的hive命令:
load data local inpath '/opt/hive/employee.txt' into table db_hive_edu.employee;
如图:
查看是否把刚才文件中的数据写入成功,hive命令行输入:
select *from db_hive_edu.employee;
如图:
页面查看写入hdfs的数据
hadoop的namenode地址是10.3.36.246,输入
http://10.3.36.246:50070/explorer.html#/user/hive/warehouse/db_hive_edu.db
显示,点击employee进入
点击后如图:
继续点击employee.txt
感谢