hive的环境搭建,以及简单使用-01

7 篇文章 0 订阅

这里面有一套cdh版本的hadoop,hive,zookeeper,都是配套的

链接:https://pan.baidu.com/s/1wmyMw9RVNMD4NNOg4u4VZg 
提取码:m888 
重新配置一遍hadoop运行环境,详细的配置在https://blog.csdn.net/kxj19980524/article/details/88954645

<configuration>
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://hadoop-senior01.buba.com:8020</value>
	</property>

	<property>
		<name>hadoop.tmp.dir</name>
		<value>/opt/modules/hadoop-2.5.0-cdh5.3.6/data</value>
	</property>
</configuration>

<!-- 指定数据冗余份数 -->
		<property>
			<name>dfs.replication</name>
			<value>3</value>
		</property>

		<!-- 关闭权限检查-->
		<property>
			<name>dfs.permissions.enable</name>
			<value>false</value>
		</property>

		<property>
			<name>dfs.namenode.secondary.http-address</name>
			<value>hadoop-senior03.buba.com:50090</value>
		</property>

		<property>
			<name>dfs.namenode.http-address</name>
			<value>hadoop-senior01.buba.com:50070</value>
		</property>

		<property>
			<name>dfs.webhdfs.enabled</name>
			<value>true</value>
		</property>

		<property>
			<name>yarn.nodemanager.aux-services</name>
			<value>mapreduce_shuffle</value>
		</property>

		<property>
			<name>yarn.resourcemanager.hostname</name>
			<value>hadoop-senior02.buba.com</value>
		</property>

        <!--开启历史服务-->
		<property>
			<name>yarn.log-aggregation-enable</name>
			<value>true</value>
		</property>

		<property>
			<name>yarn.log-aggregation.retain-seconds</name>
			<value>86400</value>
		</property>

		<!-- 任务历史服务 -->
	<property> 
		<name>yarn.log.server.url</name> 
		<value>http://hadoop-senior02.buba.com:19888/jobhistory/logs/</value> 
	</property> 

上面这个配置里的开启历史服务就是在执行完mapreduce程序后,可以访问以前执行过的mapreduce任务

<property> 
		<name>mapreduce.framework.name</name> 
		<value>yarn</value> 
	</property>

    <!--这两个配置节点得和上面历史服务配置节点保持一致-->
	<property> 
		<name>mapreduce.jobhistory.adress</name> 
		<value>hadoop-senior02.buba.com:10020</value> 
	</property>

	<property> 
		<name>mapreduce.jobhistory.webapp.adress</name> 
		<value>hadoop-senior02.buba.com:19888</value> 
	</property>

分发到别的节点,然后初始化

bin/hdfs namenode -format

初始化完后,编写两个脚本,一个是开启集群全部节点的,一个是关闭全部节点的.

#!/bin/bash
echo "---------------正在开启集群服务------------"
echo "---------------正在开启NameNode节点------------"
ssh kxj@hadoop-senior01.buba.com '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh start namenode'

echo "---------------正在开启SecondaryNamenode节点------------"

ssh kxj@hadoop-senior03.buba.com '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh start secondarynamenode'


echo "---------------正在开启DataNode节点------------"

for i in kxj@hadoop-senior01.buba.com kxj@hadoop-senior02.buba.com kxj@hadoop-senior03.buba.com
do 
        ssh $i '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh start datanode'
done


echo "---------------正在开启ResourceManager节点------------"

ssh kxj@hadoop-senior02.buba.com '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/yarn-daemon.sh start resourcemanager'

echo "---------------正在开启NodeManager节点------------"
for i in kxj@hadoop-senior01.buba.com kxj@hadoop-senior02.buba.com kxj@hadoop-senior03.buba.com
do
         ssh $i '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/yarn-daemon.sh start nodemanager'
done

echo "---------------正在开启JobHistoryServer节点------------"
ssh kxj@hadoop-senior02.buba.com '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/mr-jobhistory-daemon.sh start historyserver'
#!/bin/bash
echo "---------------正在关闭集群服务------------"
echo "---------------正在关闭JobHistoryServer节点------------"
ssh kxj@hadoop-senior02.buba.com '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/mr-jobhistory-daemon.sh stop historyserver'

echo "---------------正在关闭ResourceManager节点------------"

ssh kxj@hadoop-senior02.buba.com '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/yarn-daemon.sh stop resourcemanager'

echo "---------------正在关闭NodeManager节点------------"
for i in kxj@hadoop-senior01.buba.com kxj@hadoop-senior02.buba.com kxj@hadoop-senior03.buba.com
do
         ssh $i '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/yarn-daemon.sh stop nodemanager'
done

echo "---------------正在关闭NameNode节点------------"
ssh kxj@hadoop-senior01.buba.com '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh stop namenode'

echo "---------------正在关闭SecondaryNamenode节点------------"

ssh kxj@hadoop-senior03.buba.com '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh stop secondarynamenode'

echo "---------------正在关闭DataNode节点------------"

for i in kxj@hadoop-senior01.buba.com kxj@hadoop-senior02.buba.com kxj@hadoop-senior03.buba.com
do 
        ssh $i '/opt/modules/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh stop datanode'
done

编写完后修改它们的可执行权限.

上面命令当中ssh后面单引号,表示ssh到别的节点后,执行单引号里面的命令.    echo `` >> kxj.txt  反引号作用是把反引号里的脚本结果输入到kxj.txt里 

JobHistoryServer节点就是上面说的历史的那个服务

编写好后还不能运行呢,涉及到一个知识点,有shell和无shell

有shell
        粗放来讲,你手动使用CRT登录某个Linux系统时,是有shell的
    无shell
        当你使用ssh访问某个系统的时候,是无shell的

无shell的时候是加载不了那个系统的环境变量的,只能加载那个系统的用户变量.

系统变量就是/etc/profile文件,用户变量是用户根目录下

用户变量

cat /etc/profile >> ~/.bashrc   把系统变量里的内容都加到用户环境变量里面

把另外两台也执行一下,执行完后就可以进行脚本的测试了.

 

hive介绍

Hive的特性
1、操作接口是采用SQL语法,HQL跟sql很相似.
2、避免了写MapReduce的繁琐过程.把sql语句转换成mapreduce程序自动打成jar包,运行.

Hive体系结构
1、Client客户端有两种.
    ** 终端命令行
    ** JDBC -- 不常用,非常麻烦(相对于前者)
2、metastore
    ** 原本的数据集和字段名称以及数据信息之间的双射关系。
    ** 我们目前是存储在Mysql中
3、Server服务端,也就是Hadoop
    ** 在操作Hive的同时,需要将Hadoop的HDFS开启,YARN开启,MAPRED配置好

数据库:
    mysql、oracle、sqlserver、DB2、sqlite(手机端小型数据库)、MDB
数据仓库:
  Hive,是数据仓库是MapReduce的客户端,也就是说不必要每台机器都安装部署Hive.

看下图,现在假设有一个txt文本是这种格式的,让每行的每个字段对应上表的字段名,如果写mapreduce程序的话很麻烦,但是用hive的话,可以在hive上建个表,然后执行段sql语句,想要的结果就能输出出来.

 

安装步骤

解压hive后,进入conf目录下,修改配置文件名称

mv hive-default.xml.template hive-site.xml

mv hive-env.sh.template hive-env.sh

JAVA_HOME=/opt/modules/jdk1.7.0_67
HADOOP_HOME=/opt/modules/hadoop-2.5.0-cdh5.3.6
export HIVE_CONF_DIR=/opt/modules/hive-0.13.1-cdh5.3.6/conf

安装Mysql 


	$ su - root
	# yum -y install mysql mysql-server mysql-devel
	# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
	# rpm -ivh mysql-community-release-el7-5.noarch.rpm
	# yum -y install mysql-community-server

 启动mysql服务 start mysqld.service

修改mysql密码 mysqladmin -uroot password '123456'

下面这是两种登录MySQL的方式

修改一些用户权限,如果别的节点想访问这个mysql给它相应的权限.

grant all on *.* to root@'hadoop-senior01.buba.com' identified by '123456';

flush privileges;  刷新配置

grant:授权
all:所有权限
*.*:数据库名称.表名称
root:操作mysql的用户
@'':主机名
密码:123456

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://hadoop-senior01.buba.com: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>

注意在2785行左右缺少一个property标签,记得补上,官网下的没有,不然会报错. 

修改日志配置文件名称

mysql驱动包https://download.csdn.net/download/kxj19980524/11136513

把mysql的驱动包放到hive的lib目录下

操作hive前先开启hadoop集群,不然不能操作.

启动hive后,在mysql中就有了metastore数据库了,其实不使用mysql数据库也行,用别的也行,在配置文件里配置上相应的驱动就可以. 

当在hive中创建数据库的时候就会在这个目录下生成对应的.db文件夹,也可以在配置文件中修改地址. 

这两个是开启一些提示功能的

这儿就有提示了

创建一个表并且查询相应信息,可以看到使用select * 的时候它是没有生成mapreduce程序的,之间就出结果了.hive里是string类型,不是varchar

后面的这个\t就是表示进行双射的时候,hive是根据\t来划分字段的,如果你文本里使用的是逗号或者别的东西分割开的话,hive是不识别的.

create table t1(eid int, name string, sex string) row format delimited fields terminated by '\t';

desc formatted t1;  查看表的详细信息的详细信息

安装好hive之后,会在mysql数据库中建立一个metastore数据库这个数据库中就是存的hive表的元数据信息,当在hive创建表后就会在MySQL的这个数据库中存上元数据,当在hive中创建一个数据库的时候,在hdfs上就会创建一个对应的.db文件夹,当在hive创建表的时候就会在这个.db文件夹下生成对应的文件,也会在metastore中生成相应的双射关系.

 

在mysql的metastore数据库的这个表中就是生成的双射关系.

清洗数据,比如公司给的数据是*隔开的,hive设置表的时候是以\t分割的这时候就需要先写一个mapreduce程序按\t分割开然后再把数据导入到hive里面去

load data local inpath '文件路径' into table 表名; 如果导入的是hdfs上的数据的话,把local去掉就可以了.

这个操作是往hive创建的表里导入数据.

如果执行的查询语句是按条件查询的话很明显它是走了mapreduce程序了 ,当在hive中查询的时候其实是先去metastore上找到表跟元数据的双射关系,然后再进行查询的,

点击后面的history可以看到以前执行过的mapreduce程序

如果每次执行那么简单的查询语句都转换成mapreduce程序的话是很慢的,修改下面配置就可以简单的语句不执行mapreduce了

hive命令参数 -e后面加引号,里面可以直接写hql语句.

也可以把hql语句放入.hql结尾的文件里然后使用-f执行,说明它可以支持shell脚本来执行hql语句.

创建两个表,创建部门,员工信息表


					hive> create table if not exists db_hive_demo.dept(
						deptno int, 
						dname string, 
						loc string)
					row format delimited fields terminated by '\t';


					hive> create table if not exists db_hive_demo.emp(
					empno int, 
					ename string, 
					job string, 
					mgr int, 
					hiredate string, 
					sal double, 
					comm double, 
					deptno int)
					row format delimited fields terminated by '\t';

导入数据

dept.txt

10	ACCOUNTING	NEW YORK
20	RESEARCH	DALLAS
30	SALES	CHICAGO
40	OPERATIONS	BOSTON

 emp.txt

7369	SMITH	CLERK	7902	1980-12-17	800.00		20
7499	ALLEN	SALESMAN	7698	1981-2-20	1600.00	300.00	30
7521	WARD	SALESMAN	7698	1981-2-22	1250.00	500.00	30
7566	JONES	MANAGER	7839	1981-4-2	2975.00		20
7654	MARTIN	SALESMAN	7698	1981-9-28	1250.00	1400.00	30
7698	BLAKE	MANAGER	7839	1981-5-1	2850.00		30
7782	CLARK	MANAGER	7839	1981-6-9	2450.00		10
7788	SCOTT	ANALYST	7566	1987-4-19	3000.00		20
7839	KING	PRESIDENT		1981-11-17	5000.00		10
7844	TURNER	SALESMAN	7698	1981-9-8	1500.00	0.00	30
7876	ADAMS	CLERK	7788	1987-5-23	1100.00		20
7900	JAMES	CLERK	7698	1981-12-3	950.00		30
7902	FORD	ANALYST	7566	1981-12-3	3000.00		20
7934	MILLER	CLERK	7782	1982-1-23	1300.00		10

load data local inpath '/opt/modules/hive-0.13.1-cdh5.3.6/hqldata/dept.txt' into table db_hive_demo.dept;
load data local inpath '/opt/modules/hive-0.13.1-cdh5.3.6/hqldata/emp.txt' into table db_hive_demo.emp;

复杂数据类型操作

1.Array

create table tb_array(
name string,
work_locations array<string>
)
row format delimited fields terminated by '\t'
collection items terminated by ',';

加载数据到表tb_array

zhangsan        beijing,shanghai,tianjin,hangzhou
lisi    changchu,chengdu,wuhan

load data local inpath '/opt/modules/hive-0.13.1-cdh5.3.6/t2.txt' into table kxj.tb_array;            

可以使用下标来查询数据

用size来查询数组长度

2.Map

创建含有map数据结构的表

create table tb_map(
name string,
scores map<string,int>
)
row format delimited fields terminated by '\t'
collection items terminated by ','map keys terminated by ':';

load data local inpath '/opt/modules/hive-0.13.1-cdh5.3.6/map.txt' into table kxj.tb_map;

查询所有学生的英语成绩

查询所有学生的英语和数学成绩

Struct

创建一张带有结构体的表

create table tb_struct(
ip string,
userinfo struct<name:string,age:int>
)row format delimited fields terminated by '#'
collection items terminated by ':';

load data local inpath '/opt/modules/hive-0.13.1-cdh5.3.6/struct.txt' into table kxj.tb_struct;  

查看hive历史操作命令,主要用于排查逻辑错误或者查看常用命令

Hive临时生效设置
固定语法:set 属性名=属性值

在hive上,可以当sql一样操作,基本上和sql是一样的,聚合函数什么的都有

 

如果metastore数据丢失的话,就丢了双射关系了没办法操作了所以需要定期的备份metastore数据

备份的基本语法:
                $ mysqldump -uroot -p metastore > metastore.sql
还原的基本语法:
                $ mysql -uroot -p metastore < metastore.sql

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值