【概念】
- Hive是构建在Hadoop之上的数据仓库平台
- Hive是一个SQL解析引擎,它将SQL语句转译成MapReduce作业并在Hadoop上执行。
- Hive表是HDFS的一个文件目录,一个表名对应一个目录名,如果有分区表的话,则分区值对应子目录名。
- 其实质将hdfs文件内容变成了表的映射,然后通过mr查询。
- 底层存储是HDFS,中间执行时MR,或可视为中转代理。
【官网】https://hive.apache.org/
【特点】适合处理大数据;速度一般或较慢(处理小数据);
【特性】
- 支持类SQL(HQL[Hiv Query Language] , 但与SQL不同);
- 支持大规模文件处理(MR并行计算);
- 没有和MR绑定,可支持MR,SPARK等框架;
- 存储是基于HDFS,执行基于MR,资源调度是通过yarn完成;
【拓展】 蜜蜂 ; 大象 ;
【环境】基于hadoop ;
【meta元数据库管理器】 Mysql
【版本说明】
- hive-2.x ------- hadoop 2.x;
- hive-3.x ------- hadoop 3.x
- 检查 Hadoop 环境是否正常;(hadoop version)
- 安装Mysql数据库及驱动(如何安装?) 备注:若安装mysql80,需重新下载对应的驱动包;
- Hive下载安装
- 下载并解压Hive,并简化hive的文件名
cd /home/hadoop/software #切换到安装包的目录 wget https://dlcdn.apache.org/hive/hive-2.3.9/apache-hive-2.3.9-bin.tar.gz #下载hive tar -zvxf apache-hive-2.3.9-bin.tar.gz #解压hive mv apache-hive-2.3.9-bin hive #重命名
- Hive 环境变量设置
修改环境变量
sudo vim /etc/profile
export LANG=zh_CN.UTF8 #编码支持中文 export HIVE_HOME=/home/hadoop/hive export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/lib
让配置生效
source /etc/profile
- 下载mysql驱动 jar
https://dev.mysql.com/downloads/connector/j/ wget https://cdn.mysql.com/archives/mysql-connector-java-5.1/mysql-connector-java-5.1.49.tar.gz
将 mysql-connector.jar放置到hive的lib目录下(驱动加载)
mv mysql-connector*.jar hive/lib
- 修改hive-site.xml
cd hive/conf
在mysql中创建好database:hivemeta2021
CREATE DATAbase IF NOT EXISTS hivemeta2021 # 数据库名 DEFAULT CHARACTER SET utf8; #数据哭字符编码
添加hive-site.xml的内容
javax.jdo.option.ConnectionUserName root javax.jdo.option.ConnectionPassword 123456 javax.jdo.option.ConnectionURL mysqljdbc:mysql://192.168.16.3:3306/hivemeta2021?characterEncoding=utf-8&useSSL=false javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver hive.exec.script.wrapper
- Hive启动与测试
格式化
启动hive前,要保证mysql,hadoop启动
start-all.sh #启动 hdfs,yarn管理器;
初始化失败检查要素:hive环境变量;hadoop是否启动;mysql是否能正常连接;
cd hive/bin schematool -dbType mysql -initSchema #初始化失败检查要素:hive环境变量;hadoop是否启动;mysql是否能正常连接;
成功提示
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/home/cyj/software/apache-hive-2.3.7-bin/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/home/cyj/software/hadoop-2.7.7/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] metastore connection URL: jdbc:mysql://192.168.16.3:3306/hivemeta2021?characterEncoding=utf-8&useSSL=false metastore Connection Driver : com.mysql.jdbc.Driver metastore connection User: root Starting metastore schema initialization to 2.3.0 Initialization script hive-schema-2.3.0.mysql.sql Initialization script completed schemaTool completed
启动hive,如果遇到非文件夹的报错,删除hdfs根目录中的文件
hive # 启动hive
- 创建hive数据库
hive>create database firsthdb; hive>use firsthdb; hive>create table firstable(num int ,name string); hive>show tables; hive>select count(*) from firstable;
打开mysql数据库,检查DBS元数据内容;
- 导入数据
hive>create table employee(id int, name string,age int, tel string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;# ,表示分隔符 hive>load data local inpath '/home/hadoop/software/employee.txt' into table employee; hive>select * from empolyee; hive>load data inpath '/home/hadoop/software/employee01.txt' into table employee;#从hdfs上传文件
外部表;
内部表;
添加表分区;
复杂字段定义
# 1,Lilei,book-tv-code,beijing:chaoyang-shanghai:pudong # 2,Hanmeimei,book-Lilei-code,beijing:haidian-shanghai:huangpu hive>create table psn (id int,name string,hobbies ARRAY,address MAP ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' COLLECTION ITEMS TERMINATED BY '-'MAP KEYS TERMINATED BY ':';
- hive数据库 *** 作——删除
hive>drop database testdb; #删除空数据库 hive>drop database cascade; #级联删除 hive>drop table test; #删除表
- 在hadoop2中查看网页中的/tmp目录出现下面的错误:
Permission denied: user=dr.who, access=READ_EXECUTE inode="/tmp"
修改hdfs的权限就好了。
$HADOOP_HOME/bin/hdfs dfs -chmod -R 755 /tmp #chmode要有-
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)