先电大数据平台操作手册-XianDian-BigData-v2.1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南京第五十五所技术开发有限公司
先电大数据平台
用户手册
版本:先电Cloud-BigData-v2.1
发布日期:2017年02月21日
南京第五十五所技术开发有限公司
版本修订说明
目录
1概述 (5)
1.1大数据简介 (5)
1.2先电大数据平台简介 (5)
2基本环境配置 (6)
2.1配置主机名 (7)
2.2修改hosts文件 (7)
2.3修改yum源 (7)
2.4配置ntp (8)
2.5配置SSH (9)
2.6禁用Transparent Huge Pages (9)
2.7安装配置JDK (10)
3配置ambari-server (11)
3.1安装MariaDB数据库 (11)
3.2安装配置ambari-server (12)
4配置ambari-agent (14)
5部署管理Hadoop集群 (14)
5.1部署Hadoop集群 (14)
5.2HDFS运维管理 (21)
5.3MapReduce (31)
6部署Hive数据仓库 (32)
6.1部署Hive (32)
6.1Hive用户指南 (34)
7部署Hbase分布式列数据库 (49)
7.1部署HBase (49)
7.2测试验证 (51)
7.3HBase用户指南 (51)
8部署Mahout数据挖据工具 (59)
8.1部署Mahout (59)
8.2测试验证 .................................................................................... 错误!未定义书签。

9部署Pig数据分析平台 .. (63)
9.1部署Pig (63)
9.2Pig简介 (64)
9.3运行案例 (66)
1概述
1.1大数据简介
“大数据”是一个体量特别大,数据类别特别庞杂的数据集合,并且这样的数据集无法用传统数据库工具或常规软件工具抓取、管理和处理其内容。

大数据技术是指从各种各样类型的庞杂数据中,快速的获取有价值的信息的能力。

适用于大数据的技术包括大规模并行处理数据库,数据挖掘电网,分布式文件系统,分布式数据库,云计算平台和可扩展的存储系统。

Apache的Hadoop项目是可靠的、可扩展的、开源的、分布式计算软件。

Apache的Hadoop 软件库是允许通过相对简单的程序模型构建计算集群为庞大的数据集进行分布式计算的框架。

Hadoop的设计思想可以将计算模式从单节点服务器扩展为数以千计的计算集群,每一个单独的服务器都提供自主的本地计算及存储能力。

对于高可用指标而言,Hadoop软件库自身可以通过检测和故障调试从应用层来实现高可用而不需要关心硬件底层的高可用性。

所以提供一个计算集群上层的高可用服务对于集群故障修复而言就显得至关重要。

1.2先电大数据平台简介
先电大数据平台是基于Ambari进行二次开发的Hadoop分布式集群配置管理工具,该平台通过安装向导来进行集群的搭建,简化了集群供应。

同时,他还有一个监控组件,叫做Ambari-Metrics,可以提前配置好关键的运维指标(metrics),然后收集集群的中服务、主机等运行状态等信息,通过WEB的方式显示出来。

我们可以直接查看Hadoop Core(HDFS 和MapReduce)及相关项目(如HBase、Hive和HCatalog)是否健康。

它的用户界面非常直观,用户可以轻松有效地查看信息并控制集群。

先电大数据平台支持作业与任务执行的可视化与分析,能够更好地查看依赖和性能。

通过一个完整的RESTful API把监控信息暴露出来,集成了现有的运维工具。

平台使用Ganglia 收集度量指标,用Nagios支持系统报警。

图1.1 Ambari结构图
其中Ambari是一个分布式架构的软件,主要由两部分组成:Ambari Server 和Ambari Agent,如图1-1所示。

Ambari Server 会读取Stack 和Service 的配置文件。

当用Ambari 创建集群的时候,Ambari Server 传送Stack 和Service 的配置文件以及Service 生命周期的控制脚本到Ambari Agent。

Agent 拿到配置文件后,会下载安装公共源里软件包(Redhat,就是使用yum 服务)。

安装完成后,Ambari Server 会通知Agent 去启动Service。

之后Ambari Server 会定期发送命令到Agent 检查Service 的状态,Agent 上报给Server,并呈现在Ambari 的GUI 上,方便用户了解到集群的各种状态,并进行相应的维护。

图1-1 Ambari架构图
2基本环境配置
以两台节点为例来组件Hadoop分布式集群,这里采用的系统版本为Centos7,如下表所示:
主机名内存硬盘IP地址角色
master 8192MB 100G 192.168.200.131 Ambari-Server slaver1 4096MB 100G 192.168.200.133 Ambari-Agent
2.1配置主机名
# master
# hostnamectl set-hostname master
# hostname
master
# slaver1
# hostnamectl set-hostname slaver1
# hostname
slaver1
2.2修改hosts文件
# master & slaver1
# vi /etc/hosts
192.168.200.131 master
192.168.200.133 slaver1
2.3修改yum源
# master
将XianDian-BigData-v2.0.2-BASE.iso挂在到/mnt目录下,将其中的ambari解压到/opt 目录下,并在master节点配置ftp服务。

注意:
因为安装大数据相关软件包时,可能会用到相关依赖软件包,所以需要配置Centos7 Yum源,这里可以采用IAAS中的Centos7 Yum源。

# master & slaver1
# cd /etc/yum.repos.d/
# rm -vf *
配置Yum源
# vi ambari.repo
[centos7]
baseurl=ftp://192.168.2.10/centos7/
(注:具体的yum源根据真实环境配置,本次为实验室测试环境) gpgcheck=0
enabled=1
name=centos
[ambari]
name=ambari
baseurl=ftp://10.0.3.61/ambari
(注:具体的yum源根据真实环境配置,本次为实验室测试环境) enabled=1
gpgcheck=0
# master
# yum -y install httpd
将/mnt/文件夹中HDP-2.4-BASE和HDP-UTILS-1.1.0.20两个文件夹拷贝到/var/www/html/目录下。

启动httpd服务。

# systemctl enable httpd.service
# systemctl status httpd.service
2.4配置ntp
# master
# yum -y install ntp
# vi /etc/ntp.conf
注释或者删除以下四行
server iburst
server iburst
server iburst
server iburst
添加以下两行
server 127.127.1.0
fudge 127.127.1.0 stratum 10
#systemctl enable ntpd
#systemctl start ntpd
# slaver1
# yum -y install ntpdate
# ntpdate master
# systemctl enable ntpdate
2.5配置SSH
# master & slaver1
检查2个节点是否可以通过无密钥相互访问,如果未配置,则进行SSH无密码公钥认证配置。

如下:
# yum install openssh-clients
# ssh-keygen
# ssh-copy-id master.hadoop
# ssh-copy-id slaver1.hadoop
ssh登录远程主机查看是否成功
# ssh master.hadoop
# exit
# ssh slaver1.hadoop
# exit
2.6禁用Transparent Huge Pages
操作系统后台有一个叫做khugepaged的进程,它会一直扫描所有进程占用的内存,在可能的情况下会把4kpage交换为Huge Pages,在这个过程中,对于操作的内存的各种分配活动都需要各种内存锁,直接影响程序的内存访问性能,并且,这个过程对于应用是透明的,
在应用层面不可控制,对于专门为4k page优化的程序来说,可能会造成随机的性能下降现象。

# master & slaver1
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
# echo never > /sys/kernel/mm/transparent_hugepage/defrag
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
重启后失效,需要再次执行
2.7安装配置JDK
# master
# mkdir /usr/jdk64/
# mount -o loop XianDian-BigData-v2.0.2-BASE.iso /mnt/
# cd /mnt/
# tar -zxvf jdk-8u77-linux-x64.tar.gz -C /usr/jdk64/
# vi /etc/profile
export JA VA_HOME=/usr/jdk64/jdk1.8.0_77
export PATH=$JA V A_HOME/bin:$PATH
# source /etc/profile
#java –version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)
# slaver1
#mkdir /usr/jdk64/
#scp 172.24.14.106://mnt/jdk-8u77-linux-x64.tar.gz .
# tar -zxvf jdk-8u77-linux-x64.tar.gz -C /usr/jdk64/
# vi /etc/profile
export JA VA_HOME=/usr/jdk64/jdk1.8.0_77
export PATH=$JA V A_HOME/bin:$PATH
# source /etc/profile
#java –version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode) 3配置ambari-server
# master
# yum -y install ambari-server
3.1安装MariaDB数据库
# master
# yum install mariadb mariadb-server mysql-connector-java
启动服务
# systemctl enable mariadb
# systemctl start mariadb
配置MySQL
#mysql_secure_installation
按enter确认后设置数据库root密码,我们这里设置为“bigdata”Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] n
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
创建ambari数据库
# mysql -uroot -pbigdata
MariaDB [(none)]> create database ambari;
MariaDB [(none)]> grant all privileges on ambari.* to 'ambari'@'localhost' identified by
'bigdata';
MariaDB [(none)]> grant all privileges on ambari.* to 'ambari'@'%' identified by 'bigdata'; MariaDB [(none)]> use ambari;
MariaDB [ambari]> source
/var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql
MariaDB [ambari]> Bye
3.2安装配置ambari-server
# master
# ambari-server setup
WARNING: SELinux is set to 'permissive' mode and temporarily disabled.
OK to continue [y/n] (y)?
Customize user account for ambari-server daemon [y/n] (n)? n
Checking JDK...
[1] Oracle JDK 1.8 + Java Cryptography Extension (JCE) Policy Files 8
[2] Oracle JDK 1.7 + Java Cryptography Extension (JCE) Policy Files 7
[3] Custom JDK
==================================================================== ==========
Enter choice (1): 3
Path to JA V A_HOME: /usr/jdk64/jdk1.8.0_77
Validating JDK on Ambari Server...done.
Completing setup...
Configuring database...
Enter advanced database configuration [y/n] (n)? y
Configuring database...
==================================================================== Choose one of the following options:
[1] - PostgreSQL (Embedded)
[2] - Oracle
[3] - MySQL
[4] - PostgreSQL
[5] - Microsoft SQL Server (Tech Preview)
[6] - SQL Anywhere
==================================================================== Enter choice (1): 3
Hostname (localhost):
Port (3306):
Database name (ambari):
Username (ambari):
Enter Database Password (bigdata):
Proceed with configuring remote database connection properties [y/n] (y)?
Ambari Server 'setup' completed successfully.
启动ambari-server服务
# ambari-server start
登陆界面http://192.168.200.131:8080/
登录用户名密码为admin:admin
4配置ambari-agent
# master & slaver1
# yum -y install ambari-agent
# vi /etc/ambari-agent/conf/ambari-agent.ini
[server]
hostname= master
# ambari-agent restart
# tail -f /var/log/ambari-agent/ambari-agent.log
INFO 2017-01-12 09:44:20,919 Controller.py:265 - Heartbeat response received (id = 1340) INFO 2017-01-12 09:44:30,820 Heartbeat.py:78 - Building Heartbeat: {responseId = 1340, timestamp = 1484214270820, commandsInProgress = False, componentsMapped = True}
5部署管理Hadoop集群
5.1部署Hadoop集群
登陆界面http://{IP Address}:8080/,用户名密码为admin:admin。

接下来就可以启动安装向导,创建集群,安装服务。

关于XianDian-BigData 的软件包进行了分开打包。

XianDian-BigData-v2.0.2-BASE.iso软件包包含HDFS、MapReduce2、YARN、Tez、Hive、HBase、Pig、Sqoop、Zookeeper、Storm、Flume、Ambari Metrics、Kerberos、Mahou、Spark 等服务组件。

XianDian-BigData-v2.0.2-EXT.iso软件包包含了accumulo、atlas、falcon、kafka、knox、oozie、ranger、slider等服务组件。

这里如果需要这些服务组件,则需要添加一个yum配置文件,如下:
# vi HDP-EXTEND.repo
[HDP-2.4-EXTEND]
name=HDP-2.4-EXTEND
baseurl=http://master/HDP-2.4-EXTEND enabled=1
gpgcheck=0
这里要设置Grafana Admin的密码。

部署成功后,便可成功进入界面。

在主界面中,可以查看集群状态监控信息。

在HadoopMaster的终端执行jps命令,在打印结果中会看到master上运行的进程,这些进程表示主节点进程启动成功。

在HadoopSlave 的终端执行jps命令,也会看到相应的进程:
Slaver1:
5.2HDFS运维管理
5.2.1 HDFS命令手册
1.概述
切换到hdfs用户,可以通过“hadoop fs -”命令来查看HDFS文件系统的帮助命令,通过提示的命令来对文件系统进行管理。

命令如下:
$ hadoop fs -
执行结果如下:
所有的hadoop命令均由bin/hadoop脚本引发。

不指定参数运行hadoop脚本会打印所有命令的描述。

用法:hadoop [--config confdir] [COMMAND] [GENERIC_OPTIONS]
[COMMAND_OPTIONS]
Hadoop有一个选项解析框架用于解析一般的选项和运行类。

命令选项描述
--config confdir 覆盖缺省配置目录。

缺省是${HADOOP_HOME}/conf
GENERIC_OPTIONS 多个命令都支持的通用选项
COMMAND 命令选
项S
各种各样的命令和它们的选项会在下面提到。

这些命令被分为用户
命令管理命令两组。

2.权限管理
在Hadoop集群中,只有hdfs用户才有对HDFS文件系统的管理权限,当其它用户对文件系统进行操作,需要给其赋予相应的权限,这里为了方便操作,将所有用户的读写执行权限全部放开,命令如下:
# su hdfs
$ hadoop fs -chmod -R 777 /
3.常规选项
下面的选项被dfsadmin, fs, fsck和job支持。

应用程序要实现Tool来支持常规选项。

GENERIC_OPTION 描述
-conf <configuration file> 指定应用程序的配置文件。

-D <property=value> 为指定property指定值value。

-fs <local|namenode:port> 指定namenode。

-jt <local|jobtracker:port> 指定job tracker。

只适用于job。

-files <逗号分隔的文件列表> 指定要拷贝到map reduce集群的文件的逗号分隔的列
表。

只适用于job。

-libjars <逗号分隔的jar列表> 指定要包含到classpath中的jar文件的逗号分隔的列
表。

只适用于job。

-archives <逗号分隔的archive 列表> 指定要被解压到计算节点上的档案文件的逗号分割的列表。

只适用于job。

4.用户命令
hadoop集群用户的常用命令。

archive
创建一个hadoop档案文件。

参考Hadoop Archives.
用法:hadoop archive -archiveName NAME -p <parent path> <src>* <dest> 命令选项描述
-archiveName NAME 要创建的档案的名字。

-p <parent path> 父路径,格式与正则表达式一致。

src 父路径下面需要创建档案的文件名(可多个)
dest 保存档案文件的目标目录。

distcp
递归地拷贝文件或目录。

参考DistCp指南以获取等多信息。

用法:hadoop distcp <srcurl> <desturl>
命令选项描述
srcurl 源Url
desturl 目的Url
fs
用法:hadoop fs [GENERIC_OPTIONS] [COMMAND_OPTIONS]
运行一个常规的文件系统客户端。

fsck
运行HDFS文件系统检查工具。

参考Fsck了解更多。

用法:hadoop fsck [GENERIC_OPTIONS] <path> [-move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]]
命令选项描述
<path> 检查的起始目录。

-move 移动受损文件到/lost+found
-delete 删除受损文件。

-openforwrite 打印出写打开的文件。

-files 打印出正被检查的文件。

-blocks 打印出块信息报告。

-locations 打印出每个块的位置信息。

-racks 打印出data-node的网络拓扑结构。

jar
运行jar文件。

用户可以把他们的Map Reduce代码捆绑到jar文件中,使用这个命令执行。

用法:hadoop jar <jar> [mainClass] args...
job
用于和Map Reduce作业交互和命令。

用法:hadoop job [GENERIC_OPTIONS] [-submit <job-file>] | [-status <job-id>] | [-counter <job-id> <group-name> <counter-name>] | [-kill <job-id>] | [-events <job-id> <from-event-#> <#-of-events>] | [-history [all] <jobOutputDir>] | [-list [all]] | [-kill-task <task-id>] | [-fail-task <task-id>]
命令选项描述
-submit <job-file>提交作业
-status <job-id>打印map和reduce完成百分比和所有计数器。

-counter <job-id> <group-name> <c
打印计数器的值。

ounter-name>
-kill <job-id>杀死指定作业。

-events <job-id> <from-event-#> <#
打印给定范围内jobtracker接收到的事件细节。

-of-events>
-history [all] <jobOutputDir>-history <jobOutputDir> 打印作业的细节、失败及被杀
死原因的细节。

更多的关于一个作业的细节比如成功
的任务,做过的任务尝试等信息可以通过指定[all]选项
查看。

-list [all]-list all显示所有作业。

-list只显示将要完成的作业。

-kill-task <task-id>杀死任务。

被杀死的任务不会不利于失败尝试。

-fail-task <task-id>使任务失败。

被失败的任务会对失败尝试不利。

pipes
运行pipes作业。

用法:hadoop pipes [-conf <path>] [-jobconf <key=value>, <key=value>, ...] [-input <path>] [-output <path>] [-jar <jar file>] [-inputformat <class>] [-map <class>] [-partitioner <class>] [-reduce <class>] [-writer <class>] [-program <executable>] [-reduces <num>]
命令选项描述
-conf <path> 作业的配置
-jobconf <key=value>, <key=value>, ... 增加/覆盖作业的配置项
-input <path> 输入目录
-output <path> 输出目录
-jar <jar file> Jar文件名
-inputformat <class> InputFormat类
-map <class> Java Map类
-partitioner <class> Java Partitioner
-reduce <class> Java Reduce类
-writer <class> Java RecordWriter
-program <executable> 可执行程序的URI
-reduces <num> reduce个数
version
打印版本信息。

用法:hadoop version
CLASSNAME
hadoop脚本可用于调调用任何类。

用法:hadoop CLASSNAME
运行名字为CLASSNAME的类。

5.管理命令
hadoop集群管理员常用的命令。

balancer
运行集群平衡工具。

管理员可以简单的按Ctrl-C来停止平衡过程。

参考Rebalancer了解更多。

用法:hadoop balancer [-threshold <threshold>]
命令选项描述
-threshold <threshold> 磁盘容量的百分比。

这会覆盖缺省的阀值。

daemonlog
获取或设置每个守护进程的日志级别。

用法:hadoop daemonlog -getlevel <host:port> <classname>
用法:hadoop daemonlog -setlevel <host:port> <classname> <level>
datanode
运行一个HDFS的datanode。

用法:hadoop datanode [-rollback]
命令选项描述
-report 报告文件系统的基本信息和统计信息。

-safemode enter | leave | get | wait 安全模式维护命令。

安全模式是Namenode的一个状态,这种状态下,Namenode
1. 不接受对名字空间的更改(只读)
2. 不复制或删除块
Namenode会在启动时自动进入安全模式,当配置的块最小百分比数满足最小的副本数条件时,会自动离开安全模式。

安全模式可以手动进入,但是这样的话也必须手动关闭安全模式。

-refreshNodes 重新读取hosts和exclude文件,更新允许连到Namenode的或那
些需要退出或入编的Datanode的集合。

-finalizeUpgrade 终结HDFS的升级操作。

Datanode删除前一个版本的工作目录,
之后Namenode也这样做。

这个操作完结整个升级过程。

-upgradeProgress status | details | force 请求当前系统的升级状态,状态的细节,或者强制升级操作进行。

命令选项描述
-getlevel <host:port> <classnam e> 打印运行在<host:port>的守护进程的日志级别。

这个命令内部会连接http://<host:port>/logLevel?log=<name>
-setlevel <host:port> <classnam e> <level> 设置运行在<host:port>的守护进程的日志级别。

这个命令内部会连接http://<host:port>/logLevel?log=<name>
-metasave filename 保存Namenode的主要数据结构到hadoop.log.dir属性指定的目录
下的<filename>文件。

对于下面的每一项,<filename>中都会一行
内容与之对应
1. Namenode收到的Datanode的心跳信号
2. 等待被复制的块
3. 正在被复制的块
4. 等待被删除的块
-setQuota <quota> <dirname>...<dirname> 为每个目录<dirname>设定配额<quota>。

目录配额是一个长整型整数,强制限定了目录树下的名字个数。

命令会在这个目录上工作良好,以下情况会报错:
1. N不是一个正整数,或者
2. 用户不是管理员,或者
3. 这个目录不存在或是文件,或者
4. 目录会马上超出新设定的配额。

-clrQuota
<dirname>...<dirname> 为每一个目录<dirname>清除配额设定。

命令会在这个目录上工作良好,以下情况会报错:
1. 这个目录不存在或是文件,或者
2. 用户不是管理员。

如果目录原来没有配额不会报错。

-help [cmd] 显示给定命令的帮助信息,如果没有给定命令,则显示所有命令
的帮助信息。

secondarynamenode
运行HDFS的secondary namenode。

用法:hadoop secondarynamenode [-checkpoint [force]] | [-geteditsize]
命令选项描述
-checkpoint [force] 如果EditLog的大小>= fs.checkpoint.size,启动Secondary
namenode的检查点过程。

如果使用了-force,将不考虑
EditLog的大小。

-geteditsize 打印EditLog大小。

5.2.2 进程管理
1.查看当前系统中启动的进程
命令如下:
# jps
执行结果如下:
2.重启NameNode和DateNode进程
hadoop-daemon.sh脚本是启动和停止hadoop后台程序,“—config”参数指定启动程序时用到的配置文件目录。

命令如下:
# /usr/hdp/current/hadoop-client/sbin/hadoop-daemon.sh --config
/usr/hdp/current/hadoop-client/conf stop {namenode/datenode}
# /usr/hdp/current/hadoop-client/sbin/hadoop-daemon.sh --config
/usr/hdp/current/hadoop-client/conf start {namenode/datenode}
5.2.3 可靠性管理
Hadoop集群中的主机在某些情况下会出现宕机或者系统损坏的问题,一旦遇到这些问题,HDFS文件系统中的数据文件难免会产生损坏或者丢失,为了保证HDFS文件系统的可靠性,可以采取以下策略:
1.冗余副本策略
更改集群冗余副本的复制因子为5,从而避免某台节点主机损坏导致数据丢失的情况,这里我们有两种方式来设置复制因子。

第一种是通过WEB界面,进入到HDFS配置中修改Block replication的参数值。

第二种方式是在Shell命令行模式下,修改hdfs-site.xml配置文件,将“dfs.replication”的值设置为5,然后重启NameNode和DataNode进程。

# vi /etc/hadoop/2.3.6.0-3796/0/hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>5</value>
</property>
2.安全模式
当在进行系统维护或者集群维护时,不希望用户进行再去操作HDFS文件系统中文件,这时候需要手动将NameNode设置成安全模式的状态。

该操作需要HDFS管理用户来进行实现,即hdfs用户。

命令如下:
$ hadoop dfsadmin -safemode enter
$ hadoop dfsadmin -safemode get
执行结果如下:
Safe mode is ON
3.回收站
设置HDFS文件系统回收站中的文件彻底删除的时间间隔为7天。

进入到HDFS配置中修改“fs.trash.interval”的值为10080(分钟)。

注:当该值为0时,表示禁用回收站的功能。

4.快照管理
为HDFS文件系统中“/1daoyun”目录创建快照,首先需要设置该目录可进行快照功能,然后再进行创建快照。

创建完成后,创建一个恢复文件夹,通过cp命令可以恢复快照,如下:
5.3MapReduce
5.3.1 运行案例
进入/usr/hdp/2.4.3.0-227/hadoop-mapreduce/目录中,存在一个
hadoop-mapreduce-examples-2.7.1.2.4.3.0-227.jar 的案例JAR包,其所自带的案例如下:
这里,我们以运行一个圆周率的计算为例:
# cd /usr/hdp/2.4.3.0-227/hadoop-mapreduce/
# hadoop jar hadoop-mapreduce-examples-2.7.1.2.4.3.0-227.jar pi 5 5
6部署Hive数据仓库
6.1部署Hive
进入先电大数据平台主界面,点击左侧的动作按钮,添加Hive服务。

6.1Hive用户指南6.1.1 测试验证
启动hive客户端
# su hive
$ hive
$ logout
退出hive用户
6.1.2 hive 命令参数
usage: hive
-d,--define <key=value> Variable subsitution to apply to hive
commands. e.g. -d A=B or --define A=B --database <databasename> Specify the database to use -e <quoted-query-string> SQL from command line
-f <filename> SQL from files
-H,--help Print help information
--hiveconf <property=value> Use value for given property
--hivevar <key=value> Variable subsitution to apply to hive
commands. e.g. --hivevar A=B -i <filename> Initialization SQL file
-S,--silent Silent mode in interactive shell
-v,--verbose Verbose mode (echo executed SQL to the
console)
1.hive交互模式
hive> show tables; #查看所有表名
hive> show tables 'ad*' #查看以'ad'开头的表名
hive> set 命令#设置变量与查看变量;
hive> set -v #查看所有的变量
hive> set hive.stats.atomic #查看hive.stats.atomic变量
hive> set hive.stats.atomic=false #设置hive.stats.atomic变量
hive> dfs -ls #查看hadoop所有文件路径
hive> dfs -ls /user/hive/warehouse/ #查看hive所有文件
hive> dfs -ls /user/hive/warehouse/ptest #查看ptest文件
hive> source file <filepath> #在client里执行一个hive脚本文件
hive> quit #退出交互式shell
hive> exit #退出交互式shell
hive> reset #重置配置为默认值
hive> !ls #从Hive shell执行一个shell命令
2.操作及函数
查看函数:
hive> show functions;
正则查看函数名:
show functions 'xpath.*';
查看具体函数内容:
describe function xpath; | desc function xpath;
3.字段类型
Hive支持基本数据类型和复杂类型,基本数据类型主要有数值类型(INT、FLOAT、DOUBLE)、布尔型和字符串,复杂类型有三种:ARRAY、MAP 和STRUCT。

4.基本数据类型
TINYINT: 1个字节
SMALLINT: 2个字节
INT: 4个字节
BIGINT: 8个字节
BOOLEAN: TRUE/FALSE
FLOAT: 4个字节,单精度浮点型
DOUBLE: 8个字节,双精度浮点型STRING 字符串
5.复杂数据类型
ARRAY: 有序字段
MAP: 无序字段
STRUCT: 一组命名的字段
6.1.3 表类型
hive表大致分为普通表、外部表、分区表三种。

1.普通表
创建表
hive> create table tb_person(id int, name string);
创建表并创建分区字段ds
hive> create table tb_stu(id int, name string) partitioned by(ds string);
查看分区
hive> show partitions tb_stu;
显示所有表
hive> show tables;
按正则表达式显示表,
hive> show tables 'tb_*';
表添加一列
hive> alter table tb_person add columns (new_col int);
添加一列并增加列字段注释
hive> alter table tb_stu add columns (new_col2 int comment 'a comment');
更改表名
hive> alter table tb_stu rename to tb_stu;
删除表(hive只能删分区,不能删记录或列)
hive> drop table tb_stu;
对于托管表,drop 操作会把元数据和数据文件删除掉,对于外部表,只是删除元数据。

如果只要删除表中的数据,保留表名可以在HDFS 上删除数据文件:
hive> dfs -rmr /user/hive/warehouse/mutill1/*
将本地/home/hadoop/ziliao/stu.txt文件中的数据加载到表中,stu.txt文件数据如下:
1 zhangsan
2 lisi
3 wangwu
将文件中的数据加载到表中
hive> load data local inpath '/home/hadoop/ziliao/stu.txt' overwrite into table tb_person;
加载本地数据,同时给定分区信息
hive> load data local inpath '/home/hadoop/ziliao/stu.txt' overwrite into table tb_stu partition (ds='2008-08-15');
备注:如果导入的数据在HDFS 上,则不需要local 关键字。

托管表导入的数据文件可在数据仓库目录“user/hive/warehouse/<tablename>”中看到。

查看数据
hive> dfs -ls /user/hive/warehouse/tb_stu
hive> dfs -ls /user/hive/warehouse/tb_person
2.外部表
external关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(location),hive创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。

在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。

eg. 创建外部表:
hive> create external table tb_record(col1 string,col2 string) row format delimited fields terminated by '\t' location '/user/hadoop/input';
这样表tb_record的数据就是hdfs://user/hadoop/input/* 的数据了。

3.分区表
分区是表的部分列的集合,可以为频繁使用的数据建立分区,这样查找分区中的数据时就不需要扫描全表,这对于提高查找效率很有帮助。

创建分区:create table log(ts bigint,line string) partitioned by(name string);
插入分区:insert overwrite table log partition(name='xiapi') select id from userinfo where name='xiapi';
查看分区:show partitions log;
删除分区: alter table ptest drop partition (name='xiapi')
备注:通常情况下需要先预先创建好分区,然后才能使用该分区。

还有分区列的值要转
化为文件夹的存储路径,所以如果分区列的值中包含特殊值,如'%',':','/','#',它将会被使用%加上2 字节的ASCII 码进行转义。

6.1.4 sql操作及桶
1.创建表
首先建立三张测试表:
userinfo表中有两列,以tab键分割,分别存储用户的id和名字name;
classinfo表中有两列,以tab键分割,分别存储课程老师teacher和课程名classname;
choice表中有两列,以tab键分割,分别存储用户的userid和选课名称classname(类似中间表)。

创建测试表:
hive> create table userinfo(id int,name string) row format delimited fields terminated by '\t';
hive> create table classinfo(teacher string,classname string) row format delimited fields terminated by '\t';
hive> create table choice(userid int,classname string) row format delimited fields terminated by '\t';
注意:'\t'相当于一个tab键盘。

显示刚才创建的数据表:
hive> show tables;
2.导入数据
建表后,可以从本地文件系统或HDFS 中导入数据文件,导入数据样例如下:
userinfo.txt内容如下(数据之间用tab键隔开):
1 xiapi
2 xiaoxue
3 qingqing
classinfo.txt内容如下(数据之间用tab键隔开):
jack math
sam china
lucy english
choice.txt内容如下(数据之间用tab键隔开):
1 math
1 china
1 english
2 china
2 english
3 english
首先在本地“/home/hadoop/ziliao”下按照上面建立三个文件,并添加如上的内容信息。

3.按照下面导入数据。

hive> load data local inpath '/home/hadoop/ziliao/userinfo.txt' overwrite into table userinfo;
hive> load data local inpath '/home/hadoop/ziliao/classinfo.txt' overwrite into table classinfo;
hive> load data local inpath '/home/hadoop/ziliao/choice.txt' overwrite into table choice;
查询表数据
hive> select * from userinfo;
hive> select * from classinfo;
hive> select * from choice;
4.分区
创建分区
hive> create table ptest(userid int) partitioned by (name string) row format delimited fields terminated by '\t';
准备导入数据
xiapi.txt内容如下(数据之间用tab键隔开):
1
导入数据
hive> load data local inpath '/home/hadoop/ziliao/xiapi.txt' overwrite into table ptest partition (name='xiapi');
查看分区
hive> dfs -ls /user/hive/warehouse/ptest/name=xiapi;
查询分区
hive> select * from ptest where name='xiapi';
显示分区
hive> show partitions ptest;
对分区插入数据(每次都会覆盖掉原来的数据):
hive> insert overwrite table ptest partition(name='xiapi') select id from userinfo where name='xiapi';
删除分区
hive> alter table ptest drop partition (name='xiapi')
5.桶
可以把表或分区组织成桶,桶是按行分开组织特定字段,每个桶对应一个reduce 操作。

在建立桶之前,需要设置“hive.enforce.bucketing”属性为true,使Hive 能够识别桶。

在表中分桶的操作如下:
hive> set hive.enforce.bucketing=true;
hive> set hive.enforce.bucketing;
hive.enforce.bucketing=true;
hive> create table btest2(id int,name string) clustered by(id) into 3 buckets row format delimited fields terminated by '\t';
向桶中插入数据,这里按照用户id 分了三个桶,在插入数据时对应三个reduce 操作,输出三个文件。

hive> insert overwrite table btest2 select * from userinfo;
查看数据仓库下的桶目录,三个桶对应三个目录。

hive> dfs -ls /user/hive/warehouse/btest2;
Hive 使用对分桶所用的值进行hash,并用hash 结果除以桶的个数做取余运算的方式来分桶,保证了每个桶中都有数据,但每个桶中的数据条数不一定相等,如下所示。

hive>dfs -cat /user/hive/warehouse/btest2/*0_0;
hive>dfs -cat /user/hive/warehouse/btest2/*1_0;
hive>dfs -cat /user/hive/warehouse/btest2/*2_0;
分桶可以获得比分区更高的查询效率,同时分桶也便于对全部数据进行采样处理。

下面
是对桶取样的操作。

hive>select * from btest2 tablesample(bucket 1 out of 3 on id);
6.多表插入
多表插入指的是在同一条语句中,把读取的同一份元数据插入到不同的表中。

只需要扫描一遍元数据即可完成所有表的插入操作,效率很高。

多表操作示例如下。

hive> create table mutill as select id,name from userinfo; #有数据
hive> create table mutil2 like mutill; #无数据,只有表结构
hive> from userinfo insert overwrite table mutill
select id,name insert overwrite table mutil2 select count(distinct id),name group by name;
7.连接
连接是将两个表中在共同数据项上相互匹配的那些行合并起来,HiveQL 的连接分为内连接、左向外连接、右向外连接、全外连接和半连接 5 种。

a. 内连接(等值连接)
内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。

例如,检索userinfo和choice表中标识号相同的所有行。

hive> select userinfo.*,choice.* from userinfo join choice on(userinfo.id=erid);
b. 左连接
左连接的结果集包括“LEFT OUTER”子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。

如果左表的某行在右表中没有匹配行,则在相关联的结果集中右表的所有选择列均为空值。

hive> select userinfo.*,choice.* from userinfo left outer join choice on(userinfo.id=erid);
c. 右连接
右连接是左向外连接的反向连接,将返回右表的所有行。

如果右表的某行在左表中没有匹配行,则将为左表返回空值。

hive> select userinfo.*,choice.* from userinfo right outer join choice on(userinfo.id=erid);
d. 全连接
全连接返回左表和右表中的所有行。

当某行在另一表中没有匹配行时,则另一个表的选。

相关文档
最新文档