Hadoop集群可视化管理- Hue

一、课前准备

  1. 准备好大数据集群,启动所有的服务,例如hadoop,hbase,impala,hiveserver2,mysql等各种服务

二、课堂主题

本堂课主要介绍hue这个图形化的界面工具,以及与其他工具之间的整合使用

三、课堂目标

  1. 实现hue与其他框架的整合使用

四、知识要点

1、hue的基本介绍

HUE=Hadoop User Experience

Hue是一个开源的Apache Hadoop UI系统,由Cloudera Desktop演化而来,最后Cloudera公司将其贡献给Apache基金会的Hadoop社区,它是基于Python Web框架Django实现的。

通过使用Hue我们可以在浏览器端的Web控制台上与Hadoop集群进行交互来分析处理数据,例如操作HDFS上的数据,运行MapReduce Job,执行Hive的SQL语句,浏览HBase数据库等等。

HUE链接

· Site: http://gethue.com/

· Github: https://github.com/cloudera/hue

· Reviews: https://review.cloudera.org

Hue的架构

1571452158221

核心功能

· SQL编辑器,支持Hive, Impala, MySQL, Oracle, PostgreSQL, SparkSQL, Solr SQL, Phoenix…

· 搜索引擎Solr的各种图表

· Spark和Hadoop的友好界面支持

· 支持调度系统Apache Oozie,可进行workflow的编辑、查看

HUE提供的这些功能相比Hadoop生态各组件提供的界面更加友好,但是一些需要debug的场景可能还是需要使用原生系统才能更加深入的找到错误的原因。

HUE中查看Oozie workflow时,也可以很方便的看到整个workflow的DAG图,不过在最新版本中已经将DAG图去掉了,只能看到workflow中的action列表和他们之间的跳转关系,想要看DAG图的仍然可以使用oozie原生的界面系统查看。

1,访问HDFS和文件浏览

2,通过web调试和开发hive以及数据结果展示

3,查询solr和结果展示,报表生成

4,通过web调试和开发impala交互式SQL Query

5,spark调试和开发

7,oozie任务的开发,监控,和工作流协调调度

8,Hbase数据查询和修改,数据展示

9,Hive的元数据(metastore)查询

10,MapReduce任务进度查看,日志追踪

11,创建和提交MapReduce,Streaming,Java job任务

12,Sqoop2的开发和调试

13,Zookeeper的浏览和编辑

14,数据库(MySQL,PostGres,SQlite,Oracle)的查询和展示

一句话总结:Hue是一个友好的界面集成框架,可以集成我们各种学习过的以及将要学习的框架,一个界面就可以做到查看以及执行所有的框架

2、Hue的安装

Hue的安装支持多种方式,包括rpm包的方式进行安装,tar.gz包的方式进行安装以及cloudera manager的方式来进行安装等,我们这里使用tar.gz包的方式来进行安装

第一步:下载Hue的压缩包并上传到linux解压

Hue的压缩包的下载地址:

http://archive.cloudera.com/cdh5/cdh/5/

我们这里使用的是CDH5.14.2这个对应的版本,具体下载地址为

http://archive.cloudera.com/cdh5/cdh/5/hue-3.9.0-cdh5.14.2.tar.gz

下载然后上传到node03服务器的/kkb/soft路径下

cd /kkb/soft
tar -zxvf hue-3.9.0-cdh5.14.2.tar.gz -C  /kkb/install

第二步:编译安装启动

2.1、linux系统安装依赖包:

联网安装各种必须的依赖包

sudo yum install ant asciidoc cyrus-sasl-devel cyrus-sasl-gssapi cyrus-sasl-plain gcc gcc-c++ krb5-devel libffi-devel libxml2-devel libxslt-devel make  mysql mysql-devel openldap-devel python-devel sqlite-devel gmp-devel libffi  gcc gcc-c++ kernel-devel openssl-devel gmp-devel openldap-devel
2.2、开始配置Hue
cd /kkb/install/hue-3.9.0-cdh5.14.2/desktop/conf

vim  hue.ini
#通用配置

[desktop]
    secret_key=jFE93j;2[290-eiw.KEiwN2s3['d;/.q[eIW^y#e=+Iei*@Mn<qW5o
    http_host=node03.kaikeba.com
    is_hue_4=true
    time_zone=Asia/Shanghai
    server_user=hadoop
    server_group=hadoop
    default_user=hadoop
    default_hdfs_superuser=hadoop

#配置使用mysql作为hue的存储数据库,大概在hue.ini的587行左右

[[database]]
    engine=mysql
    host=node03.kaikeba.com
    port=3306
    user=root
    password=123456
    name=hue
2.3、创建mysql数据库

创建hue数据库

create database hue default character set utf8 default collate utf8_general_ci;

注意:实际工作中,还需要为hue这个数据库创建对应的用户,并分配权限,我这就不创建了,所以下面这一步不用执行了

grant all on hue.* to 'hue'@'%' identified by 'hue';
2.4、准备进行编译

node03服务器执行以下命令准备进行编译

cd /kkb/install/hue-3.9.0-cdh5.14.2
make apps

注意:如果编译失败,请参照第一步重新解压

2.5、linux系统添加普通用户hue

为了方便也可以使用已经存在的hadoop用户来操作hue。

而工作中往往会单独创建一个用户hue:需要的话可在node03执行以下命令,创建普通用户hue

sudo useradd hue
sudo passwd hue
2.6、启动hue进程

node03执行以下命令启动hue

cd /kkb/install/hue-3.9.0-cdh5.14.2
sudo build/env/bin/supervisor
2.7、页面访问

http://node03:8888

第一次访问的时候,需要设置管理员用户和密码。我们这里的管理员的用户名与密码尽量保持与我们安装hadoop的用户名和密码一致,我们安装hadoop的用户名与密码分别是hadoop 123456,初次登录使用hadoop,密码为123456。

访问页面异常

如果忘记在hue.ini文件中修改元数据库引擎由sqlite改为mysql,访问页面将会遇到如下错误

File "/usr/local/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py", line 323, in execute
  return Database.Cursor.execute(self, query, params)
OperationalError: attempt to write a readonly database

解决办法,检查hue.ini配置是否将元数据库引擎由sqlite改为mysql,以及其他配置是否正确:

[[database]]
engine=mysql        #默认是sqlite3作为元数据库,这里改为mysql
host=192.168.186.36 #<mysql所在服务器>
port=3306           #<mysql端口,一般就是3306>
user=hive           #<mysql用户名>
password=hive1234   #<mysql用户密码>
name=hue            #<数据库名称,新数据库,专门用于hue,里面现在没有任何表>

完成以上的这个配置,启动Hue,通过浏览器访问,仍然会发生错误

DatabaseError: (1146, "Table 'hue.desktop_settings' doesn't exist")

原因是mysql数据没有被初始化,解决办法, 初始化数据库(执行一次即可):

sudo build/env/bin/hue syncdb
sudo build/env/bin/hue migrate

同步数据库的时候会询问是否创建用户,可以选择创建hue用户,并设计密码为hue。

这一步是可选的,因为就算不创建,登陆的时候也需要创建,一般使用Linux中一样的用户名和密码即可。(我用的是hadoop用户)

然后再启动supervisor服务(前台运行,如果需要后台运行可以添加-d选项 )

sudo build/env/bin/supervisor

3、hue与其他框架的集成

如果登陆后仍然由报错,很可能是因为hue和hadoop的hdfs和yarn的集成没有设置好。

3.1、hue与hadoop的HDFS以及yarn集成

第一步:更改所有hadoop节点的core-site.xml配置

记得更改完core-site.xml之后一定要重启hdfs与yarn集群

三台机器更改core-site.xml

<property>
    <name>hadoop.proxyuser.hadoop.hosts</name>
    <value>*</value>
</property>

<property>
    <name>hadoop.proxyuser.hadoop.groups</name>
    <value>*</value>
</property> 
第二步:更改所有hadoop节点的hdfs-site.xml

所有服务器更改hdfs-site.xml添加以下配置

<property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
</property>
第三步:重启hadoop集群

在node01机器上面执行以下命令

cd /kkb/install/hadoop-2.6.0-cdh5.14.2

sbin/stop-dfs.sh
sbin/start-dfs.sh
sbin/stop-yarn.sh
sbin/start-yarn.sh
第四步:停止hue的服务,并继续配置hue.ini

停止hue的服务,然后进入到以下路径,重新配置hue.ini这个配置文件(880行左右)

cd /kkb/install/hue-3.9.0-cdh5.14.2/desktop/conf

vim hue.ini

#配置我们的hue与hdfs集成]]
[[hdfs_clusters]]
    [[[default]]]
        fs_defaultfs=hdfs://node01.kaikeba.com:8020
        webhdfs_url=http://node01.kaikeba.com:50070/webhdfs/v1
        hadoop_hdfs_home=/kkb/install/hadoop-2.6.0-cdh5.14.2
        hadoop_bin=/kkb/install/hadoop-2.6.0-cdh5.14.2/bin
        hadoop_conf_dir=/kkb/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop

#配置我们的hue与yarn集成

[[yarn_clusters]]

    [[[default]]]

      resourcemanager_host=node01
      resourcemanager_port=8032
      submit_to=True
      resourcemanager_api_url=http://node01:8088
      history_server_api_url=http://node01:19888

注意:如果是hadoop 3的版本,那么webhdfs_url端口一般需要修改成9870

webhdfs_url=http://node01.kaikeba.com:9870/webhdfs/v1

配置完成之后重新启动hue的服务

node03执行以下命令进行重新启动hue的服务

$ cd /kkb/install/hue-3.9.0-cdh5.14.2/
$ sudo build/env/bin/supervisor

如果出现8888端口占用,需要先kill掉再启动服务

3.2、配置hue与hive集成

如果需要配置hue与hive的集成,我们需要启动hive的metastore服务以及hiveserver2服务(impala需要hive的metastore服务,hue需要hvie的hiveserver2服务)

更改hue的配置hue.ini

停止hue的服务,然后重新编辑修改hue.ini这个配置文件

修改hue.ini

cd /kkb/install/hue-3.9.0-cdh5.14.2/desktop/conf
vim hue.ini

[beeswax]
    hive_server_host=node03.kaikeba.com
    hive_server_port=10000
    hive_conf_dir=/kkb/install/hive-1.1.0-cdh5.14.2/conf
    server_conn_timeout=120
    auth_username=hadoop
    auth_password=123456

[metastore]

  #允许使用hive创建数据库表等操作
  enable_new_create_table=true
启动hive的metastore服务

去node03机器上启动hive的metastore以及hiveserver2服务

cd /kkb/install/hive-1.1.0-cdh5.14.2/conf
nohup bin/hive --service metastore &
nohup bin/hive --service hiveserver2 &

重新启动hue,然后就可以通过浏览器页面操作hive了

node03执行以下命令进行重新启动hue的服务

cd /kkb/install/hue-3.9.0-cdh5.14.2/
sudo build/env/bin/supervisor
3.3、配置hue与impala的集成

停止hue的服务进程

修改hue.ini配置文件

cd /kkb/install/hue-3.9.0-cdh5.14.2/desktop/conf
vim hue.ini

[impala]

  server_host=node03
  server_port=21050
  impala_conf_dir=/etc/impala/conf

然后node03执行以下命令,重新启动hue的服务即可

cd /kkb/install/hue-3.9.0-cdh5.14.2/
sudo build/env/bin/supervisor

3.4、配置hue与mysql的集成

找到databases 这个选项,将这个选项下面的mysql注释给打开,然后配置mysql即可,大概在1547行

停止hue的服务,然后修改hue.ini

cd /kkb/install/hue-3.9.0-cdh5.14.2/desktop/conf
vim hue.ini

[[[mysql]]]
    nice_name="My SQL DB"
    engine=mysql
    host=node03.kaikeba.com
    port=3306
    user=root
    password=123456
    options={"init_command":"set names utf8;SET CHARACTER SET utf8;SET character_set_connection=utf8;"}

更改完了配置,重新启动hue的服务

cd /kkb/install/hue-3.9.0-cdh5.14.2/
build/env/bin/supervisor

3.5、配置hue与hbase的集成

第一步:修改hue.ini

如果hue已经启动,需要先停止hue的服务,然后继续修改hue的配置文件hue.ini

cd /kkb/install/hue-3.9.0-cdh5.14.2/desktop/conf

vim hue.ini

[hbase]
  hbase_clusters=(Cluster|node01:9090)
  hbase_conf_dir=/kkb/install/hbase-1.2.0-cdh5.14.2/conf
第二步:启动hbase的thrift server服务

第一台机器执行以下命令启动hbase的thriftserver

cd /kkb/install/hbase-1.2.0-cdh5.14.2

bin/start-hbase.sh 
bin/hbase-daemon.sh start thrift  

检查hbase主节点状态: http://hadoop101:16010/master-status

第三步:启动hue

第三台机器执行以下命令启动hue

cd /kkb/install/hue-3.9.0-cdh5.14.2/

build/env/bin/supervisor
第四步:页面访问

http://node03:8888/hue/

image-20210613184533712

Views: 99

高速Hive查询引擎 – Impala

一、课前准备

安装好hive以及hadoop运行环境,并正常启动hadoop以及hive的

二、课堂主题

实现impala集群环境正常安装,并掌握impala的基本语法

三、课堂目标

熟练使用impala的语法

四、知识要点

离线任务处理流程概述

离线任务处理流程

由于大部分的软件框架,CDH都提供了压缩包的安装方式,但是由于impala有部分代码使用C++编写,所以impala在安装包的选择上面,cloudera公司没有提供tar包的安装方式,只提供了rpm的安装方式,我们可以通过下载rpm包来进行安装。注意:rpm包是linux操作系统上面的一种安装压缩包

1、 impala的概述

imala基本介绍

impala是cloudera提供的一款高效率的sql查询工具,提供实时的查询效果,官方测试性能比hive快10到100倍,其sql查询比sparkSQL还要更加快速,号称是当前大数据领域最快的查询sql工具,impala是参照谷歌的新三篇论文(Caffeine、Pregel、Dremel)当中的Dremel实现而来,其中旧三篇论文分别是(BigTable,GFS,MapReduce)分别对应我们即将学的HBase和已经学过的HDFS以及MapReduce

impala是基于hive并使用内存进行计算,兼顾数据仓库,具有实时,批处理,多并发等优点

impala与hive的关系

impala是基于hive的大数据分析查询引擎,直接使用hive的元数据库metadata,意味着impala元数据都存储在hive的metastore当中,并且impala兼容hive的绝大多数sql语法。所以需要安装impala的话,必须先安装hive,保证hive安装成功,并且还需要启动hive的metastore服务

impala的优点

1、impala比较快,非常快,特别快,因为所有的计算都可以放入内存当中进行完成,只要你内存足够大

2、摈弃了MR的计算,改用C++来实现,有针对性的硬件优化

3、具有数据仓库的特性,对hive的原有数据做数据分析

4、支持ODBC,jdbc远程访问

impala的缺点:

1、基于内存计算,对内存依赖性较大

2、改用C++编写,意味着维护难度增大

3、基于hive,与hive共存亡,紧耦合

4、稳定性不如hive,不存在数据丢失的情况

impala的架构以及查询计划

img

Impala的架构模块:

  • impala-server

    • 启动的守护进程,执行我们的查询计划 从节点,官方建议与所有的datanode装在一起,可以通过hadoop的短路读取特性实现数据的快速查询
  • impala-statestore

    • 状态存储区 主节点
  • impalas-catalog

    • 元数据管理区 主节点

查询执行

impalad分为frontend和backend两个层次, frondend用java实现(通过JNI嵌入impalad), 负责查询计划生成, 而backend用C++实现, 负责查询执行。

frontend**生成查询计划分为两个阶段:**

(1)生成单机查询计划,单机执行计划与关系数据库执行计划相同,所用查询优化方法也类似。

(2)生成分布式查询计划。 根据单机执行计划, 生成真正可执行的分布式执行计划,降低数据移动, 尽量把数据和计算放在一起。

![http://www.aboutyun.com/data/attachment/forum/201507/27/134940kb7luw6ix8in3w3s.png](https://imgs.delucia.cn/imgs/2021/clip_image004 - 副本.jpg)

上图是SQL查询例子, 该SQL的目标是在三表join的基础上算聚集, 并按照聚集列排序取topN。

impala的查询优化器支持代价模型: 利用表和分区的cardinality,每列的distinct值个数等统计数据, impala可估算执行计划代价, 并生成较优的执行计划。 上图左边是frontend查询优化器生成的单机查询计划, 与传统关系数据库不同, 单机查询计划不能直接执行, 必须转换成如图右半部分所示的分布式查询计划。 该分布式查询计划共分成6个segment(图中彩色无边框圆角矩形), 每个segment是可以被单台服务器独立执行的计划子树。

![img](https://imgs.delucia.cn/imgs/2021/clip_image006 - 副本.jpg)

2、impala的安装环境准备

需要提前安装好hadoop,hive,这两个框架,并且hive需要将hive的安装包,拷贝到所有的服务器上面都保存一份,因为impala需要引用hive的安装目录下面的一些依赖的jar包

3、下载impala的所有依赖包

由于impala没有提供tar包供我们进行安装,只提供了rpm包,所以我们在安装impala的时候,需要使用rpm包来进行安装,rpm包只有cloudera公司提供了,所以我们去cloudera公司网站进行下载rpm包即可,但是另外一个问题,impala的rpm包依赖非常多的其他的rpm包,可以一个个的将依赖找出来,也可以将所有的rpm包下载下来,制作成我们本地yum源来进行安装。我们这里就选择制作我们本地的yum源来进行安装,所以首先我们需要下载到所有的rpm包,下载地址如下

http://archive.cloudera.com/cdh5/repo-as-tarball/5.14.2/cdh5.14.2-centos7.tar.gz

下载好了之后,保留下,留作备用

将我们下载好的压缩包,上传到node03服务器的/kkb/soft路径下,并进行解压

cd /kkb/soft
tar -zxvf cdh5.14.2-centos7.tar.gz

4、制作本地yum源

镜像源是centos当中下载相关软件的地址,我们可以通过制作我们自己的镜像源指定我们去哪里下载impala的rpm包,这里我们使用httpd这个软件来作为服务端,启动httpd的服务来作为我们镜像源的下载地址

这里我们选用第三台机器作为镜像源的服务端

node03机器上执行以下命令

sudo yum  -y install httpd
sudo service httpd start

cd /etc/yum.repos.d
sudo vim localimp.repo 

[localimp]
name=localimp
baseurl=http://node03/cdh5.14.2/
gpgcheck=0
enabled=1

创建apache httpd的读取链接

sudo ln -s /kkb/soft/cdh/5.14.2 /var/www/html/cdh5.14.2

页面访问本地yum源,出现这个界面表示本地yum源制作成功

http://node03/cdh5.14.2

如果能够正常访问到文件浏览页面,证明我们的本地yum源安装成功

将制作好的localimp配置文件发放到所有需要安装impala的节点上去

node03执行以下命令进行分发
cd /etc/yum.repos.d/

sudo scp localimp.repo  node02:$PWD
sudo scp localimp.repo  node01:$PWD

5、开始安装impala

安装规划

服务名称 node01 node02 node03
impala-catalog 不安装 不安装 安装
impala-state-store 不安装 不安装 安装
impala-server 安装 安装 安装
#主节点node03执行以下命令进行安装

sudo yum  install  impala -y
impala-server
impala-state-store
impala-catalog
impala-shell

#从节点node01与node02安装以下服务
sudo yum install impala-server -y

6、所有节点配置impala

第一步:修改hive-site.xml

node03机器修改hive-site.xml内容如下

hive-site.xml配置

vim /kkb/install/hive-1.1.0-cdh5.14.2/conf/hive-site.xml
添加以下三个配置属性

<property>
    <name>hive.server2.thrift.bind.host</name>
    <value>node03.hadoop.com</value>
</property>
 <property>
     <name>hive.metastore.uris</name>
     <value>thrift://node03.kaikeba.com:9083</value>
 </property>
<property>
    <name>hive.metastore.client.socket.timeout</name>
    <value>3600</value>
 </property>

第二步:将hive的安装包发送到node02与node01机器上

在node03机器上面执行

cd /kkb/install/

scp -r hive-1.1.0-cdh5.14.2/ node02:$PWD
scp -r hive-1.1.0-cdh5.14.2/ node01:$PWD

第三步:node03启动hive的metastore服务

启动hive的metastore服务

node03机器启动hive的metastore服务

cd  /kkb/install/hive-1.1.0-cdh5.14.2

nohup bin/hive --service metastore &
nohup bin/hive -- service hiveserver2 &

注意:一定要保证mysql的服务正常启动,否则metastore的服务不能够启动

第四步:所有hadoop节点修改hdfs-site.xml添加以下内容

所有节点创建文件夹

sudo mkdir -p /var/run/hdfs-sockets

修改所有节点的hdfs-site.xml添加以下配置,修改完之后重启hdfs集群生效

vim  /kkb/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop/hdfs-site.xml

<property>
    <name>dfs.client.read.shortcircuit</name>
    <value>true</value>
</property>

<property>
     <name>dfs.domain.socket.path</name>
     <value>/var/run/hdfs-sockets/dn</value>
</property>

<property>
    <name>dfs.client.file-block-storage-locations.timeout.millis</name>
    <value>10000</value>
</property>
<property>
     <name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
     <value>true</value>
</property>

三台机器执行以下命令给文件夹授权

sudo  chown  -R  hadoop:hadoop   /var/run/hdfs-sockets/

第五步:重启hdfs

重启hdfs文件系统

node01服务器上面执行以下命令

cd /kkb/install/hadoop-2.6.0-cdh5.14.2/

sbin/stop-dfs.sh
sbin/start-dfs.sh

第六步:创建hadoop与hive的配置文件的连接

impala的配置目录为 /etc/impala/conf

这个路径下面需要把core-site.xmlhdfs-site.xml以及hive-site.xml拷贝到这里来,但是我们这里使用软连接的方式会更好

所有节点执行以下命令创建链接到impala配置目录下来

sudo ln -s /kkb/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop/core-site.xml /etc/impala/conf/core-site.xml

sudo ln -s /kkb/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop/hdfs-site.xml /etc/impala/conf/hdfs-site.xml

sudo ln -s /kkb/install/hive-1.1.0-cdh5.14.2/conf/hive-site.xml /etc/impala/conf/hive-site.xml

第七步:修改impala的配置文件

所有节点修改impala默认配置

所有节点更改impala默认配置文件以及添加mysql的连接驱动包

sudo vim /etc/default/impala

IMPALA_CATALOG_SERVICE_HOST=node03
IMPALA_STATE_STORE_HOST=node03

所有节点创建mysql的驱动包的软连接

sudo mkdir -p /usr/share/java
sudo ln -s /kkb/install/hive-1.1.0-cdh5.14.2/lib/mysql-connector-java-5.1.38.jar /usr/share/java/mysql-connector-java.jar
所有节点修改bigtop的java路径

修改bigtop的java_home路径

sudo vim /etc/default/bigtop-utils

export JAVA_HOME=/kkb/install/jdk1.8.0_141

第八步:启动impala服务

启动impala服务

主节点node03启动以下三个服务进程

sudo service impala-state-store start
sudo service impala-catalog start
sudo service impala-server start

从节点启动node01与node02启动impala-server

sudo service  impala-server  start

三台机器可以通过以下命令,查看impala进程是否存在

ps -ef | grep impala

注意:启动之后所有关于impala的日志默认都在/var/log/impala 这个路径下,node03机器上面应该有三个进程,node02与node01机器上面只有一个进程,如果进程个数不对,去对应目录下查看报错日志

浏览器页面访问:

访问impalad的管理界面

http://node03:25000/

访问statestored的管理界面

http://node03:25010/

访问catalog的管理界面

http://node03:25020

7、impala的使用

执行impala-shell即可进入交互界面

$ impala-shell

Starting Impala Shell without Kerberos authentication
Connected to node03:21000
Server version: impalad version 2.11.0-cdh5.14.2 RELEASE (build ed85dce709da9557aeb28be89e8044947708876c)
**********************************************************************
Welcome to the Impala shell.
(Impala Shell v2.11.0-cdh5.14.2 (ed85dce) built on Tue Mar 27 13:39:48 PDT 2018)
You can run a single query from the command line using the '-q' option.
**********************************************************************
[node03:21000] >

exit;退出交互界面

1、impala-shell语法

1.1、impala-shell的外部命令参数语法

不需要进入到impala-shell交互命令行当中即可执行的命令参数

impala-shell后面执行的时候可以带很多参数:

-h 查看帮助文档

impala-shell -h

-r 刷新整个元数据,数据量大的时候,比较消耗服务器性能

impala-shell -r

-v 查看对应版本

impala-shell -v -V

-f 执行查询文件

cd /kkb/install

vim impala-shell.sql

select * from course.score;

通过-f 参数来执行执行的查询文件

impala-shell -f impala-shell.sql

-p 显示查询计划

impala-shell -f impala-shell.sql -p

9.1.2、impala-shell的内部命令行参数语法

进入impala-shell命令行之后可以执行的语法

help命令

帮助文档

connect命令

connect hostname 连接到某一台机器上面去执行

refresh 命令

refresh dbname.tablename 增量刷新,刷新某一张表的元数据,主要用于刷新hive当中数据表里面的数据改变的情况

refresh course.score;

invalidate metadata 命令:

invalidate  metadata
全量刷新,性能消耗较大,主要用于hive当中新建数据库或者数据库表的时候来进行刷新

explain 命令:

用于查看sql语句的执行计划

explain select * from course.score;

explain的值可以设置成0,1,2,3等几个值,其中3级别是最高的,可以打印出最全的信息

set explain_level=3;

profile命令:

执行sql语句之后执行,可以打印出更加详细的执行步骤,

主要用于查询结果的查看,集群的调优等

select * from course.score;

profile;

注意:在hive窗口当中插入的数据或者新建的数据库或者数据库表,在impala当中是不可直接查询到的,需要刷新数据库,在impala-shell当中插入的数据,在impala当中是可以直接查询到的,不需要刷新数据库,其中使用的就是catalog这个服务的功能实现的,catalog是impala1.2版本之后增加的模块功能,主要作用就是同步impala之间的元数据

2、创建数据库

impala-shell进入到impala的交互窗口

2.1、查看所有数据库

show databases;

2.2、创建与删除数据库

创建数据库

CREATE DATABASE IF NOT EXISTS mydb1;
drop database  if exists  mydb;

创建数据库表并指定数据库表数据存放hdfs的位置(与hive建表语法类似)

hdfs dfs -mkdir -p /input/impala

create  external table  t3(id int ,name string ,age int )  row  format  delimited fields terminated  by  '\t' location  '/input/impala/external';

3、 创建数据库表

创建student表

CREATE TABLE IF NOT EXISTS mydb1.student (name STRING, age INT, contact INT );

创建employ表

create table employee (Id INT, name STRING, age INT,address STRING, salary BIGINT);
3.1、 数据库表中插入数据
insert into employee (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, 'Ramesh', 32, 'Ahmedabad', 20000 );
insert into employee values (2, 'Khilan', 25, 'Delhi', 15000 );
Insert into employee values (3, 'kaushik', 23, 'Kota', 30000 );
Insert into employee values (4, 'Chaitali', 25, 'Mumbai', 35000 );
Insert into employee values (5, 'Hardik', 27, 'Bhopal', 40000 );
Insert into employee values (6, 'Komal', 22, 'MP', 32000 );

数据的覆盖

Insert overwrite employee values (1, 'Ram', 26, 'Vishakhapatnam', 37000 );
执行覆盖之后,表中只剩下了这一条数据了

另外一种建表语句

create table customer as select * from employee;
3.2、 数据的查询
select * from employee;

select name,age from employee;
3.3、 删除表
DROP table  mydb1.employee;
3.4、 清空表数据
truncate  employee;
3.5、 查看视图数据
select * from employee_view;

4、 order by语句

基础语法

select * from table_name ORDER BY col_name [ASC|DESC] [NULLS FIRST|NULLS LAST]
Select * from employee ORDER BY id asc;

5、group by 语句

Select name, sum(salary) from employee Group BY name;

6、 having 语句

基础语法

select * from table_name ORDER BY col_name [ASC|DESC] [NULLS FIRST|NULLS LAST]

按年龄对表进行分组,并选择每个组的最大工资,并显示大于20000的工资

select max(salary) from employee group by age having max(salary) > 20000;

7、 limit语句

select * from employee order by id limit 4;

8、impala当中的数据表导入几种方式

第一种方式,通过load hdfs的数据到impala当中去

create table user(id int ,name string,age int ) row format delimited fields terminated by "\t";

准备数据user.txt并上传到hdfs的 /user/impala路径下去

1   hello   15
2   zhangsan    20
3   lisi    30
4   wangwu  50

加载数据

load data inpath '/user/impala/' into table user;

查询加载的数据

select  *  from  user;

如果查询不不到数据,那么需要刷新一遍数据表

refresh  user;

第二种方式:

create  table  user2   as   select * from  user;

第三种方式:

insert into 不推荐使用 因为会产生大量的小文件

千万不要把impala当做一个数据库来使用

第四种:

insert  into  select  用的比较多

9、impala的java开发

在实际工作当中,因为impala的查询比较快,所以可能有会使用到impala来做数据库查询的情况,我们可以通过java代码来进行操作impala的查询

第一步:导入jar包
  <repositories>
        <repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>
        <repository>
            <id>central</id>
            <url>http://repo1.maven.org/maven2/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.6.0-cdh5.14.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-common</artifactId>
            <version>1.1.0-cdh5.14.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-metastore</artifactId>
            <version>1.1.0-cdh5.14.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-service</artifactId>
            <version>1.1.0-cdh5.14.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>1.1.0-cdh5.14.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>1.1.0-cdh5.14.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.thrift/libfb303 -->
        <dependency>
            <groupId>org.apache.thrift</groupId>
            <artifactId>libfb303</artifactId>
            <version>0.9.0</version>
            <type>pom</type>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.thrift/libthrift -->
        <dependency>
            <groupId>org.apache.thrift</groupId>
            <artifactId>libthrift</artifactId>
            <version>0.9.0</version>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.2.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.2.5</version>
        </dependency>
    </dependencies>
第二步:impala的java代码查询开发
public class ImpalaJdbc {
     public static void main(String[] args) throws Exception {
     //定义连接驱动类,以及连接url和执行的sql**语句     
     String driver = "org.apache.hive.jdbc.HiveDriver";
     String driverUrl = "jdbc:hive2://192.168.52.120:21050/mydb1;auth=noSasl";
     String sql = "select * from student";

     //通过反射加载数据库连接驱动*    
     Class.forName(driver);
     Connection connection = DriverManager.getConnection(driverUrl);
     PreparedStatement preparedStatement = connection.prepareStatement(sql);
     ResultSet resultSet = preparedStatement.executeQuery();
     //通过查询,得到数据一共有多少列     
     int col = resultSet.getMetaData().getColumnCount();
     //遍历结果集     
     while (resultSet.next()){
         for(int i=1;i<=col;i++){
             System.out.print(resultSet.getString(i)+"\t");
         }
         System.out.print("\n");
     }
     preparedStatement.close();
     connection.close();
 }
 }

Views: 82