大数据之Hive笔记(一)

笔记
Hadoop
是一个适合于海量数据的分布式存储和分布式计算的框架。
两大核心
HDFS(hadoop distributed file system)
分布式存储
MapReduce
分布式计算
Hadoop的访问方式
WebGUI
50070–>查看hdfs数据,以及查看namenode,datanode健康状况
8088–>可以查看集群中mr的调度情况
19888–>job history提供访问的web端口
10020–>job history通信端口
CLI(Command Line Interface):
hdfs dfs mv/ls/cp/get/put ….
Java Api:
主要用来编写MR

SQL

要想使用SQL的方式来操作HDFS上面的数据,必须要满足两个条件
1、hdfs上面数据必须是结构化的数据
    所谓结构化的数据,就是指存储在RDBMS中的数据。
    关系与实体的一个映射关系
    RE
2、hdfs上面的数据要有目录、表、行、列等等概念
    hdfs上面的目录--->rdbs中的数据库和表
    hdfs上的目录下面的文件(数据文件)中的行和列-->rdbs中的行和列
    test.db
        person
    test1.db
        person
    package a
        person.java
    package b

person.java

Hive的概念
Hive是数据仓库的基础框架
数据仓库和数据的对比
1、数据仓库中存放的数据
是能够为公司的各个级别的决策提供数据支撑的数据
2、存放在数据仓库里面数据不能随随便便的进行修改,从很大程度上说都是存放的是历史history的数据,
在很大程度上对数据仓库里面的数据的操作基本都是查询
那么也就是说OLAP(Online analysis processing 联机分析过程)操作
也就相当于数据库中的select操作
DW(Data Warehouse EDW,DWH–>数据仓库)不适用于OLTP(Online transcation processing 联机事务处理)的操作
3、DW的构建在很大程度上是基于RDBSM建立
ETL
Extraction(提取,采集)
Transformation(转换)
Loading(加载)
Hive是SQL的解析引擎
Hive在今天最重要的一个功能就是担任数据仓库的构建*
select name, age, sex from person;–>hdfs

元信息

Hive的安装
Hadoop
MySQL
JDK
安装MySQL
第一步:
剔除linux上面的mysql以来
1、rpm -qa | grep mysql
mysql-libs-5.1.71-1.el6.x86_64
2、rpm -e –nodeps rpm -qa | grep mysql 推荐使用
或者rpm -e –nodeps mysql-libs-5.1.71-1.el6.x86_64
第二步:
安装
rpm -ivh MySQL-server.xxx.rpm
rpm -ivh MySQL-client.xxx.rpm
执行配置脚本:/usr/bin/mysql_secure_installation
第三步:授权
[root@master soft]# mysql -h master -uroot -proot
ERROR 1130 (HY000): Host ‘master’ is not allowed to connect to this MySQL server
使用mysql -uroot -proot登录进行授权
mysql> grant all privileges on . to ‘root’@’%’ identified by ‘root’;
mysql> flush privileges;
第四步:加入开机启动项
chkconfig mysql on
注意:如果是在线安装的话,mysql服务名为mysqld
注意:
[root@master soft]# rpm -qa | grep mysql –> 针对的在线安装的方式

[root@master soft]# rpm -qa | grep MySQL –> 针对离线安装的方式

Hive的安装
    解压,重命名到/opt/hive
    修改配置
        cp conf/hive-env.sh.template conf/hive-env.sh
        cp conf/hive-default.xml.template conf/hive-site.xml
    修改hive-env.sh,加入下面内容
        export JAVA_HOME=/opt/jdk
        export HADOOP_HOME=/opt/hadoop
        export HIVE_HOME=/opt/hive
    修改$HIVE_HOME/conf/hive-site.xml
        
            javax.jdo.option.ConnectionURL
            jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true
        
        
            javax.jdo.option.ConnectionDriverName
            com.mysql.jdbc.Driver
        
        
            javax.jdo.option.ConnectionUserName
            root
        
        
            javax.jdo.option.ConnectionPassword
            root
        
        
            hive.querylog.location
            /opt/hive/tmp
        
        
            hive.exec.local.scratchdir
            /opt/hive/tmp
        
        
            hive.downloaded.resources.dir
            /opt/hive/tmp
        
    启动
        bin/hive
            (e.g. ./schematool -initSchema -dbType ...==>解决方案
        bin/schematool -initSchema -dbType mysql -userName root -passWord root
    拷贝
        将mysql-connector-java-5.1.39.jar拷贝到$HIVE_HOME/lib/目录下
    运行报错:Found Class jline.Terminal, but interface was expected
       因为jline.jar版本不匹配造成的,

cp HIVEHOME/lib/jline2.12.jar HADOOP_HOME/share/hadoop/yarn/lib


    hive.metastore.warehouse.dir
    /user/hive/warehouse
    dw在hdfs上存放路径

Hive常见的运行方式:
    bin/hive -f /opt/data/hive-data/hive-demo.hql
    bin/hive -e "show databases; use default; show tables; select * from tttt;"
        这两种方式等价,但是上面的-e和-f不要对调!!!
    bin/hive -S -e "show databases; use default; show tables; select * from tttt;" > /opt/data/hive-data/result.csv
        将""中的hql安静slient执行完成,并将返回结果重定向到/opt/data/hive-data/result.csv中
    上述脚本添加配置参数
        bin/hive -f /opt/data/hive-data/hive-demo.hql --hiveconf hive.cli.print.header=true
            或者在hive-demo.hql中加入set hive.cli.print.header=true;
        bin/hive -e "show databases; use default; show tables; select * from tttt;" --hiveconf hive.cli.print.header=true
            或者在引号""中加入set hive.cli.print.header=true;
Hive提供了访问hdfs和linux操作方式
    linux
        !命令;
        eg. !pwd;
            /opt/hive
    hdfs:
        dfs -ls /;
        hive (default)> dfs -ls /;
        Found 5 items
        drwx------   - root supergroup          0 2016-10-27 19:55 /history
        drwxr-xr-x   - root supergroup          0 2016-10-28 00:45 /input
        drwxr-xr-x   - root supergroup          0 2016-10-28 02:46 /out
        drwxr-xr-x   - root supergroup          0 2016-10-30 22:02 /tmp

drwxr-xr-x - root supergroup 0 2016-10-30 23:05 /user

select w.word, count(w.word) as count from
(select explode(split(line, ” “)) word from tttt) w

group by w.word order by count;

Hive的表的操作
表结构的操作
create table student(id int);
给student增加一列或多列字段
alter table student add columns(name string, birthday date, online boolean);
替换原来表中的字段信息
alter table student replace columns(id int);
注意:不支持删除某一列,只能通过replace这种方式曲线救国。
对列的类型或名称进行修改

alter table student change column id sid string;

Hive有默认的行列分隔符
    行分隔符\n,列分隔符是\001-->shell中通过ctrl+v,ctrl+a敲出来
create table student(id int, name string, birthday date, online boolean);
加载数据的语句
    load data local inpath '/opt/data/hive-data/stu.txt' into table student;
数据的加载两种模式
    读模式
        数据在被加载到数据库的过程中不对数据的合法性进行校验,只在读取数据的时候对其合法性进行校验,
        将不合法的数据显示为NULL。
        有什么好处?
            效率高,适合大数据的加载。
            Hive加载数据就使用的是读模式。
    写模式
        数据在被加载到数据库的过程中需要对数据的合法性进行校验,数据库中的数据都是合法的。
        有啥好处?
            不用担心数据库中的数据非法。
        加载过程非常缓慢
自定义行列分隔符
create table stu(
    id int,
    name string,
    birthday date,
    online boolean
) row format delimited    -->使用自定义分隔符的标识
fields terminated by '\t' -->指定了列的分隔符

line terminated by ‘\n’; –>指定了行的分隔符,默认和linux文件行分隔符一致,都是\n

Hive中的复杂的数据类型
array
create table t_arr(
id int,
name string,
hobby array
) row format delimited
fields terminated by ‘\t’ ;
load data local inpath ‘/opt/data/hive-data/hive-array.txt’ overwrite into table t_arr;
我们发现,数据没能正确的显示出每一个hobby的内容,进过分析,其实质是没有对array指定
相应的分隔符,或者说,表内容中的分隔符”,”不是默认的分隔符,array数组元素之间的默认分隔符是
\002–>ctrl+v ctrl+b
create table t_arr_1(
id int,
name string,
hobby array
) row format delimited
fields terminated by ‘\t’
collection items terminated by ‘,’;
select hobby[index] from tblName;来访问array中的元素
map
create table t_map(
id int,
name string,
score map

你可能感兴趣的:(土肥圆的猿,的博客专栏)