云服务器内容精选

  • 创建ZSTD压缩格式的Hive表 以客户端安装用户,登录安装客户端的节点。安装客户端具体操作请参见安装客户端。 执行以下命令,切换到客户端安装目录。 cd /opt/hadoopclient 执行以下命令配置环境变量。 source bigdata_env 执行以下命令认证用户,当前用户需具有创建Hive表的权限,未启用Kerberos认证的用户请跳过此步骤: kinit 组件业务用户 执行以下命令创建ZSTD压缩格式的表,ZSTD压缩格式的表和其他普通压缩表的SQL操作没有区别,可支持正常的增删查及聚合类SQL操作。 ORC存储格式建表时需指定TBLPROPERTIES("orc.compress"="zstd"): create table tab_1(...) stored as orc TBLPROPERTIES("orc.compress"="zstd"); Parquet存储格式建表需指定TBLPROPERTIES("parquet.compression"="zstd"): create table tab_2(...) stored as parquet TBLPROPERTIES("parquet.compression"="zstd"); 若需要为创建的Parquet格式的表设置默认的压缩格式为ZSTD,可在Hive Beeline客户端执行以下命令: set hive.parquet.default.compression.codec=zstd; 该命令只在当前会话中生效。 其他格式或通用格式建表可通过设置参数指定compress.codec为“org.apache.hadoop.io.compress.ZStandardCode”。 设置“hive.exec.compress.output”参数值为“true”: set hive.exec.compress.output=true; 设置“mapreduce.map.output.compress”参数值为“true”: set mapreduce.map.output.compress=true; 设置compress.codec为“org.apache.hadoop.io.compress.ZStandardCode”: set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.ZStandardCodec; 设置“mapreduce.output.fileoutputformat.compress”参数值为“true”: set mapreduce.output.fileoutputformat.compress=true; 设置compress.codec为“org.apache.hadoop.io.compress.ZStandardCode”: set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.ZStandardCodec; 设置“hive.exec.compress.intermediate”为“true”: set hive.exec.compress.intermediate=true; 创建Hive表: create table tab_3(...) stored as textfile; 执行以下命令查看表信息: desc formatted test; 回显结果中会显示压缩格式信息,例如图1表示ORC格式的Hive表的的压缩方式为“zstd”。 图1 查看表信息
  • Hive UDF介绍 表1 Hive UDF介绍 UDF分类 说明 UDF(User-Defined Functions) 自定义标量函数,其输入与输出是一对一的关系,即读入一行数据,写出一条输出值。 UDAF(User-Defined Aggregating Functions) 自定义聚合函数,其输入与输出是多对一的关系,即将多条输入记录聚合成一条输出值,可以与SQL中的Group By语句联合使用。 UDTF(User-Defined Table-Generating Functions) 自定义表值函数,用来解决一次函数调用输出多行数据场景的,也是唯一一个可以返回多个字段的自定义函数。 按使用方法,UDF有如下分类: 临时函数,只能在当前会话使用,重启会话后需要重新创建。 永久函数,可以在多个会话中使用,不需要每次创建。
  • 使用Hive客户端 以客户端安装用户,登录安装客户端的节点。 执行以下命令,切换到客户端安装目录。 cd /opt/hadoopclient 执行以下命令配置环境变量。 source bigdata_env 根据集群认证模式,完成Hive客户端登录。 如果当前集群开启了Kerberos认证,则执行以下命令,完成用户认证并登录Hive客户端,用户需具有创建Hive表的权限,例如,该用户属于“hive”、“hadoop”用户组,主组为“hive”。创建用户具体操作请参见创建Hive用户并绑定角色。 认证用户: kinit 组件业务用户 登录Hive客户端: beeline 如果当前集群未开启Kerberos认证,则执行以下命令,登录Hive客户端,如果不指定组件业务用户,则会以当前操作系统用户登录。 beeline -n组件业务用户 执行以下命令创建表,例如“test”: create table test(id int,name string); 执行以下命令向表中插入数据: insert into table test(id,name) values("11","A"); 执行以下命令查询表数据: select * from test; 执行以下命令删除Hive表: drop table test; 执行以下命令退出Hive客户端。 !q 退出beeline客户端时请使用!q命令,不要使用“Ctrl + C”。否则会导致连接生成的临时文件无法删除,长期会累积产生大量的垃圾文件。 在使用beeline客户端时,如果需要在一行中输入多条语句,语句之间以“;”分隔,需要将“entireLineAsCommand”的值设置为“false”。 设置方法:如果未启动beeline,则执行beeline --entireLineAsCommand=false命令;如果已启动beeline,则在beeline中执行!set entireLineAsCommand false命令。 设置完成后,如果语句中含有不是表示语句结束的“;”,需要进行转义,例如select concat_ws('\;', collect_set(col1)) from tbl。
  • 操作场景 Hive支持对表的某一列或者多列进行加密;在创建Hive表时,可以指定要加密的列和加密算法。当使用insert语句向表中插入数据时,即可实现将对应列的 数据加密 。只支持对存储在HDFS上的TextFile和SequenceFile文件格式的Hive表进行列加密,不支持视图以及Hive over HBase场景。 Hive列加密机制目前支持的加密算法有两种,在建表时指定: AES:对应加密类名称为“org.apache.hadoop.hive.serde2.AESRewriter”。 SM4:也称为 SMS 4,对应加密类名称为“org.apache.hadoop.hive.serde2.SMS4Rewriter”。 将原始数据从普通Hive表导入到Hive列加密表后,在不影响其他业务情况下,建议删除普通Hive表上原始数据,因为保留一张未加密的表存在安全风险。
  • Hive SQL扩展语法说明 Hive SQL支持Hive-3.1.0版本中的所有特性,详情请参见https://cwiki.apache.org/confluence/display/hive/languagemanual。 MRS 系统提供的扩展Hive语句如表1所示。 表1 扩展Hive语句 扩展语法 语法说明 语法示例 示例说明 CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name (col_name data_type [COMMENT col_comment], ...) [ROW FORMAT row_format] [STORED AS file_format] | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...) ] ...... [TBLPROPERTIES ("groupId"=" group1 ","locatorId"="locator1")] ...; 创建一个hive表,并指定表数据文件分布的locator信息。详细说明请参见使用HDFS Colocation存储Hive表。 CREATE TABLE tab1 (id INT, name STRING) row format delimited fields terminated by '\t' stored as RCFILE TBLPROPERTIES("groupId"=" group1 ","locatorId"="locator1"); 创建表tab1,并指定tab1的表数据分布在locator1节点上。 CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name (col_name data_type [COMMENT col_comment], ...) [ROW FORMAT row_format] [STORED AS file_format] | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...) ] ... [TBLPROPERTIES ('column.encode.columns'='col_name1,col_name2'| 'column.encode.indices'='col_id1,col_id2','column.encode.classname'='encode_classname')]...; 创建一个hive表,并指定表的加密列和加密算法。详细说明请参见配置Hive列加密功能。 create table encode_test(id INT, name STRING, phone STRING, address STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ('column.encode.indices'='2,3', 'column.encode.classname'='org.apache.hadoop.hive.serde2.SMS4Rewriter') STORED AS TEXTFILE; 创建表encode_test,并指定插入数据时对第2、3列加密,加密算法类为org.apache.hadoop.hive.serde2.SMS4Rewriter。 REMOVE TABLE hbase_tablename [WHERE where_condition]; 删除hive on hbase表中符合条件的数据。详细说明请参见删除Hive on HBase表中的单行记录。 remove table hbase_table1 where id = 1; 删除表中符合条件“id =1”的数据。 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'; 创建hive表,并设定表可以指定自定义行分隔符。详细说明请参见自定义Hive表行分隔符。 create table blu(time string, num string, msg string) row format delimited fields terminated by ',' stored as inputformat 'org.apache.hadoop.hive.contrib.fileformat.SpecifiedDelimiterInputFormat' outputformat 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'; 创建表blu,指定inputformat为SpecifiedDelimiterInputFormat,以便查询时可以指定表的查询行分隔符。 父主题: Hive常见SQL语法说明
  • 样例代码 使用Python方式提交数据分析任务,参考样例程序中的“hive-examples/python-examples/pyCLI_sec.py”。 导入HAConnection类。 from pyhs2.haconnection import HAConnection 声明HiveServer的IP地址列表。本例中hosts代表HiveServer的节点,xxx.xxx.xxx.xxx代表业务IP地址。 hosts = ["xxx.xxx.xxx.xxx", "xxx.xxx.xxx.xxx"] 如果HiveServer实例被迁移,原始的示例程序会失效。在HiveServer实例迁移之后,用户需要更新示例程序中使用的HiveServer的IP地址。 在HAConnection的第三个参数填写正确的用户名,密码可以不填写。创建连接,执行HQL,样例代码中仅执行查询所有表功能,可根据实际情况修改HQL内容,输出查询的列名和结果到控制台。 try: with HAConnection(hosts = hosts, port = 10000, authMechanism = "PLAIN", user='root', password='******') as haConn: with haConn.getConnection() as conn: with conn.cursor() as cur: # Show databases print cur.getDatabases() # Execute query cur.execute("show tables") # Return column info from query print cur.getSchema() # Fetch table results for i in cur.fetch(): print i except Exception, e: print e
  • 准备JDBC/HCatalog开发环境 表1 JDBC/HCatalog开发环境 准备项 说明 操作系统 开发环境: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 开发环境的基本配置。用于项目管理,贯穿软件开发生命周期。 华为提供开源镜像站,各服务样例工程依赖的Jar包通过华为开源镜像站下载,剩余所依赖的开源Jar包请直接从Maven中央库或者其他用户自定义的仓库地址下载,详情请参考配置华为开源镜像仓。 7-zip 用于解压“*.zip”和“*.rar”文件,支持7-Zip 16.04版本。
  • 功能介绍 AddDoublesUDF主要用来对两个及多个浮点数进行相加,在该样例中可以掌握如何编写和使用UDF。 一个普通UDF必须继承自“org.apache.hadoop.hive.ql.exec.UDF”。 一个普通UDF必须至少实现一个evaluate()方法,evaluate函数支持重载。 开发自定义函数需要在工程中添加“hive-exec-*.jar”依赖包,可从Hive服务的安装目录下获取,例如在“${BIGDATA_HOME}/components/ FusionInsight _HD_*/Hive/disaster/plugin/lib/”目录下获取。
  • 使用Hive客户端(MRS 3.x之前版本) 安装客户端,具体请参考安装客户端章节。 以客户端安装用户,登录安装客户端的节点。 执行以下命令,切换到客户端安装目录。 cd /opt/hadoopclient 执行以下命令配置环境变量。 source bigdata_env 根据集群认证模式,完成Hive客户端登录。 安全模式,则执行以下命令,完成用户认证并登录Hive客户端。 kinit 组件业务用户 beeline 普通模式,则执行以下命令,登录Hive客户端,如果不指定组件业务用户,则会以当前操作系统用户登录。 beeline -n 组件业务用户 进行beeline连接后,可以编写并提交HQL语句执行相关任务。如需执行Catalog客户端命令,需要先执行!q命令退出beeline环境。 使用以下命令,执行HCatalog的客户端命令。 hcat -e "cmd" 其中"cmd"必须为Hive DDL语句,如hcat -e "show tables"。 若要使用HCatalog客户端,必须从“组件管理”页面单击“下载客户端”,下载全部服务的客户端。Beeline客户端不受此限制。 由于权限模型不兼容,使用HCatalog客户端创建的表,在HiveServer客户端中不能访问,但可以使用WebHCat客户端访问。 在普通模式下使用HCatalog客户端,系统将以当前登录操作系统用户来执行DDL命令。 退出beeline客户端时请使用!q命令,不要使用“Ctrl + c”。否则会导致连接生成的临时文件无法删除,长期会累积产生大量的垃圾文件。 在使用beeline客户端时,如果需要在一行中输入多条语句,语句之间以“;”分隔,需要将“entireLineAsCommand”的值设置为“false”。 设置方法:如果未启动beeline,则执行beeline --entireLineAsCommand=false命令;如果已启动beeline,则在beeline中执行!set entireLineAsCommand false命令。 设置完成后,如果语句中含有不是表示语句结束的“;”,需要进行转义,例如select concat_ws('\;', collect_set(col1)) from tbl。
  • Hive支持ZSTD压缩格式 ZSTD(全称为Zstandard)是一种开源的无损数据压缩算法,其压缩性能和压缩比均优于当前Hadoop支持的其他压缩格式,本特性使得Hive支持ZSTD压缩格式的表。Hive支持基于ZSTD压缩的存储格式有常见的ORC,RCFile,TextFile,JsonFile,Parquet,Sequence, CS V。 本特性仅适用于MRS 3.1.2及之后版本。 ZSTD压缩格式的建表方式如下: ORC存储格式建表时可指定TBLPROPERTIES("orc.compress"="zstd"): create table tab_1(...) stored as orc TBLPROPERTIES("orc.compress"="zstd"); Parquet存储格式建表可指定TBLPROPERTIES("parquet.compression"="zstd"): create table tab_2(...) stored as parquet TBLPROPERTIES("parquet.compression"="zstd"); 其他格式或通用格式建表可执行设置参数指定compress,codec为“org.apache.hadoop.io.compress.ZStandardCode”: set hive.exec.compress.output=true; set mapreduce.map.output.compress=true; set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.ZStandardCodec; set mapreduce.output.fileoutputformat.compress=true; set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.ZStandardCodec; set hive.exec.compress.intermediate=true; create table tab_3(...) stored as textfile; ZSTD压缩格式的表和其他普通压缩表的SQL操作没有区别,可支持正常的增删查及聚合类SQL操作。 父主题: Hive数据存储及加密配置
  • 操作场景 由于底层存储系统的原因,Hive并不能支持对单条表数据进行删除操作,但在Hive on HBase功能中,MRS Hive提供了对HBase表的单条数据的删除功能,通过特定的语法,Hive可以将自己对应的HBase表中符合条件的一条或者多条数据清除。 表1 删除Hive on HBase表中的单行记录所需权限 集群认证模式 用户所需权限 安全模式(启用了Kerberos认证) “SELECT”、“INSERT”和“DELETE” 普通模式(未启用Kerberos认证) 无
  • 操作步骤 以Hive客户端安装用户登录源端集群安装客户端的节点。 执行以下命令,切换到客户端安装目录,例如安装目录为“/opt/client”,请用户根据实际情况修改。 cd /opt/client 执行以下命令配置环境变量。 source bigdata_env 如果集群开启了Kerberos认证,执行以下命令认证用户,否则跳过此步骤。 kinit Hive业务用户 执行以下命令登录Hive客户端。 beeline 执行以下命令创建数据库“dump_db”。 create database dump_db; 执行以下命令切换到“dump_db”数据库。 use dump_db; 执行以下命令在“dump_db”中创建表“test”。 create table test(id int); 执行以下命令向表“test”中插入数据。 insert into test values(123); 执行以下命令将数据库“dump_db”设置为复制策略的源。 alter database dump_db set dbproperties ('repl.source.for'='replpolicy1'); 执行alter命令修改数据库属性时,用户需要对该数据库拥有对应权限。权限设置方式如下: 集群未启用Ranger鉴权,需登录FusionInsight Manager授予该用户所属角色管理员权限,详细操作请参考创建Hive用户并绑定角色章节。 集群启用了Ranger鉴权,需参考添加Hive的Ranger访问权限策略章节授予用户对应数据库的Repl Dump/Load操作权限。 删除设置了复制策略源的数据库时,需要先将该数据库的复制策略源设置为空,再对数据库执行删除操作,否则无法删除。将数据库复制策略源设置为空的命令如下: alter database dump_db set dbproperties ('repl.source.for'=''); 执行以下命令将“dump_db”导出到目标集群的“/user/hive/test”目录下。 repl dump dump_db with ('hive.repl.rootdir'='hdfs://haclusterX/user/hive/test'); “haclusterX”为新增的自定义参数“dfs.namenode.rpc-address.haclusterX”中的“haclusterX”。 指定导出目录时需要确保当前用户对该目录拥有读写权限。 以Hive客户端安装用户登录目标集群安装客户端的节点,并执行2-5。 执行以下命令将“/user/hive/test”目录下的“dump_db”数据库的数据导入到“load_db”数据库中。 repl load load_db from '/user/hive/repl'; 通过repl load导入数据库,指定数据库名称时需要注意以下情况: 指定的数据库不存在,在导入的过程中会创建对应的数据库。 指定的数据库已存在,且该数据库的“hive.repl.ckpt.key”属性值与导入的路径一致,则跳过导入操作。 指定的数据库已存在,但是该数据库下不存在任何表和functions,导入的过程中只将源数据库下的表导入到当前数据库中;如果该数据库下存在表或functions会导入失败。
  • 操作示例 以Hive客户端安装用户登录安装客户端的节点。 执行以下命令,切换到客户端安装目录。 cd 客户端安装目录 例如安装目录为“/opt/client”,则执行以下命令: cd /opt/client 执行以下命令配置环境变量。 source bigdata_env 集群是否启用了Kerberos认证。 是,执行以下命令进行用户认证: kinit Hive业务用户 否,执行5。 执行以下命令登录Hive客户端。 beeline 执行如下命令创建Hive分区表“table_1”,指定分区“pt='2021-12-12'”的路径为“hdfs://xxx”,指定分区“pt='2021-12-18'”的路径为“obs://xxx”: 创建Hive分区表“table_1”: create table table_1(id string) partitioned by(pt string) [stored as [orc|textfile|parquet|...]]; 指定分区“pt='2021-12-12'”的路径为“hdfs://xxx”: alter table table_1 add partition(pt='2021-12-12') location 'hdfs://xxx'; 指定分区“pt='2021-12-12'”的路径为“obs://xxx”: alter table table_1 add partition(pt='2021-12-18') location 'obs://xxx'; 给分区表“table_1”中插入数据后,对应的分区数据存储在对应的存储源上,可以使用desc查看分区的Location,执行以下命令查看路径下的数据: desc formatted table_1 partition(pt='2021-12-18');
  • 操作场景 HDFS Colocation(同分布)是HDFS提供的数据分布控制功能,利用HDFS Colocation接口,可以将存在关联关系或者可能进行关联操作的数据存放在相同的存储节点上。Hive支持HDFS的Colocation功能,即在创建Hive表时,设置表文件分布的locator信息,当使用insert语句向该表中插入数据时会将该表的数据文件存放在相同的存储节点上(不支持其他数据导入方式),从而使后续的多表关联的数据计算更加方便和高效。支持HDFS的Colocation功能的Hive表格式只有TextFile和RCFile。
  • 操作步骤 以Hive客户端安装用户登录安装客户端的节点。 执行以下命令,切换到客户端安装目录。 cd 客户端安装目录 例如安装目录为“/opt/client”,则执行以下命令: cd /opt/client 执行以下命令配置环境变量。 source bigdata_env 集群是否启用了Kerberos认证。 是,执行以下命令进行用户认证: kinit Hive业务用户 否,执行5。 执行以下命令,将需要关联的关系型数据库驱动Jar包上传到HDFS目录下。 hdfs dfs -put Jar包所在目录 保存Jar包的HDFS目录 例如将“/opt”目录下Oracle驱动Jar包上传到HDFS的“/tmp”目录下,则执行如下命令。 hdfs dfs -put /opt/ojdbc6.jar /tmp 按照如下示例,在Hive客户端创建关联关系型数据库的外表。以下为关联Oracle linux6版本示例: 如果集群开启了Kerberos认证,创建Hive表的用户需要“ADMIN”权限,并设置admin权限: set role admin; 添加连接关系型数据库的驱动Jar包,不同数据库有不同的驱动Jar,且Jar包所在路径请以实际路径为准: ADD JAR hdfs:///tmp/ojdbc6.jar; 执行以下命令创建Hive表,且表的列需比数据库返回结果多一列用于分页查询: CREATE EXTERNAL TABLE ora_test (id STRING,rownum string) STORED BY 'com.qubitproducts.hive.storage.jdbc.JdbcStorageHandler' TBLPROPERTIES ( "qubit.sql.database.type" = "ORACLE", "qubit.sql.jdbc.url" = "jdbc:oracle:thin:@//10.163.xxx.xxx:1521/mydb", "qubit.sql.jdbc.driver" = "oracle.jdbc.OracleDriver", "qubit.sql.query" = "select name from aaa", "qubit.sql.column.mapping" = "id=name", "qubit.sql.dbcp.username" = "test", "qubit.sql.dbcp.password" = "xxx"); 表1 创建Hive表参数说明 参数 参数说明 qubit.sql.database.type 用于设置关联的关系型数据库类型,例如“ORACLE”。 qubit.sql.jdbc.url 通过JDBC连接关系型数据库的URL,不同数据库有不同的URL格式,例如“jdbc:oracle:thin:@//10.163.xxx.xxx:1521/mydb”。 qubit.sql.jdbc.driver 用于配置关系型数据库驱动类名,例如“oracle.jdbc.OracleDriver”。 qubit.sql.query 在关系型数据库中执行的查询SQL语句,结果将返回至Hive表中。 qubit.sql.column.mapping 可选,Hive表的列与关系型数据库表的列进行匹配。 qubit.sql.dbcp.username 连接关系型数据库的用户名。 qubit.sql.dbcp.password 连接关系型数据库的用户密码。 命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。
提示

您即将访问非华为云网站,请注意账号财产安全