今天学
习过程
和小结 |
一、 Hive基础 Hive是数据仓库工具,可以将结构化的数据文件映射为一张表,并提供SQL语句查询。本质是将HQL转化为MapReduce程序。 1) Hive处理的数据存储在hdfs上 2) 底层数据分析的试下是MapReduce 3) 在Yarn上运行程序 数据仓库的内容是读多写少,因此,hive中不建议对数据修改 二、 Hive安装 1) 下载、解压apache-hive-1.2.1-bin.tar.gz到/opt/module/目录下面 2) 修改文件名称为hive 3) 修改cong目录下的hive-env.sh.template名称为hive-env.sh 4) 配置hive-env.sh文件,Hadoop路径、hive路径 三、 Hive基本操作 1) 启动:hive; 2) 查看数据库:show databases; 3) 打开默认数据库:use default; 4) 显示所有的表:show tables; 5) 创建表:create table tablename(id int,name string)row Formate delimited fields terminated by “,”,在创建表示需要说明文件分割符 6) 查询数据:select * from tablename; 7) 退出:quit; 四、 本地文件导入hive案例 1) 创建本地文件student.txt,要注意文件之间的间隔符 2) Load data local inpath “文件路径” into table 表名;这里要注意local 表示为本地文件 五、 安装MySQL数据库 六、 Hive元数据配置到MySQL 1) 下载、解压mysql-connector-java-5.1.27.tar.gz 2) 复制mysql-connector-java-5.1.27-bin.jar到hive/lib/下 3) 配置metastore到MySQL,修改hive-site.xml文件 <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://hadoop102:3306/metastore?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>000000</value> <description>password to use against metastore database</description> </property> </configuration>
七、 HiveJDBC访问 1) 启动hiveserver2服务:bin/hiveserver2 2) 启动beebine:beebine 3) 连接hiveserver2 beeline> !connect jdbc:hive2://hadoop102:10000(回车) Connecting to jdbc:hive2://hadoop102:10000 Enter username for jdbc:hive2://hadoop102:10000: atguigu(回车) Enter password for jdbc:hive2://hadoop102:10000: (直接回车) Connected to: Apache Hive (version 1.2.1) Driver: Hive JDBC (version 1.2.1) Transaction isolation: TRANSACTION_REPEATABLE_READ 0: jdbc:hive2://hadoop102:10000> show databases; +----------------+--+ | database_name | +----------------+--+ | default |
八、 外部表 1) 建表语句 创建部门表
2) 创建员工表
3) 查看创建的表 hive (default)> show tables; OK tab_name dept emp 4) 向外部表中导入数据 导入数据 hive (default)> load data local inpath '/opt/module/datas/dept.txt' into table default.dept; hive (default)> load data local inpath '/opt/module/datas/emp.txt' into table default.emp; 5) 查询结果 hive (default)> select * from emp; hive (default)> select * from dept; 6) 查看表格式化数据 hive (default)> desc formatted dept; Table Type: EXTERNAL_TABLE
九、 分区表 分区表实际上就是对应一个HDFS文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过WHERE子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。
引入分区表(需要根据日期对日志进行管理) /user/hive/warehouse/log_partition/20170702/20170702.log /user/hive/warehouse/log_partition/20170703/20170703.log /user/hive/warehouse/log_partition/20170704/20170704.log 创建分区表语法
加载数据到分区表中 hive (default)> load data local inpath '/opt/module/datas/dept.txt' into table default.dept_partition partition(month='201709'); hive (default)> load data local inpath '/opt/module/datas/dept.txt' into table default.dept_partition partition(month='201708'); hive (default)> load data local inpath '/opt/module/datas/dept.txt' into table default.dept_partition partition(month='201707’);
重命名: 语法 ALTER TABLE table_name RENAME TO new_table_name 实操案例 hive (default)> alter table dept_partition2 rename to dept_partition3;
|
|||
遇到问
题汇总 |
一、 使用hive是遇到hadoop is not allowed to impersonate hadoop (state=08S01,code=0)的问题,是因为hive2以后权限问题 解决办法:在Hadoop core-site.xml中添加一下内容 <property> <name>hadoop.proxyuser.hadoop.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hadoop.groups</name> <value>*</value> </property> 然后重新启动Hadoop即可。 二、 在hive创建表后导入本地数据为空 解决办法:hive在创建表时,需要指定文件切割符,( create table tablename(id int,name string)row Formate delimited fields terminated by “,”)并且在本地文件中,数据的格式要按照切割符分离,才能将本地数据导入到hive不为空( Load data local inpath “文件路径” into table 表名)。
|