云服务器内容精选

  • 新建表/文件迁移作业 在 DataArts Studio 数据集成控制台,进入“集群管理”页面,在集群列表中找到所需要的集群,单击“作业管理”。 在“作业管理”页面,单击“表/文件迁移”,再单击“新建作业”。 图8 表/文件迁移 按照如下步骤完成作业参数的配置。 如图9所示,配置作业名称、源端作业参数和目的端作业参数,然后单击“下一步”。 作业名称:source-sdi 源端作业配置 源连接名称:obs-link 桶名:fast-demo 源目录或文件:/2017_Yellow_Taxi_Trip_Data.csv 文件格式: CS V格式 显示高级属性:单击“显示高级属性”,在“高级属性”中,系统提供了默认值,请根据实际业务数据的格式设置各项参数。 在本示例中,根据准备数据源中的样例数据格式,需注意以下参数的设置,其他参数经过一一确认均保留默认值即可。 字段分隔符:默认值为逗号,本示例保留默认值即可。 前N行为标题行:设置为“是”,本示例首行是标题行。 标题行数:配置为1。 编码类型:默认值为UTF-8,本示例保留默认值即可。 目的端作业配置 目的连接名称:mrs-link。 数据库名称:demo_sdi_db。 表名:sdi_taxi_trip_data。 导入前清空数据:是。 在本示例中,目的端作业参数“导入前清空数据”配置为“是”,表示每次作业运行都会先清空数据再导入。在实际业务中,请视情况而定,需谨慎设置,以免造成数据丢失。 图9 作业配置 在字段映射中,请参考以下说明配置字段映射以及日期字段的时间格式,如图10所示,配置完成后,单击“下一步”。 字段映射:在本示例中,由于数据迁移的目标表字段顺序和原始数据的字段顺序是一样的,因此这里不需要调整字段映射的顺序。 如果目标表字段顺序和原始数据不一致,请一一将源字段指向含义相同的目的字段。请将鼠标移至某一个字段的箭头起点,当光标显示为“+”的形状时,按住鼠标,将箭头指向相同含义的目的字段,然后松开鼠标。 时间格式:样例数据中第2、第3个字段为时间字段,数据格式如“02/14/2017 04:08:11 PM”,因此此处设置这两个字段的时间格式为“MM/dd/yyyy hh:mm:ss a”,可以在输入框中手动输入该格式。 时间格式请根据实际的数据格式进行设置,例如: “yyyy/MM/dd HH:mm:ss”代表将时间转换为24小时制,例如2019/08/18 15:35:45。 “yyyy/MM/dd hh:mm:ss a”代表将时间转换为12小时制,例如2019/06/27 03:24:21 PM。 图10 字段映射 根据需要配置任务的重试和定时执行。 图11 任务配置 单击“显示高级属性”,可配置“抽取并发数”以及“是否写入脏数据”,如图12所示。 抽取并发数:您可以根据业务量进行配置。数据源端如果是文件类型,当有多个文件时,增大并发数可以提升抽取速率。 是否写入脏数据:建议配置为“是”,然后参考图12配置相关参数。脏数据是指与目的端字段不匹的数据,该数据可以被记录到指定的OBS桶中。用户配置脏数据归档后,正常数据可以写入目的端,迁移作业不会因脏数据中断。在本示例中,“OBS桶”配置为在准备数据源中的桶fast-demo,您需要前往OBS控制台,在fast-demo桶中单击“新建文件夹”创建一个目录,例如error-data,然后再将图12中的“脏数据目录”配置为该目录。 图12 任务高级属性 单击“保存”完成作业的创建。 返回“表/文件迁移”页面后,可在作业列表中查看到新建的作业。 图13 迁移作业运行结果
  • 功能描述 您可以将Hive表用作时态表,通过时态联接来关联Hive表。有关时态联接的详细信息,请参阅 temporal join。 Flink支持processing-time temporal join Hive Table,processing-time temporal join始终会加入最新版本的时态表。Flink支持分区表和 Hive非分区表的临时连接,对于分区表,Flink 支持自动跟踪Hive表的最新分区。详情可参考:Apache Flink Hive Read & Write
  • 注意事项 Flink目前不支持与Hive表进行基于事件时间event-time的时间关联。 Temporal Join The Latest Partition 特性,仅在 Flink STREAMING 模式下支持。 创建Flink OpenSource SQL作业时,在作业编辑界面的“运行参数”处,“Flink版本”需要选择“1.15”,勾选“保存作业日志”并设置保存作业日志的OBS桶,方便后续查看作业日志。 数据类型的使用,请参考Format章节。 Hive 方言支持的 DDL 语句,Flink 1.15 当前仅支持使用Hive语法创建OBS表和使用hive语法的 DLI Lakehouse表。 使用Hive语法创建OBS表 defalut方言: with 属性中需要设置hive.is-external为true。 使用hive 方言:建表语句需要使用EXTERNAL关键字。 使用hive语法的DLI Lakehouse表 使用hive 方言:表属性中需要添加'is_lakehouse'='true'。 创建Flink OpenSource SQL作业时,在作业编辑界面配置开启checkpoint功能。
  • Hive介绍 Hive是一个开源的,建立在Hadoop上的 数据仓库 框架,提供类似SQL的HQL语言操作结构化数据,其基本原理是将HQL语言自动转换成MapReduce任务或Spark任务,从而完成对Hadoop集群中存储的海量数据进行查询和分析。 Hive主要特点如下: 通过HQL语言非常容易的完成数据提取、转换和加载(ETL)。 通过HQL完成海量结构化数据分析。 灵活的数据存储格式,支持JSON、CSV、TEXTFILE、RCFILE、ORCFILE、SEQUENCEFILE等存储格式,并支持自定义扩展。 多种客户端连接方式,支持JDBC接口。 Hive主要应用于海量数据的离线分析(如 日志分析 ,集群状态分析)、大规模的数据挖掘(用户行为分析,兴趣分区,区域展示)等场景下。 为保证Hive服务的高可用性、用户数据的安全及访问服务的可控制,在开源社区的Hive-3.1.0版本基础上,Hive新增如下特性: 数据文件加密机制。 开源社区的Hive特性,请参见https://cwiki.apache.org/confluence/display/hive/designdocs。
  • 常用概念 客户端 客户端直接面向用户,可通过Java API、Thrift API访问服务端进行Hive的相关操作。 HQL语言 Hive Query Language,类SQL语句。 HCatalog HCatalog是建立在Hive元数据之上的一个表信息管理层,吸收了Hive的DDL命令。为MapReduce提供读写接口,提供Hive命令行接口来进行数据定义和元数据查询。基于 MRS 的HCatalog功能,Hive、MapReduce开发人员能够共享元数据信息,避免中间转换和调整,能够提升数据处理的效率。 WebHCat WebHCat运行用户通过Rest API来执行Hive DDL,提交MapReduce任务,查询MapReduce任务执行结果等操作。
  • 操作步骤 客户端机器必须安装有Python,其版本不低于2.6.6,最高不能超过2.7.13。 在客户端机器的命令行终端输入python可查看Python版本号。如下显示Python版本为2.6.6。 Python 2.6.6 (r266:84292, Oct 12 2012, 14:23:48) [GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. 客户端机器必须安装有setuptools,其版本不低于5.0,最高不能超过36.8.0。 具体软件,请到对应的官方网站获取。 https://pypi.org/project/setuptools/#files 将下载的setuptools压缩文件复制到客户端机器上,解压后进入解压目录,在客户端机器的命令行终端执行python setup.py install。 如下内容表示安装setuptools的5.7版本成功。 Finished processing dependencies for setuptools==5.7 安装Python客户端到客户端机器。 参考获取MRS应用开发样例工程,获取样例代码解压目录中“src\hive-examples”目录下的样例工程文件夹“python-examples”。 进入“python-examples”文件夹。 在命令行终端执行python setup.py install。 输出以下关键内容表示安装Python客户端成功。 Finished processing dependencies for pyhs2==0.5.0 安装成功后,“python-examples/pyCLI_sec.py”为Python客户端样例代码,“python-examples/pyhs2/haconnection.py”为Python客户端接口API。 hive_python_client脚本提供了直接执行SQL的功能,例如:hive_python_client 'show tables'。 该功能只适用于常规简单的SQL,并且需要依赖ZooKeeper的客户端。
  • 操作步骤 编译JDBC样例程序: 在IDEA界面左下方单击“Terminal”进入终端,执行命令mvn clean package进行编译。 当输出“BUILD SUC CES S”,表示编译成功,如下图所示。编译成功后将会在样例工程的target下生成含有“-with-dependencies”字段的jar包。 运行JDBC样例程序: 使用Windows命令行形式运行JDBC样例工程: 在Windows上创建一个目录作为运行目录,如“D:\jdbc_example”,将1中生成的“target”目录下包名中含有“-with-dependencies”字段的Jar包放到该路径下,并在该目录下创建子目录“src/main/resources”,将已获取的“hive-jdbc-example\src\main\resources”目录下的所有文件复制到“resources”下。 执行以下命令运行Jar包: cd /d d:\jdbc_example java -jar hive-jdbc-example-1.0-SNAPSHOT-jar-with-dependencies.jar 以上Jar包名称仅供参考,具体名称以实际生成为主。 在命令行终端查看样例代码中的HQL所查询出的结果,运行成功结果会有如下信息: Create table success! _c0 0 Delete table success! 使用IntelliJ IDEA形式运行JDBC样例工程: 在IntelliJ IDEA的jdbc-examples工程的“JDBCExample”类上单击右键,在弹出菜单中选择“Run JDBCExample.main()”,如下图所示: 在IntelliJ IDEA输出窗口查看样例代码中的HQL所查询出的结果,会有如下信息: Create table success! _c0 0 Delete table success!
  • Hive WebHCat接口介绍 以下示例的IP为WebHCat的业务IP,端口为安装时设置的WebHCat HTTP端口。 除“:version”、“status”、“version”、“version/hive”、“version/hadoop”以外,其他API都需要添加user.name参数。 :version(GET) 描述 查询WebHCat支持的返回类型列表。 URL http://www.myserver.com/templeton/:version 参数 表1 :version接口请求参数说明 参数 描述 :version WebHCat版本号(当前必须是v1)。 返回结果 表2 :version接口返回参数说明 参数 描述 responseTypes WebHCat支持的返回类型列表。 例子 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1' status (GET) 描述 获取当前服务器的状态 URL http://www.myserver.com/templeton/v1/status 参数 无 返回结果 表3 status接口返回结果参数说明 参数 描述 status WebHCat连接正常,返回OK。 version 字符串,包含版本号,比如v1。 例子 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1/status' version (GET) 描述 获取服务器WebHCat的版本 URL http://www.myserver.com/templeton/v1/version 参数 无 返回结果 表4 version接口返回结果参数说明 参数 描述 supportedVersions 所有支持的版本。 version 当前服务器WebHCat的版本。 例子 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1/version' version/hive (GET) 描述 获取服务器Hive的版本 URL http://www.myserver.com/templeton/v1/version/hive 参数 无 返回结果 表5 version/hive接口返回结果说明 参数 描述 module hive version Hive的版本 例子 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1/version/hive' version/hadoop (GET) 描述 获取服务器Hadoop的版本 URL http://www.myserver.com/templeton/v1/version/hadoop 参数 无 返回结果 表6 version/hadoop接口返回结果说明 参数 描述 module hadoop version Hadoop的版本 例子 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1/version/hadoop' ddl (POST) 描述 执行DDL语句 URL http://www.myserver.com/templeton/v1/ddl 参数 表7 ddl接口请求参数说明 参数 描述 exec 需要执行的HCatalog DDL语句。 group 当DDL是创建表时,创建表使用的用户组。 permissions 当DDL是创建表时,创建表使用的权限,格式为rwxr-xr-x。 返回结果 表8 ddl接口返回结果说明 参数 描述 stdout HCatalog执行时的标准输出值,可能为空。 stderr HCatalog执行时的错误输出,可能为空。 exitcode HCatalog的返回值。 例子 curl -i -u : --negotiate -d exec="show tables" 'http://10.64.35.144:9111/templeton/v1/ddl?user.name=user1' ddl/database (GET) 描述 列出所有的数据库 URL http://www.myserver.com/templeton/v1/ddl/database 参数 表9 ddl/database接口请求参数说明 参数 描述 like 用来匹配数据库名的正则表达式。 返回结果 表10 ddl/database接口返回结果说明 参数 描述 databases 数据库名 例子 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1/ddl/database?user.name=user1' ddl/database/:db (GET) 描述 获取指定数据库的详细信息 URL http://www.myserver.com/templeton/v1/ddl/database/:db 参数 参数 描述 :db 数据库名 返回结果 参数 描述 location 数据库位置 comment 数据库的备注,如果没有备注则不存在 database 数据库名 owner 数据库的所有者 owertype 数据库所有者的类型 例子 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1/ddl/database/default?user.name=user1' ddl/database/:db (PUT) 描述 创建数据库 URL http://www.myserver.com/templeton/v1/ddl/database/:db 参数 参数 描述 :db 数据库名 group 创建数据库时使用的用户组 permission 创建数据库时使用的权限 location 数据库的位置 comment 数据库的备注,比如描述 properties 数据库属性 返回结果 参数 描述 database 新创建的数据库的名字 例子 curl -i -u : --negotiate -X PUT -HContent-type:application/json -d '{"location": "/tmp/a", "comment": "my db", "properties": {"a": "b"}}' 'http://10.64.35.144:9111/templeton/v1/ddl/database/db2?user.name=user1' ddl/database/:db (DELETE) 描述 删除数据库 URL http://www.myserver.com/templeton/v1/ddl/database/:db 参数 参数 描述 :db 数据库名 ifExists 如果指定数据库不存在,Hive会返回错误,除非设置了ifExists为true。 option 将参数设置成cascade或者restrict。如果选择cascade,将清除一切,包括数据和定义。如果选择restrict,表格内容为空,模式也将不存在。 返回结果 参数 描述 database 删除的数据库名字 例子 curl -i -u : --negotiate -X DELETE 'http://10.64.35.144:9111/templeton/v1/ddl/database/db3?ifExists=true&user.name=user1' ddl/database/:db/table (GET) 描述 列出数据库下的所有表 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table 参数 参数 描述 :db 数据库名 like 用来匹配表名的正则表达式 返回结果 参数 描述 database 数据库名字 tables 数据库下表名列表 例子 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1/ddl/database/default/table?user.name=user1' ddl/database/:db/table/:table (GET) 描述 获取表的详细信息 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table 参数 参数 描述 :db 数据库名 :table 表名 format 格式:format=extended,参考额外信息(“table extended like”)。 返回结果 参数 描述 columns 列名和类型 database 数据库名 table 表名 partitioned 是否分区表,只有extended下才会显示。 location 表的位置,只有extended下才会显示。 outputformat 输出形式,只有extended下才会显示。 inputformat 输入形式,只有extended下才会显示。 owner 表的属主,只有extended下才会显示。 partitionColumns 分区的列,只有extended下才会显示。 例子 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1?format=extended&user.name=user1' ddl/database/:db/table/:table (PUT) 描述 创建表 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table 参数 参数 描述 :db 数据库名 :table 新建表名 group 创建表时使用的用户组 permissions 创建表时使用的权限 external 指定位置,hive不使用表的默认位置。 ifNotExists 设置为true,当表存在时不会报错。 comment 备注 columns 列描述,包括列名,类型和可选备注。 partitionedBy 分区列描述,用于划分表格。参数columns列出了列名,类型和可选备注。 clusteredBy 分桶列描述,参数包括columnNames、sortedBy、和numberOfBuckets。参数columnNames包括columnName和排列顺序(ASC为升序,DESC为降序)。 format 存储格式,参数包括rowFormat,storedAs,和storedBy。 location HDFS路径 tableProperties 表属性和属性值(name-value对) 返回结果 参数 描述 database 数据库名 table 表名 例子 curl -i -u : --negotiate -X PUT -HContent-type:application/json -d '{"columns": [{"name": "id", "type": "int"}, {"name": "name","type": "string"}], "comment": "hello","format": {"storedAs": "orc"} }' 'http://10.64.35.144:9111/templeton/v1/ddl/database/db3/table/tbl1?user.name=user1' ddl/database/:db/table/:table (POST) 描述 重命名表 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table 参数 参数 描述 :db 数据库名 :table 已有表名 rename 新表表名 返回结果 参数 描述 database 数据库名 table 新表表名 例子 curl -i -u : --negotiate -d rename=table1 'http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/tbl1?user.name=user1' ddl/database/:db/table/:table (DELETE) 描述 删除表 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table 参数 参数 描述 :db 数据库名 :table 表名 ifExists 当设置为true时,不报错。 返回结果 参数 描述 database 数据库名 table 表名 例子 curl -i -u : --negotiate -X DELETE 'http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/table2?ifExists=true&user.name=user1' ddl/database/:db/table/:existingtable/like/:newtable (PUT) 描述 创建一张和已经存在的表一样的表 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:existingtable/like/:newtable 参数 参数 描述 :db 数据库名 :existingtable 已有表名 :newtable 新表名 group 创建表时使用的用户组。 permissions 创建表时使用的权限。 external 指定位置,hive不使用表的默认位置。 ifNotExists 当设置为true时,如果表已经存在,Hive不报错。 location HDFS路径 返回结果 参数 描述 database 数据库名 table 表名 例子 curl -i -u : --negotiate -X PUT -HContent-type:application/json -d '{"ifNotExists": "true"}' 'http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/like/tt1?user.name=user1' ddl/database/:db/table/:table/partition(GET) 描述 列出表的分区信息 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/partition 参数 参数 描述 :db 数据库名 :table 表名 返回结果 参数 描述 database 数据库名 table 表名 partitions 分区属性值和分区名 例子 curl -i -u : --negotiate http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/x1/partition?user.name=user1 ddl/database/:db/table/:table/partition/:partition(GET) 描述 列出表的某个具体分区的信息 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/partition/:partition 参数 参数 描述 :db 数据库名 :table 表名 :partition 分区名,解码http引用时,需当心。比如country=%27algeria%27。 返回结果 参数 描述 database 数据库名 table 表名 partition 分区名 partitioned 如果设置为true,为分区表 location 表的存储路径 outputFormat 输出格式 columns 列名,类型,备注 owner 所有者 partitionColumns 分区的列 inputFormat 输入格式 totalNumberFiles 分区下文件个数 totalFileSize 分区下文件总大小 maxFileSize 最大文件大小 minFileSize 最小文件大小 lastAccessTime 最后访问时间 lastUpdateTime 最后更新时间 例子 curl -i -u : --negotiate http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/x1/partition/dt=1?user.name=user1 ddl/database/:db/table/:table/partition/:partition(PUT) 描述 增加一个表分区 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/partition/:partition 参数 参数 描述 :db 数据库名。 :table 表名。 group 创建新分区时使用的用户组。 permissions 创建新分区时用户的权限。 location 新分区的存放位置。 ifNotExists 如果设置为true, 当分区已经存在,系统报错。 返回结果 参数 描述 database 数据库名 table 表名 partitions 分区名 例子 curl -i -u : --negotiate -X PUT -HContent-type:application/json -d '{}' http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/x1/partition/dt=10?user.name=user1 ddl/database/:db/table/:table/partition/:partition(DELETE) 描述 删除一个表分区 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/partition/:partition 参数 参数 描述 :db 数据库名。 :table 表名。 group 删除新分区时使用的用户组。 permissions 删除新分区时用户的权限, 格式为rwxrw-r-x。 ifExists 如果指定分区不存在,Hive报错。参数值设置为true除外。 返回结果 参数 描述 database 数据库名 table 表名 partitions 分区名 例子 curl -i -u : --negotiate -X DELETE -HContent-type:application/json -d '{}' http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/x1/partition/dt=10?user.name=user1 ddl/database/:db/table/:table/column(GET) 描述 获取表的column列表 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/column 参数 参数 描述 :db 数据库名 :table 表名 返回结果 参数 描述 database 数据库名 table 表名 columns 列名字和类型 例子 curl -i -u : --negotiate http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/column?user.name=user1 ddl/database/:db/table/:table/column/:column(GET) 描述 获取表的某个具体的column的信息 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/column/:column 参数 参数 描述 :db 数据库名 :table 表名 :column 列名 返回结果 参数 描述 database 数据库名 table 表名 column 列名字和类型 例子 curl -i -u : --negotiate http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/column/id?user.name=user1 ddl/database/:db/table/:table/column/:column(PUT) 描述 增加表的一列 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/column/:column 参数 参数 描述 :db 数据库名 :table 表名 :column 列名 type 列类型,比如string和int comment 列备注,比如描述 返回结果 参数 描述 database 数据库名 table 表名 column 列名 例子 curl -i -u : --negotiate -X PUT -HContent-type:application/json -d '{"type": "string", "comment": "new column"}' http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/column/name?user.name=user1 ddl/database/:db/table/:table/property(GET) 描述 获取表的property URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/property 参数 参数 描述 :db 数据库名 :table 表名 返回结果 参数 描述 database 数据库名 table 表名 properties 属性列表 例子 curl -i -u : --negotiate http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/property?user.name=user1 ddl/database/:db/table/:table/property/:property(GET) 描述 获取表的某个具体的property的值 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/property/:property 参数 参数 描述 :db 数据库名 :table 表名 :property 属性名 返回结果 参数 描述 database 数据库名 table 表名 property 属性列表 例子 curl -i -u : --negotiate http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/property/last_modified_by?user.name=user1 ddl/database/:db/table/:table/property/:property(PUT) 描述 增加表的property的值 URL http://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/property/:property 参数 参数 描述 :db 数据库名 :table 表名 :property 属性名 value 属性值 返回结果 参数 描述 database 数据库名 table 表名 property 属性名 例子 curl -i -u : --negotiate -X PUT -HContent-type:application/json -d '{"value": "my value"}' http://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/property/mykey?user.name=user1 mapreduce/jar(POST) 描述 执行MR任务,在执行之前,需要将MR的jar包上传到HDFS中 URL http://www.myserver.com/templeton/v1/mapreduce/jar 参数 参数 描述 jar 需要执行的MR的jar包。 class 需要执行的MR的分类。 libjars 需要加入的classpath的jar包名,以逗号分隔。 files 需要复制到集群的文件名,以逗号分隔。 arg Main类接受的输入参数。 define 设置hadoop的配置,格式为:define=NAME=VALUE。 statusdir WebHCat会将执行的MR任务的状态写入到statusdir中。如果设置了这个值,那么需要用户手动进行删除。 enablelog 如果statusdir设置,enablelog设置为true,收集Hadoop任务配置和日志到$statusdir/logs。此后,成功和失败的尝试,都将记录进日志。$statusdir/logs下,子目录布局为: logs/$job_id (directory for $job_id) logs/$job_id/job.xml.html logs/$job_id/$attempt_id (directory for $attempt_id) logs/$job_id/$attempt_id/stderr logs/$job_id/$attempt_id/stdout logs/$job_id/$attempt_id/syslog 仅支持Hadoop 1.X。 callback 在MR任务执行完的回调地址,使用$jobId,将任务ID嵌入回调地址。在回调地址中,任务ID替换该$jobId。 返回结果 参数 描述 id 任务ID,类似“job_201110132141_0001” 例子 curl -i -u : --negotiate -d jar="/tmp/word.count-0.0.1-SNAPSHOT.jar" -d class=com.huawei.word.count.WD -d statusdir="/output" "http://10.64.35.144:9111/templeton/v1/mapreduce/jar?user.name=user1" mapreduce/streaming(POST) 描述 以Streaming方式提交MR任务 URL http://www.myserver.com/templeton/v1/mapreduce/streaming 参数 参数 描述 input Hadoop中input的路径。 output 存储output的路径。如没有规定,WebHCat将output储存在使用队列资源可以发现到的路径。 mapper mapper程序位置。 reducer reducer程序位置。 files HDFS文件添加到分布式缓存中。 arg 设置argument。 define 设置hadoop的配置变量,格式:define=NAME=VALUE cmdenv 设置环境变量,格式:cmdenv=NAME=VALUE statusdir WebHCat会将执行的MR任务的状态写入到statusdir中。如果设置了这个值,那么需要用户手动进行删除。 enablelog 如果statusdir设置,enablelog设置为true,收集Hadoop任务配置和日志到$statusdir/logs。此后,成功和失败的尝试,都将记录进日志。$statusdir/logs下,子目录布局为: logs/$job_id (directory for $job_id) logs/$job_id/job.xml.html logs/$job_id/$attempt_id (directory for $attempt_id) logs/$job_id/$attempt_id/stderr logs/$job_id/$attempt_id/stdout logs/$job_id/$attempt_id/syslog 仅支持Hadoop 1.X。 callback 在MR任务执行完的回调地址,使用$jobId,将任务ID嵌入回调地址。在回调地址中,任务ID将替换该$jobId。 返回结果 参数 描述 id 任务ID,类似job_201110132141_0001 例子 curl -i -u : --negotiate -d input=/input -d output=/oooo -d mapper=/bin/cat -d reducer="/usr/bin/wc -w" -d statusdir="/output" 'http://10.64.35.144:9111/templeton/v1/mapreduce/streaming?user.name=user1' 本接口的使用需要前置条件,请参阅“开发规范”中的Hive规则。 /hive(POST) 描述 执行Hive命令 URL http://www.myserver.com/templeton/v1/hive 参数 参数 描述 execute hive命令,包含整个和短的Hive命令。 file 包含hive命令的HDFS文件。 files 需要复制到集群的文件名,以逗号分隔。 arg 设置argument。 define 设置Hive的配置,格式:define=key=value,如果使用多实例,需要配置实例的scratch dir,如WebHCat实例使用define=hive.exec.scratchdir=/tmp/hive-scratch,WebHCat1实例使用define=hive.exec.scratchdir=/tmp/hive1-scratch,以此类推。 statusdir WebHCat会将执行的MR任务的状态写入到statusdir中。如果设置了这个值,那么需要用户手动进行删除。 enablelog 如果statusdir设置,enablelog设置为true,收集Hadoop任务配置和日志到$statusdir/logs。此后,成功和失败的尝试,都将记录进日志。$statusdir/logs下,子目录布局为: logs/$job_id (directory for $job_id) logs/$job_id/job.xml.html logs/$job_id/$attempt_id (directory for $attempt_id) logs/$job_id/$attempt_id/stderr logs/$job_id/$attempt_id/stdout logs/$job_id/$attempt_id/syslog callback 在MR任务执行完的回调地址,使用$jobId,将任务ID嵌入回调地址。在回调地址中,任务ID将替换该$jobId。 返回结果 参数 描述 id 任务ID,类似job_201110132141_0001 例子 curl -i -u : --negotiate -d execute="select count(*) from t1" -d statusdir="/output" -d define=hive.exec.scratchdir=/tmp/hive-scratch "http://10.64.35.144:9111/templeton/v1/hive?user.name=user1" jobs(GET) 描述 获取所有的job id URL http://www.myserver.com/templeton/v1/jobs 参数 参数 描述 fields 如果设置成*,那么会返回每个job的详细信息。如果没设置,只返回任务ID。现在只能设置成*,如设置成其他值,将出现异常。 jobid 如果设置了jobid,那么只有字典顺序比jobid大的job才会返回。比如,如果jobid为"job_201312091733_0001",只有大于该值的job才能返回。返回的job的个数,取决于numrecords。 numrecords 如果设置了numrecords和jobid,jobid列表按字典顺序排列,待jobid返回后,可以得到numrecords的最大值。如果jobid没有设置, 而numrecords设置了参数值,jobid按字典顺序排列后,可以得到numrecords的最大值。相反,如果numrecords没有设置,而jobid设置了参数值,所有大于jobid的job都将返回。 showall 如果设置为true,用户可以获取所有job,如果设置为false,则只获取当前用户提交的job。默认为false。 返回结果 参数 描述 id Job id detail 如果showall为true,那么显示detail信息,否则为null。 例子 curl -i -u : --negotiate "http://10.64.35.144:9111/templeton/v1/jobs?user.name=user1" jobs/:jobid(GET) 描述 获取指定job的信息 URL http://www.myserver.com/templeton/v1/jobs/:jobid 参数 参数 描述 jobid Job创建后的Jobid 返回结果 参数 描述 status 包含job状态信息的json对象。 profile 包含job状态的json对象。WebHCat解析JobProfile对象中的信息,该对象因Hadoop版本不同而不同。 id Job的id。 percentComplete 完成百分比,比如75% complete,如果完成后则为null。 user 创建job的用户。 callback 回调URL(如果有)。 userargs 用户提交job时的argument参数和参数值。 exitValue job退出值。 例子 curl -i -u : --negotiate "http://10.64.35.144:9111/templeton/v1/jobs/job_1440386556001_0255?user.name=user1" jobs/:jobid(DELETE) 描述 kill任务 URL http://www.myserver.com/templeton/v1/jobs/:jobid 参数 参数 描述 :jobid 删除的Job的ID 返回结果 参数 描述 user 提交Job的用户。 status 包含Job状态信息的JSON对象。 profile 包含Job信息的JSON对象。WebHCat解析JobProfile对象中的信息,该对象因Hadoop版本不同而不同。 id Job的ID。 callback 回调的URL(如果有)。 例子 curl -i -u : --negotiate -X DELETE "http://10.64.35.143:9111/templeton/v1/jobs/job_1440386556001_0265?user.name=user1" 父主题: Hive对外接口介绍
  • Hive应用开发流程介绍 开发流程中各阶段的说明如图1和表1所示。 图1 Hive应用程序开发流程 表1 Hive应用开发的流程说明 阶段 说明 参考文档 了解基本概念 在开始开发应用前,需要了解Hive的基本概念。 常用概念 准备开发和运行环境 Hive的应用程序支持使用Java、Python两种语言进行开发。推荐使用IntelliJ IDEA工具,请根据指导完成不同语言的开发环境配置。 准备Hive应用开发环境 根据场景开发工程 提供了Java、Python两种不同语言的样例工程,还提供了从建表、数据加载到数据查询的样例工程。 开发Hive应用 运行程序及结果查看 指导用户将开发好的程序编译提交运行并查看结果。 调测Hive应用 父主题: Hive开发指南(安全模式)
  • 准备开发环境 Hive组件可以使用JDBC/Python/Python3接口进行应用开发,要准备的开发和运行环境分别如下表所示。 表1 JDBC开发环境 准备项 说明 操作系统 开发环境:Windows系统,支持Windows7以上版本。 运行环境:Windows系统或Linux系统。 如需在本地调测程序,运行环境需要和集群业务平面网络互通。 安装JDK 开发和运行环境的基本配置。版本要求如下: 服务端和客户端仅支持自带的OpenJDK,版本为1.8.0_272,不允许替换。 对于客户应用需引用SDK类的Jar包运行在客户应用进程中的。 X86客户端:Oracle JDK:支持1.8版本;IBM JDK:支持1.8.5.11版本。 TaiShan客户端:OpenJDK:支持1.8.0_272版本。 说明: 基于安全考虑,服务端只支持TLS V1.2及以上的加密协议。 IBM JDK默认只支持TLS V1.0,若使用IBM JDK,请配置启动参数“com.ibm.jsse2.overrideDefaultTLS”为“true”,设置后可以同时支持TLS V1.0/V1.1/V1.2,详情参见https://www.ibm.com/support/knowledgecenter/zh/SSYKE2_8.0.0/com.ibm.java.security.component.80.doc/security-component/jsse2Docs/matchsslcontext_tls.html#matchsslcontext_tls。 安装和配置IntelliJ IDEA 用于开发Hive应用程序的工具。版本要求如下: JDK使用1.8版本,IntelliJ IDEA使用2019.1或其他兼容版本。 说明: 若使用IBM JDK,请确保IntelliJ IDEA中的JDK配置为IBM JDK。 若使用Oracle JDK,请确保IntelliJ IDEA中的JDK配置为Oracle JDK。 若使用Open JDK,请确保IntelliJ IDEA中的JDK配置为Open JDK。 安装Maven 开发环境的基本配置。用于项目管理,贯穿软件开发生命周期。 7-zip 用于解压“*.zip”和“*.rar”文件,支持7-Zip 16.04版本。 表2 Python开发环境 准备项 说明 操作系统 开发环境和运行环境:Linux系统。 安装Python 用于开发Hive应用程序的工具,版本要求不低于2.6.6,最高不超过2.7.13。 安装setuptools Python开发环境的基本配置,版本要求5.0以上。 Python开发工具的详细安装配置可参见配置Hive Python样例工程。 表3 Python3开发环境 准备项 说明 操作系统 开发环境和运行环境:Linux系统。 安装Python3 用于开发Hive应用程序的工具,版本要求不低于3.6,最高不超过3.8。 安装setuptools Python3开发环境的基本配置,版本要求为47.3.1。 Python3开发工具的详细安装配置可参见配置Hive Python3样例工程。
  • 功能介绍 本小节介绍了如何使用HQL创建内部表、外部表的基本操作。创建表主要有以下三种方式: 自定义表结构,以关键字EXTERNAL区分创建内部表和外部表。 内部表,如果对数据的处理都由Hive完成,则应该使用内部表。在删除内部表时,元数据和数据一起被删除。 外部表,如果数据要被多种工具(如Pig等)共同处理,则应该使用外部表,可避免对该数据的误操作。删除外部表时,只删除掉元数据。 根据已有表创建新表,使用CREATE LIKE句式,完全复制原有的表结构,包括表的存储格式。 根据查询结果创建新表,使用CREATE AS SELECT句式。 这种方式比较灵活,可以在复制原表表结构的同时指定要复制哪些字段,不包括表的存储格式。 在启用了安全服务的集群中执行如下操作,需要在数据库中CREATE权限,使用CREATE AS SELECT句式创建表,需要对SELECT查询的表具有SELECT权限。 目前表名长度最长为128,字段名长度最长为128,字段注解长度最长为4000,WITH SERDEPROPERTIES 中key长度最长为256,value长度最长为4000。以上的长度均表示字节长度。
  • 操作场景 因为MRS操作系统用户组个数限制,导致Hive不能创建超过32个角色,开启此功能后,Hive将支持创建超过32个角色。 开启本功能并对表库等授权后,对表库目录具有相同权限的角色将会用“|”合并。查询ACL权限时,将显示合并后的结果,与开启该功能前的显示会有区别。此操作不可逆,请充分考虑实际应用场景,再决定是否做出调整。 如果当前组件使用了Ranger进行权限控制,需基于Ranger配置相关策略进行权限管理,具体操作可参考添加Hive的Ranger访问权限策略。 开启此功能后,包括owner在内默认最大可支持512个角色,由MetaStore自定义参数“hive.supports.roles.max”控制,可根据实际应用场景进行修改。
  • 操作步骤 以Hive客户端安装用户登录安装客户端的节点。 执行以下命令,切换到客户端安装目录,配置环境变量并认证用户。 cd 客户端安装目录 source bigdata_env kinit Hive业务用户(如果集群未开启Kerberos认证,请跳过该操作) 执行以下命令登录Hive客户端。 beeline 创建表时指定inputFormat和outputFormat: CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment], ...)] [ROW FORMAT row_format] STORED AS inputformat 'org.apache.hadoop.hive.contrib.fileformat.SpecifiedDelimiterInputFormat' outputformat 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'; 查询之前指定分隔符配置项: set hive.textinput.record.delimiter='!@!'; Hive会以‘!@!’为行分隔符查询数据。
  • 操作场景 通常情况下,Hive以文本文件存储的表会以回车作为其行分隔符,即在查询过程中,以回车符作为一行表数据的结束符。但某些数据文件并不是以回车分隔的规则文本格式,而是以某些特殊符号分隔其规则文本。 MRS Hive支持指定不同的字符或字符组合作为Hive文本数据的行分隔符,即在创建表的时候,指定inputformat为SpecifiedDelimiterInputFormat,然后在每次查询前,都设置如下参数来指定分隔符,就可以以指定的分隔符查询表数据。 set hive.textinput.record.delimiter=''; 当前版本的Hue组件,不支持导入文件到Hive表时设置多个分隔符。
  • Hive权限模型 使用Hive组件,必须对Hive数据库和表(含外表和视图)拥有相应的权限。在MRS中,完整的Hive权限模型由Hive元数据权限与HDFS文件权限组成。使用数据库或表时所需要的各种权限都是Hive权限模型中的一种。 Hive元数据权限。 与传统关系型数据库类似,MRS的Hive数据库包含“建表”和“查询”权限,Hive表和列包含“查询”、“插入”和“删除”权限。Hive中还包含拥有者权限“OWNERSHIP”和“Hive管理员权限”。 Hive数据文件权限,即HDFS文件权限。 Hive的数据库、表对应的文件保存在HDFS中。默认创建的数据库或表保存在HDFS目录“/user/hive/warehouse”。系统自动以数据库名称和数据库中表的名称创建子目录。访问数据库或者表,需要在HDFS中拥有对应文件的权限,包含“读”、“写”和“执行”权限。 用户对Hive数据库或表执行不同操作时,需要关联不同的元数据权限与HDFS文件权限。例如,对Hive数据表执行查询操作,需要关联元数据权限“查询”,以及HDFS文件权限“读”和“写”。 使用Manager界面图形化的角色管理功能来管理Hive数据库和表的权限,只需要设置元数据权限,系统会自动关联HDFS文件权限,减少界面操作,提高效率。