Loading

Hive

date: 2018-11-16 19:01:03
updated: 2018-11-16 19:01:03

一、简介

要访问HDFS上的数据可以通过shell命令和API
如果要处理HDFS上的数据可以通过MapReduce,但MR的操作门槛比较高,eg:需要不断的进行调试,如果无法在本地运行,需要不断地导出jar包放到linux下进行调试

Hive是通过一种叫做HQL的类SQL语句来处理HDFS上的数据,但是和SQL不一样的是,HQL语言会转换为MR程序执行(select * from table不需要,因为select * from table只是对全部文件数据进行读取,并没有对数据进行操作)

Hive元数据:指在Hive中创建的数据库、表、视图等信息。这些元数据存储在关系型数据库中,比如MySQL

二、安装

  1. 解压
    tar -zxvf apache-hive-1.2.1-bin.tar.gz

  2. 设置环境变量
    需要用root权限,修改/etc/profile文件,退出root权限,输入source /etc/profile使环境变量生效

     HIVE_HOME=/home/hadoop/app/apache-hive-1.0.0-bin  
     export PATH=$PATH:$HIVE_HOME/bin
    
  3. 修改hive-env.sh
    进入conf目录,将hive-env.sh.template复制并改名为hive-env.sh

     #Set HADOOP_HOME to point to a specific hadoop install directory  
     HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0
    
  4. 修改hive-site.xml
    进入conf目录,将hive-site.xml放进去

     <configuration>
       <property>
     <name>javax.jdo.option.ConnectionURL</name>
     <value>jdbc:mysql://localhost:3306/hive</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.ConnectionPassword</name>
     <value>root</value>
     <description>password to use against metastore database</description>
       </property>
       <property>
     <name>hive.hwi.listen.port</name>
     <value>9999</value>
     <description>This is the port the Hive Web Interface will listen on</description>
       </property>
       
       <property>
     <name>datanucleus.autoCreateSchema</name>
     <value>true</value>
     <description>creates necessary schema on a startup if one doesn't exist. set this to false, after creating it once</description>
       </property>
       
       <property>
     <name>javax.jdo.option.ConnectionUserName</name>
     <value>root</value>
     <description>Username to use against metastore database</description>
       </property>
       
       <property>
     <name>hive.exec.local.scratchdir</name>
     <value>/home/oracle/appdata/hivetmp/iotmp</value>
     <description>Local scratch space for Hive jobs</description>
       </property>
       
       <property>
     <name>hive.downloaded.resources.dir</name>
     <value>/home/oracle/appdata/hivetmp/iotmp</value>
     <description>Temporary local directory for added resources in the remote file system.</description>
       </property>
       
       <property>
     <name>hive.querylog.location</name>
     <value>/home/oracle/appdata/hivetmp/iotmp</value>
     <description>Location of Hive run time structured log file</description>
       </property>
     
     </configuration>  
    
  5. 拷贝mysql-connector-java-5.0.8-bin.jar到hive 的lib下面

  6. 在linux下安装mysql,需在root权限下进行操作 记得设置密码

    • 安装mysql:yum install mysql-server mysql mysql-devel
    • 开启mysql服务:service mysqld start
    • 设置mysql密码:mysqladmin -u root password 'root'
    • mysql服务开机启动:chkconfig mysqld on

  7. 把jline-2.12.jar拷贝到hadoop相应的目录下,替代jline-0.9.94.jar,否则启动会报错

     cp hive/lib/jline-2.12.jar  hadoop-2.6.0/share/hadoop/yarn/lib/
    

三、启动Hive

  1. MySql
    先启动MySQL创建hive数据库 create database hive;
  2. Hadoop
    启动hadoop sbin/start-all.sh
  3. Hive
    输入hive进入到hive shell

Hive默认存储在hadoop下的/user/hive/warehouse下

四、Hive使用

  1. Hive默认数据库是default,直接创建table会建在defaul数据库中,同时会在/user/hive/warehouse下创建对应表名的一个目录

  2. 如果创建了一个新的数据库,会在/user/hive/warehouse下新建一个对应库名的目录,以.db结尾,该新建数据库的所有table都会存在该目录下

  3. 内部表的三种插入数据方式:

    • insert
    • hive的load命令,加载数据
      load data local inpath '/home/hadoop/student.txt' into table student;
    • 直接把数据文件复制到相应的HDFS目录中

  4. 外部表只有前两种插入数据方式
    因为创建外部表的时候,不会在HDFS的数据库目录下创建该表的目录,在向表里添加数据时,也不在表目录中存储,删除外部表的时候,只会把表信息删除,不会删除表里的数据

五、使用Hive解析Json

  1. 把json-serde-1.3.6-SNAPSHOT-jar-with-dependencies.jar复制到hive的lib目录下,重新进入hive

  2. 建表:

     create table user_movie(custid string, sno string, genreid string, movieid string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'  STORED AS TEXTFILE;
    
posted @ 2020-10-20 16:36  猫熊小才天  阅读(65)  评论(0编辑  收藏  举报