华为云用户手册

  • 原因分析 DataNode的数据接受器不可用。 此时DataNode会有如下日志: 2016-03-17 18:51:44,721 | WARN | org.apache.hadoop.hdfs.server.datanode.DataXceiverServer@5386659f | hadoopc1h2:25009:DataXceiverServer: | DataXceiverServer.java:158 java.io.IOException: Xceiver count 4097 exceeds the limit of concurrent xcievers: 4096 at org.apache.hadoop.hdfs.server.datanode.DataXceiverServer.run(DataXceiverServer.java:140) at java.lang.Thread.run(Thread.java:745) DataNode的磁盘空间不足。 DataNode的心跳有延迟。
  • 开发思路 数据准备。 创建三张表,雇员信息表“employees_info”、雇员联络信息表“employees_contact”、雇员信息扩展表“employees_info_extended”。 雇员信息表“employees_info”的字段为雇员编号、姓名、支付薪水币种、薪水金额、缴税税种、工作地、入职时间,其中支付薪水币种“R”代表人民币,“D”代表美元。 雇员联络信息表“employees_contact”的字段为雇员编号、电话号码、e-mail。 雇员信息扩展表“employees_info_extended”的字段为雇员编号、姓名、电话号码、e-mail、支付薪水币种、薪水金额、缴税税种、工作地,分区字段为入职时间。 创建表代码实现请见创建Hive表。 加载雇员信息数据到雇员信息表“employees_info”中。 加载数据代码实现请见加载数据到Hive表中。 雇员信息数据如表1所示: 表1 雇员信息数据 编号 姓名 支付薪水币种 薪水金额 缴税税种 工作地 入职时间 1 Wang R 8000.01 personal income tax&0.05 Country1:City1 2014 3 Tom D 12000.02 personal income tax&0.09 Country2:City2 2014 4 Jack D 24000.03 personal income tax&0.09 Country3:City3 2014 6 Linda D 36000.04 personal income tax&0.09 Country4:City4 2014 8 Zhang R 9000.05 personal income tax&0.05 Country5:City5 2014 加载雇员联络信息数据到雇员联络信息表“employees_contact”中。 雇员联络信息数据如表2所示: 表2 雇员联络信息数据 编号 电话号码 e-mail 1 135 XXXX XXXX xxxx@xx.com 3 159 XXXX XXXX xxxxx@xx.com.cn 4 186 XXXX XXXX xxxx@xx.org 6 189 XXXX XXXX xxxx@xxx.cn 8 134 XXXX XXXX xxxx@xxxx.cn 数据分析。 数据分析代码实现,请见查询Hive表数据。 查看薪水支付币种为美元的雇员联系方式。 查询入职时间为2014年的雇员编号、姓名等字段,并将查询结果加载进表employees_info_extended中的入职时间为2014的分区中。 统计表employees_info中有多少条记录。 查询使用以“cn”结尾的邮箱的员工信息。 提交数据分析任务,统计表employees_info中有多少条记录。
  • Hive应用开发流程介绍 开发流程中各阶段的说明如图1和表1所示。 图1 Hive应用程序开发流程 表1 Hive应用开发的流程说明 阶段 说明 参考文档 了解基本概念 在开始开发应用前,需要了解Hive的基本概念。 常用概念 准备开发和运行环境 Hive的应用程序支持使用Java、Python两种语言进行开发。推荐使用IntelliJ IDEA工具,请根据指导完成不同语言的开发环境配置。 准备Hive应用开发环境 根据场景开发工程 提供了Java、Python两种不同语言的样例工程,还提供了从建表、数据加载到数据查询的样例工程。 开发Hive应用 运行程序及查看结果 指导用户将开发好的程序编译提交运行并查看结果。 调测Hive应用 父主题: Hive开发指南(普通模式)
  • IoTDB应用开发流程介绍 本文档主要基于Java API对IoTDB进行应用开发。 开发流程中各阶段的说明如图1和表1所示。 图1 IoTDB应用程序开发流程 表1 IoTDB应用开发的流程说明 阶段 说明 参考章节 准备开发环境 在进行应用开发前,需首先准备开发环境,推荐使用Java语言进行开发,使用IntelliJ IDEA工具,同时完成JDK、Maven等初始配置。 准备本地应用开发环境 准备连接集群配置文件 应用程序开发或运行过程中,需通过集群相关配置文件信息连接 MRS 集群,配置文件通常包括集群组件信息文件以及用于安全认证的用户文件,可从已创建好的MRS集群中获取相关内容。 用于程序调测或运行的节点,需要与MRS集群内节点网络互通,同时配置hosts 域名 信息。 准备连接IoTDB集群配置文件 配置并导入样例工程 IoTDB提供了不同场景下的多种样例程序,用户可获取样例工程并导入本地开发环境中进行程序学习。 导入并配置IoTDB样例工程 根据业务场景开发程序 提供了Java语言的样例工程,包含JDBC和Session两种连接方式,从创建存储组、创建时间序列,到插入数据再到删除存储组全流程的样例工程。 开发IoTDB应用 编译并运行程序 指导用户将开发好的程序编译并提交运行。 调测IoTDB应用 父主题: IoTDB开发指南(安全模式)
  • 查看调测结果 IoTDB应用程序运行完成后,可通过IntelliJ IDEA运行结果查看应用程序运行情况。 JDBCExample样例程序运行结果如下所示: ... -------------------------- Time root.sg.d1.s1 root.company.line2.device1.temperature root.company.line2.device1.speed root.company.line2.device2.speed root.company.line2.device2.status root.company.line1.device1.spin root.company.line1.device1.status root.company.line1.device2.temperature root.company.line1.device2.power root.sg1.d1.s3 root.sg1.d1.s1 root.sg1.d1.s2 0, null, null, null, null, null, null, null, null, null, 1.0, 1.0, 1.0 1, null, null, null, null, null, null, null, null, null, 1.0, 1.0, 1.0 2, null, null, null, null, null, null, null, null, null, 1.0, 1.0, 1.0 3, null, null, null, null, null, null, null, null, null, 1.0, 1.0, 1.0 4, null, null, null, null, null, null, null, null, null, 1.0, 1.0, 1.0 5, null, null, null, null, null, null, null, null, null, 1.0, 1.0, 1.0 6, null, null, null, null, null, null, null, null, null, 1.0, 1.0, 1.0 7, null, null, null, null, null, null, null, null, null, 1.0, 1.0, 1.0 8, null, null, null, null, null, null, null, null, null, 1.0, 1.0, 1.0 9, null, null, null, null, null, null, null, null, null, 1.0, 1.0, 1.0 10, null, null, null, null, null, null, null, null, null, 1.0, 1.0, 1.0 -------------------------- -------------------------- count(root.sg.d1.s1) count(root.company.line2.device1.temperature) count(root.company.line2.device1.speed) count(root.company.line2.device2.speed) count(root.company.line2.device2.status) count(root.company.line1.device1.spin) count(root.company.line1.device1.status) count(root.company.line1.device2.temperature) count(root.company.line1.device2.power) count(root.sg1.d1.s3) count(root.sg1.d1.s1) count(root.sg1.d1.s2) 8237, 1, 1, 1, 1, 1, 1, 1, 1, 101, 101, 101 -------------------------- -------------------------- Time count(root.sg.d1.s1) count(root.company.line2.device1.temperature) count(root.company.line2.device1.speed) count(root.company.line2.device2.speed) count(root.company.line2.device2.status) count(root.company.line1.device1.spin) count(root.company.line1.device1.status) count(root.company.line1.device2.temperature) count(root.company.line1.device2.power) count(root.sg1.d1.s3) count(root.sg1.d1.s1) count(root.sg1.d1.s2) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20 -------------------------- FlinkIoTDBSink样例程序运行结果如下所示: ... 19:53:41.532 [flink-akka.actor.default-dispatcher-9] DEBUG org.apache.flink.runtime.resourcemanager.StandaloneResourceManager - Received heartbeat from 5153e4ff24b25b13225f1bf67a4312d8. 19:53:41.800 [flink-akka.actor.default-dispatcher-9] DEBUG org.apache.flink.runtime.jobmaster.JobMaster - Trigger heartbeat request. 19:53:41.800 [flink-akka.actor.default-dispatcher-10] DEBUG org.apache.flink.runtime.taskexecutor.TaskExecutor - Received heartbeat request from 5153e4ff24b25b13225f1bf67a4312d8. 19:53:41.802 [flink-akka.actor.default-dispatcher-9] DEBUG org.apache.flink.runtime.jobmaster.JobMaster - Received heartbeat from 7d6ef313-3f78-4cee-bbb1-e234dcac6d30. 19:53:42.988 [pool-3-thread-1] DEBUG org.apache.iotdb.flink.IoTDBSink - send event successfully 19:53:42.988 [pool-6-thread-1] DEBUG org.apache.iotdb.flink.IoTDBSink - send event successfully 19:53:42.990 [pool-4-thread-1] DEBUG org.apache.iotdb.flink.IoTDBSink - send event successfully 19:53:45.990 [pool-7-thread-1] DEBUG org.apache.iotdb.flink.IoTDBSink - send event successfully 19:53:45.992 [pool-9-thread-1] DEBUG org.apache.iotdb.flink.IoTDBSink - send event successfully 19:53:45.994 [pool-5-thread-1] DEBUG org.apache.iotdb.flink.IoTDBSink - send event successfully IoTDB Kafka样例程序运行结果如下所示: Producer.java ... [2022-01-15 15:12:34,221] INFO New Producer: start. (com.huawei.bigdata.iotdb.Producer) [2022-01-15 15:12:39,369] INFO [Producer clientId=DemoProducer] Cluster ID: uDtuaWS_QUK02EtuZQ4Xew (org.apache.kafka.clients.Metadata) [2022-01-15 15:12:57,077] INFO The Producer have send 100 messages. (com.huawei.bigdata.iotdb.Producer) [2022-01-15 15:13:04,691] INFO The Producer have send 200 messages. (com.huawei.bigdata.iotdb.Producer) [2022-01-15 15:13:11,355] INFO The Producer have send 300 messages. (com.huawei.bigdata.iotdb.Producer) [2022-01-15 15:13:17,758] INFO The Producer have send 400 messages. (com.huawei.bigdata.iotdb.Producer) [2022-01-15 15:13:24,335] INFO The Producer have send 500 messages. (com.huawei.bigdata.iotdb.Producer) [2022-01-15 15:13:30,739] INFO The Producer have send 600 messages. (com.huawei.bigdata.iotdb.Producer) [2022-01-15 15:13:37,267] INFO The Producer have send 700 messages. (com.huawei.bigdata.iotdb.Producer) KafkaConsumerMultThread.java ... [2022-01-15 15:19:27,563] INFO Consumer Thread-1 partitions:1 record: sensor_29,1642231023769,1.000000 offsets: 828 (com.huawei.bigdata.iotdb.KafkaConsumerMultThread) [2022-01-15 15:19:27,612] INFO Consumer Thread-1 partitions:1 record: sensor_31,1642231023769,1.000000 offsets: 829 (com.huawei.bigdata.iotdb.KafkaConsumerMultThread) [2022-01-15 15:19:27,612] INFO Consumer Thread-0 partitions:0 record: sensor_8,1642231023769,1.000000 offsets: 842 (com.huawei.bigdata.iotdb.KafkaConsumerMultThread) [2022-01-15 15:19:27,665] INFO Consumer Thread-1 partitions:1 record: sensor_32,1642231023769,1.000000 offsets: 830 (com.huawei.bigdata.iotdb.KafkaConsumerMultThread) [2022-01-15 15:19:27,665] INFO Consumer Thread-0 partitions:0 record: sensor_9,1642231023769,1.000000 offsets: 843 (com.huawei.bigdata.iotdb.KafkaConsumerMultThread) [2022-01-15 15:19:27,732] INFO Consumer Thread-1 partitions:1 record: sensor_33,1642231023769,1.000000 offsets: 831 (com.huawei.bigdata.iotdb.KafkaConsumerMultThread) [2022-01-15 15:19:27,732] INFO Consumer Thread-0 partitions:0 record: sensor_11,1642231023769,1.000000 offsets: 844 (com.huawei.bigdata.iotdb.KafkaConsumerMultThread) [2022-01-15 15:19:27,786] INFO Consumer Thread-0 partitions:0 record: sensor_12,1642231023769,1.000000 offsets: 845 (com.huawei.bigdata.iotdb.KafkaConsumerMultThread) [2022-01-15 15:19:27,786] INFO Consumer Thread-1 partitions:1 record: sensor_35,1642231023769,1.000000 offsets: 832 (com.huawei.bigdata.iotdb.KafkaConsumerMultThread)
  • 操作步骤 客户端机器必须安装有Python3,其版本不低于3.6,最高不能超过3.8。 在客户端机器的命令行终端输入python3可查看Python版本号。如下显示Python版本为3.8.2。 Python 3.8.2 (default, Jun 23 2020, 10:26:03) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux Type "help", "copyright", "credits" or "license" for more information. 客户端机器必须安装有setuptools,版本为47.3.1。 具体软件,请到对应的官方网站获取。 https://pypi.org/project/setuptools/#files 将下载的setuptools压缩文件复制到客户端机器上,解压后进入解压目录,在客户端机器的命令行终端执行python3 setup.py install。 如下内容表示安装setuptools的47.3.1版本成功。 Finished processing dependencies for setuptools==47.3.1 若提示setuptools的47.3.1版本安装不成功,则需要检查环境是否有问题或是Python自身原因导致的。 安装Python客户端到客户端机器。 参考获取MRS应用开发样例工程,获取样例代码解压目录中“src\hive-examples”目录下的样例工程文件夹“python3-examples”。 进入“python3-examples”文件夹。 根据python3的版本,选择进入“dependency_python3.6”或“dependency_python3.7”或“dependency_python3.8”或“dependency_python3.9”(MRS 3.3.0及之后版本支持)文件夹。 执行whereis easy_install命令,找到easy_install程序路径。如果有多个路径,使用easy_install --version确认选择setuptools对应版本的easy_install,如/usr/local/bin/easy_install。 MRS 3.2.0之前版本,使用对应的easy_install命令,依次安装dependency_python3.x文件夹下的egg文件。如: /usr/local/bin/easy_install future-0.18.2-py3.8.egg 输出以下关键内容表示安装egg文件成功。 Finished processing dependencies for future==0.18.2 对于“dependency_python3.x”文件夹下同时存在aarch64与x86_64版本的“egg”文件,需要根据操作系统选取其中一个版本安装即可,使用uname -p命令确认当前操作系统架构。 MRS 3.2.0及之后版本,使用对应的easy_install命令,安装dependency_python3.x文件夹下的egg文件,egg文件存在依赖关系,可使用通配符安装,如: “dependency_python3.6”目录: /usr/local/bin/easy_install future*egg six*egg python*egg sasl-*linux-$(uname -p).egg thrift-*egg thrift_sasl*egg “dependency_python3.7”目录: /usr/local/bin/easy_install future*egg six*egg sasl-*linux-$(uname -p).egg thrift-*egg thrift_sasl*egg “dependency_python3.8”目录: /usr/local/bin/easy_install future*egg six*egg python*egg sasl-*linux-$(uname -p).egg thrift-*linux-$(uname -p).egg thrift_sasl*egg “dependency_python3.9”目录(MRS 3.3.0及之后版本): /usr/local/bin/easy_install future*egg six*egg sasl-*linux-$(uname -p).egg six-*.egg thrift-*linux-$(uname -p).egg thrift_sasl*egg 每个egg文件安装输出以下关键内容表示安装成功。 Finished processing dependencies for *** 安装成功后,“python3-examples/pyCLI_sec.py”为Python客户端样例代码,“python3-examples/pyhive/hive.py”为Python客户端接口API。
  • 操作步骤 编译JDBC样例程序: 在IDEA界面左下方单击“Terminal”进入终端,执行命令mvn clean package进行编译。 当输出“BUILD SUC CES S”,表示编译成功,如下图所示。编译成功后将会在样例工程的target下生成含有“-with-dependencies”字段的jar包。 运行JDBC样例程序: 在Linux上创建一个目录作为运行目录,如“/opt/jdbc_example”,将1中生成的“target”目录下包名中含有“-with-dependencies”字段的Jar包放进该路径下,并在该目录下创建子目录“src/main/resources”,将已获取的“hive-jdbc-example\src\main\resources”目录下的所有文件复制到“resources”下。 执行以下命令运行Jar包: chmod +x /opt/jdbc_example -R cd /opt/jdbc_example java -jar hive-jdbc-example-1.0-SNAPSHOT-jar-with-dependencies.jar 以上Jar包名称仅供参考,具体名称以实际生成为主。 在命令行终端查看样例代码中的HQL所查询出的结果,运行成功会显示如下信息: Create table success! _c0 0 Delete table success!
  • 代码样例 以下为代码片段示例: package com.huawei.bigdata.iotdb; import org.apache.iotdb.udf.api.UDTF; import org.apache.iotdb.udf.api.access.Row; import org.apache.iotdb.udf.api.collector.PointCollector; import org.apache.iotdb.udf.api.customizer.config.UDTFConfigurations; import org.apache.iotdb.udf.api.customizer.parameter.UDFParameters; import org.apache.iotdb.udf.api.customizer.strategy.RowByRowAccessStrategy; import org.apache.iotdb.udf.api.type.Type; import java.io.IOException; public class UDTFExample implements UDTF { @Override public void beforeStart(UDFParameters parameters, UDTFConfigurations configurations) { configurations.setAccessStrategy(new RowByRowAccessStrategy()).setOutputDataType(Type.INT32); } @Override public void transform(Row row, PointCollector collector) throws IOException { collector.putInt(row.getTime(), -row.getInt(0)); } }
  • 开发思路 数据准备。 创建三张表,雇员信息表“employees_info”、雇员联络信息表“employees_contact”、雇员信息扩展表“employees_info_extended”。 雇员信息表“employees_info”的字段为雇员编号、姓名、支付薪水币种、薪水金额、缴税税种、工作地、入职时间,其中支付薪水币种“R”代表人民币,“D”代表美元。 雇员联络信息表“employees_contact”的字段为雇员编号、电话号码、e-mail。 雇员信息扩展表“employees_info_extended”的字段为雇员编号、姓名、电话号码、e-mail、支付薪水币种、薪水金额、缴税税种、工作地,分区字段为入职时间。 创建表代码实现请见创建Hive表。 加载雇员信息数据到雇员信息表“employees_info”中。 加载数据代码实现请见加载数据到Hive表中。 雇员信息数据如表1所示: 表1 雇员信息数据 编号 姓名 支付薪水币种 薪水金额 缴税税种 工作地 入职时间 1 Wang R 8000.01 personal income tax&0.05 Country1:City1 2014 3 Tom D 12000.02 personal income tax&0.09 Country2:City2 2014 4 Jack D 24000.03 personal income tax&0.09 Country3:City3 2014 6 Linda D 36000.04 personal income tax&0.09 Country4:City4 2014 8 Zhang R 9000.05 personal income tax&0.05 Country5:City5 2014 加载雇员联络信息数据到雇员联络信息表“employees_contact”中。 雇员联络信息数据如表2所示: 表2 雇员联络信息数据 编号 电话号码 e-mail 1 135 XXXX XXXX xxxx@xx.com 3 159 XXXX XXXX xxxxx@xx.com.cn 4 186 XXXX XXXX xxxx@xx.org 6 189 XXXX XXXX xxxx@xxx.cn 8 134 XXXX XXXX xxxx@xxxx.cn 数据分析。 数据分析代码实现,请见查询Hive表数据。 查看薪水支付币种为美元的雇员联系方式。 查询入职时间为2014年的雇员编号、姓名等字段,并将查询结果加载进表employees_info_extended中的入职时间为2014的分区中。 统计表employees_info中有多少条记录。 查询使用以“cn”结尾的邮箱的员工信息。 提交数据分析任务,统计表employees_info中有多少条记录。实现请参见Hive JDBC访问样例程序。
  • 数据规划 发布者Job使用自定义算子每秒钟产生10000条数据。 数据包含两个属性:分别是Int和String类型。 配置文件 nettyconnector.registerserver.topic.storage:设置NettySink的IP、端口及并发度信息在第三方注册服务器上的路径(必填),例如: nettyconnector.registerserver.topic.storage: /flink/nettyconnector nettyconnector.sinkserver.port.range:设置NettySink的端口范围(必填),例如: nettyconnector.sinkserver.port.range: 28444-28943 nettyconnector.ssl.enabled:设置NettySink与NettySource之间通信是否SSL加密(默认为false),例如: nettyconnector.ssl.enabled: true nettyconnector.sinkserver.subnet:设置网络所属域,例如: nettyconnector.sinkserver.subnet: 10.162.0.0/16 安全认证配置: Zookeeper的SASL认证,依赖“flink-conf.yaml”中有关HA的相关配置,具体配置请参见配置管理Flink。 SSL的keystore、truststore、keystore password、truststore password以及password等也使用“flink-conf.yaml”的相关配置,具体配置请参见配置Flink应用安全认证。 接口说明 注册服务器接口 注册服务器用来保存NettySink的IP、端口以及并发度信息,以便NettySource连接使用。为用户提供以下接口: public interface RegisterServerHandler { /** * 启动注册服务器 * @param configuration Flink的Configuration类型 */ void start(Configuration configuration) throws Exception; /** *注册服务器上创建Topic节点(目录) * @param topic topic节点名称 */ void createTopicNode(String topic) throw Exception; /** *将信息注册到某个topic节点(目录)下 * @param topic 需要注册到的目录 * @param registerRecord 需要注册的信息 */ void register(String topic, RegisterRecord registerRecord) throws Exception; /** *删除topic节点 * @param topic 待删除topic */ void deleteTopicNode(String topic) throws Exception; /** *注销注册信息 *@param topic 注册信息所在的topic *@param recordId 待注销注册信息ID */ void unregister(String topic, int recordId) throws Exception; /** * 查询信息 * @param 查询信息所在的topic *@recordId 查询信息的ID */ RegisterRecord query(String topic, int recordId) throws Exception; /** * 查询某个Topic是否存在 * @param topic */ Boolean isExist(String topic) throws Exception; /** *关闭注册服务器句柄 */ void shutdown() throws Exception; 工程基于以上接口提供了ZookeeperRegisterHandler供用户使用。 NettySink算子 Class NettySink(String name, String topic, RegisterServerHandler registerServerHandler, int numberOfSubscribedJobs) name:为本NettySink的名称。 topic:为本NettySink产生数据的Topic,每个不同的NettySink(并发度除外)必须使用不同的TOPIC,否则会引起订阅混乱,数据无法正常分发。 registerServerHandler:为注册服务器的句柄。 numberOfSubscribedJobs:为订阅本NettySink的作业数量,该数量必须是明确的,只有当所有订阅者都连接上NettySink,NettySink才发送数据。 NettySource算子 Class NettySource(String name, String topic, RegisterServerHandler registerServerHandler) name:为本NettySource的名称,该NettySource必须是唯一的(并发度除外),否则,连接NettySink时会出现冲突,导致无法连接。 topic:订阅的NettySink的topic。 registerServerHandler:为注册服务器的句柄。 NettySource的并发度必须与NettySink的并发度相同,否则无法正常创建连接。
  • 样例代码 -- 从本地文件系统/opt/hive_examples_data/目录下将employee_info.txt加载进employees_info表中. ---- 用新数据覆盖原有数据 LOAD DATA LOCAL INPATH '/opt/hive_examples_data/employee_info.txt' OVERWRITE INTO TABLE employees_info; ---- 保留原有数据,将新数据追加到表中 LOAD DATA LOCAL INPATH '/opt/hive_examples_data/employee_info.txt' INTO TABLE employees_info; -- 从HDFS上/user/hive_examples_data/employee_info.txt加载进employees_info表中. ---- 用新数据覆盖原有数据 LOAD DATA INPATH '/user/hive_examples_data/employee_info.txt' OVERWRITE INTO TABLE employees_info; ---- 保留原有数据,将新数据追加到表中 LOAD DATA INPATH '/user/hive_examples_data/employee_info.txt' INTO TABLE employees_info; 加载数据的实质是将数据复制到HDFS上指定表的目录下。
  • 代码样例 以下为代码片段示例: package com.huawei.bigdata.iotdb; import org.apache.iotdb.udf.api.UDTF; import org.apache.iotdb.udf.api.access.Row; import org.apache.iotdb.udf.api.collector.PointCollector; import org.apache.iotdb.udf.api.customizer.config.UDTFConfigurations; import org.apache.iotdb.udf.api.customizer.parameter.UDFParameters; import org.apache.iotdb.udf.api.customizer.strategy.RowByRowAccessStrategy; import org.apache.iotdb.udf.api.type.Type; import java.io.IOException; public class UDTFExample implements UDTF { @Override public void beforeStart(UDFParameters parameters, UDTFConfigurations configurations) { configurations.setAccessStrategy(new RowByRowAccessStrategy()).setOutputDataType(Type.INT32); } @Override public void transform(Row row, PointCollector collector) throws IOException { collector.putInt(row.getTime(), -row.getInt(0)); } }
  • 访问开源 ZooKeeper 使用“testConnectApacheZk”连接开源ZooKeeper的代码,只需要将以下代码中的“xxx.xxx.xxx.xxx”修改为需要连接的开源的ZooKeeper的IP,端口号按照实际情况修改。如果仅需运行访问第三方Zookeeper的样例,需注释掉main函数中的“testConnectHive”方法。 digestZK = new org.apache.zookeeper.ZooKeeper("xxx.xxx.xxx.xxx:端口号", 60000, null); ZooKeeper连接使用完后需要关闭连接,否则可能导致连接泄露。可根据业务实际情况进行处理,代码如下: //使用try-with-resources方式,try语句执行完后会自动关闭ZooKeeper连接。 try (org.apache.zookeeper.ZooKeeper digestZk = new org.apache.zookeeper.ZooKeeper("xxx.xxx.xxx.xxx:端口号", 600000, null)) { ... }
  • SpringBoot样例工程的命令行形式运行 在IDEA界面左下方单击“Terminal”进入终端,执行命令mvn clean package进行编译。 当输出“BUILD SUCCESS”,表示编译成功,如下图所示。编译成功后将会在样例工程的target下生成含有“-with-dependencies”字段的Jar包。 在Windows或Linux上创建一个目录作为运行目录,如“D:\hive-rest-client-example”(Windows环境)或“/opt/hive-rest-client-example”(Linux环境),将1中生成的“target”目录下包名中含有“-with-dependencies”字段的Jar包放进该路径下,并在该目录下创建子目录“src/main/resources"。将hive-rest-client-example工程resources目录下的所有文件复制到“resources”下。 执行以下命令启动SpringBoot服务: 在Windows环境下执行: cd /d d:\hive-rest-client-example java -jar hive-rest-client-example-8.1.0.1-3.5.1-SNAPSHOT-jar-with-dependencies.jar 在Linux环境下执行: chmod +x /opt/hive-rest-client-example -R cd /opt/hive-rest-client-example java -jar hive-rest-client-example-8.1.0.1-3.5.1-SNAPSHOT-jar-with-dependencies.jar 以上Jar包名称仅供参考,具体名称以实际生成为主。 调用Hive的SpringBoot样例接口触发样例代码运行: Windows环境运行方式: 打开浏览器,输入:http://localhost:8080/hive/example/executesql。 Linux环境下执行运行方式: 在2中存放Jar的节点上执行curl http://localhost:8080/hive/example/executesql命令。 运行样例代码时日志中可能会打印以下日志信息,虽然日志级别显示ERROR,但是不影响执行结果: ERROR 51320 --- [c-8-EventThread] o.a.c.framework.imps.EnsembleTracker : Invalid config event received: {version=100000000, server.48=ZooKeeper节点IP地址:ZooKeeper端口号:ZooKeeper端口号:participant...} 查看样例代码中的HQL所查询出的结果。 Windows环境运行成功结果会有如下信息: =========================== Hive Example Start =========================== Start create table. Table created successfully. Start to insert data into the table. Inserting data to the table succeeded. Start to query table data. Query result : employees_infoa.id employees_infoa.age employees_infoa.name 1 31 SJK 2 25 HS 3 28 HT Querying table data succeeded. Start to delete the table. Table deleted successfully. =========================== Hive Example End =========================== Linux环境运行成功结果会有如下信息: =========================== Hive Example Start =========================== Start create table. Table created successfully. Start to insert data into the table. Inserting data to the table succeeded. Start to query table data. Query result : employees_infoa.id employees_infoa.age employees_infoa.name 1 31 SJK 2 25 HS 3 28 HT Querying table data succeeded. Start to delete the table. Table deleted successfully. =========================== Hive Example End ===========================
  • 常用概念 客户端 客户端直接面向用户,可通过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任务执行结果等操作。
  • Hive介绍 Hive是一个开源的,建立在Hadoop上的 数据仓库 框架,提供类似SQL的HQL语言操作结构化数据,其基本原理是将HQL语言自动转换成MapReduce任务或Spark任务,从而完成对Hadoop集群中存储的海量数据进行查询和分析。 Hive主要特点如下: 通过HQL语言非常容易的完成数据提取、转换和加载(ETL)。 通过HQL完成海量结构化数据分析。 灵活的数据存储格式,支持JSON、 CS V、TEXTFILE、RCFILE、ORCFILE、SEQUENCEFILE等存储格式,并支持自定义扩展。 多种客户端连接方式,支持JDBC接口。 Hive主要应用于海量数据的离线分析(如 日志分析 ,集群状态分析)、大规模的数据挖掘(用户行为分析,兴趣分区,区域展示)等场景下。 为保证Hive服务的高可用性、用户数据的安全及访问服务的可控制,在开源社区的Hive-3.1.0版本基础上,Hive新增如下特性: 数据文件加密机制。 开源社区的Hive特性,请参见https://cwiki.apache.org/confluence/display/hive/designdocs。
  • 代码样例 完整样例代码可参考com.huawei.bigdata.hdfs.examples.ColocationExample。 在运行Colocation工程时,需要设置运行用户,此用户需绑定supergroup用户组。 在运行Colocation工程时,HDFS的配置项fs.defaultFS不能配置为viewfs://ClusterX。 初始化 使用Colocation前需要设置运行用户。 private static void init() throws IOException { // 设置用户,若用户没有设置HADOOP_USER_NAME,则使用USER if (System.getenv("HADOOP_USER_NAME") == null && System.getProperty("HADOOP_USER_NAME") == null) { System.setProperty("HADOOP_USER_NAME", USER); } } 获取实例 样例:Colocation的操作使用DFSColocationAdmin和DFSColocationClient实例,在进行创建group等操作前需获取实例。 dfsAdmin = new DFSColocationAdmin(conf); dfs = new DFSColocationClient(); dfs.initialize(URI.create(conf.get("fs.defaultFS")), conf); 创建group 样例:创建一个gid01组,组中包含3个locator。 /** * 创建group * * @throws java.io.IOException */ private static void createGroup() throws IOException { dfsAdmin.createColocationGroup(COLOCATION_GROUP_GROUP01, Arrays.asList(new String[] { "lid01", "lid02", "lid03" })); } 写文件,写文件前必须创建对应的group 样例:写入testfile.txt文件。 /** * 创建并写入文件 * * @throws java.io.IOException */ private static void put() throws IOException { FSDataOutputStream out = dfs.create(new Path(TESTFILE_TXT), true, COLOCATION_GROUP_GROUP01, "lid01"); // 待写入HDFS的数据 byte[] readBuf = "Hello World".getBytes("UTF-8"); out.write(readBuf, 0, readBuf.length); out.close(); } 删除文件 样例:删除testfile.txt文件。 /** * 删除文件 * * @throws java.io.IOException */ @SuppressWarnings("deprecation") private static void delete() throws IOException { dfs.delete(new Path(TESTFILE_TXT)); } 删除group 样例:删除gid01。 /** * 删除group * * @throws java.io.IOException */ private static void deleteGroup() throws IOException { dfsAdmin.deleteColocationGroup(COLOCATION_GROUP_GROUP01); }
  • 功能简介 同分布(Colocation)功能是将存在关联关系的数据或可能要进行关联操作的数据存储在相同的存储节点上。HDFS文件同分布的特性,将那些需进行关联操作的文件存放在相同数据节点上,在进行关联操作计算时避免了到别的数据节点上获取数据,大大降低网络带宽的占用。 在使用Colocation功能之前,建议用户对Colocation的内部机制有一定了解,包括: • Colocation分配节点原理 • 扩容与Colocation分配 • Colocation与数据节点容量 Colocation分配节点原理 Colocation为locator分配数据节点的时候,locator的分配算法会根据已分配的情况,进行均衡的分配数据节点。 locator分配算法的原理是,查询目前存在的所有locators,读取所有locators所分配的数据节点,并记录其使用次数。根据使用次数,对数据节点进行排序,使用次数少的排在前面,优先选择排在前面的节点。每次选择一个节点后,计数加1,并重新排序,选择后续的节点。 扩容与Colocation分配 集群扩容之后,为了平衡地使用所有的数据节点,使新的数据节点的分配频率与旧的数据节点趋于一致,有如下两种策略可以选择,如表1所示。 表1 分配策略 编号 策略 说明 1 删除旧的locators,为集群中所有数据节点重新创建locators。 在未扩容之前分配的locators,平衡的使用了所有数据节点。当扩容后,新加入的数据节点并未分配到已经创建的locators中,所以使用Colocation来存储数据的时候,只会往旧的数据节点存储数据。 由于locators与特定数据节点相关,所以当集群进行扩容的时候,就需要对Colocation的locators分配进行重新规划。 2 创建一批新的locators,并重新规划数据存放方式。 旧的locators使用的是旧的数据节点,而新创建的locators偏重使用新的数据节点,所以需要根据实际业务对数据的使用需求,重新规划locators的使用。 一般的,建议用户在进行集群扩容之后采用策略1来重新分配locators,可以避免数据偏重使用新的数据节点。 Colocation与数据节点容量 由于使用Colocation进行存储数据的时候,会固定存储在指定的locators所对应的数据节点上面,所以如果不对locator进行规划,会造成数据节点容量不均衡。下面总结了保证数据节点容量均衡的两个主要的使用原则,如表2所示。 表2 使用原则 编号 使用原则 说明 1 所有的数据节点在locators中出现的频率一样。 如何保证频率一样:假如数据节点有N个,则创建locators的数量应为N的整数倍(N个、2N个……)。 2 对于所有locators的使用需要进行合理的数据存放规划,让数据均匀的分布在这些locators中。 无 HDFS的二次开发过程中,可以获取DFSColocationAdmin和DFSColocationClient实例,进行从location创建group、删除group、写文件和删除文件的操作。 使用Colocation功能,用户指定了DataNode,会造成某些节点上数据量很大。数据倾斜严重,导致HDFS写任务失败。 由于数据倾斜,导致MapReduce只会在某几个节点访问,造成这些节点上负载很大,而其他节点闲置。 针对单个应用程序任务,只能使用一次DFSColocationAdmin和DFSColocationClient实例。如果每次对文件系统操作都获取此实例,会创建过多HDFS链接,消耗HDFS资源。 Colocation提供了文件同分布的功能,执行集群balancer或mover操作时,会移动数据块,使Colocation功能失效。因此,使用Colocation功能时,建议将HDFS配置项dfs.datanode.block-pinning.enabled设置为true,此时执行集群Balancer或Mover操作时,使用Colocation写入的文件将不会被移动,从而保证了文件同分布。
  • 操作步骤 客户端机器必须安装有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_nosec.py”为Python客户端样例代码,“python-examples/pyhs2/haconnection.py”为Python客户端接口API。“hive_python_client”脚本提供了直接执行SQL的功能,如hive_python_client 'show tables'。该功能只适用于常规简单的SQL,并且需要依赖ZooKeeper的客户端。
  • 操作步骤 客户端机器必须安装有Python3,其版本不低于3.6,最高不能超过3.8。 在客户端机器的命令行终端输入python3可查看Python版本号。如下显示Python版本为3.8.2。 Python 3.8.2 (default, Jun 23 2020, 10:26:03) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux Type "help", "copyright", "credits" or "license" for more information. 客户端机器必须安装有setuptools,版本可取47.3.1。 具体软件,请到对应的官方网站获取。 https://pypi.org/project/setuptools/#files 将下载的setuptools压缩文件复制到客户端机器上,解压后进入解压目录,在客户端机器的命令行终端执行python3 setup.py install。 如下内容表示安装setuptools的47.3.1版本成功。 Finished processing dependencies for setuptools==47.3.1 若提示setuptools的47.3.1版本安装不成功,则需要检查环境是否有问题或是Python自身原因导致的。 安装Python客户端到客户端机器。 参考获取MRS应用开发样例工程,获取样例代码解压目录中“src\hive-examples”目录下的样例工程文件夹“python3-examples”。 进入“python3-examples”文件夹。 根据python3的版本,选择进入“dependency_python3.6”或“dependency_python3.7”或“dependency_python3.8”或“dependency_python3.9”(MRS 3.3.0及之后版本支持)文件夹。 执行whereis easy_install命令,找到easy_install程序路径。如果有多个路径,使用easy_install --version确认选择setuptools对应版本的easy_install,如/usr/local/bin/easy_install。 MRS 3.2.0之前版本,使用对应的easy_install命令,依次安装dependency_python3.x文件夹下的egg文件。如: /usr/local/bin/easy_install future-0.18.2-py3.8.egg 输出以下关键内容表示安装egg文件成功。 Finished processing dependencies for future==0.18.2 对于“dependency_python3.x”文件夹下同时存在aarch64与x86_64版本的“egg”文件,需要根据操作系统选取其中一个版本安装即可,使用uname -p命令确认当前操作系统架构。 MRS 3.2.0及之后版本,使用对应的easy_install命令,安装dependency_python3.x文件夹下的egg文件,egg文件存在依赖关系,可使用通配符安装,如: “dependency_python3.6”目录: /usr/local/bin/easy_install future*egg six*egg python*egg sasl-*linux-$(uname -p).egg thrift-*egg thrift_sasl*egg “dependency_python3.7”目录: /usr/local/bin/easy_install future*egg six*egg sasl-*linux-$(uname -p).egg thrift-*egg thrift_sasl*egg “dependency_python3.8”目录: /usr/local/bin/easy_install future*egg six*egg python*egg sasl-*linux-$(uname -p).egg thrift-*linux-$(uname -p).egg thrift_sasl*egg “dependency_python3.9”目录(MRS 3.3.0及之后版本): /usr/local/bin/easy_install future*egg six*egg sasl-*linux-$(uname -p).egg six-*.egg thrift-*linux-$(uname -p).egg thrift_sasl*egg 每个egg文件安装输出以下关键内容表示安装成功。 Finished processing dependencies for *** 安装成功后,“python3-examples/pyCLI_nosec.py”为Python客户端样例代码,“python3-examples/pyhive/hive.py”为Python客户端接口API。
  • SpringBoot样例工程的命令行形式运行 在IDEA界面左下方单击“Terminal”进入终端,执行命令mvn clean package进行编译。 当输出“BUILD SUCCESS”,表示编译成功,如下图所示。编译成功后将会在样例工程的target下生成含有“-with-dependencies”字段的Jar包。 在Windows或Linux上创建一个目录作为运行目录,如“D:\hive-rest-client-example”(Windows环境)或“/opt/hive-rest-client-example”(Linux环境),将1中生成的“target”目录下包名中含有“-with-dependencies”字段的Jar包放进该路径下,并在该目录下创建子目录“src/main/resources"。将hive-rest-client-example工程resources目录下的所有文件复制到“resources”下。 执行以下命令启动SpringBoot服务: 在Windows环境下执行: cd /d d:\hive-rest-client-example java -jar hive-rest-client-example-8.1.0.1-3.5.1-SNAPSHOT-jar-with-dependencies.jar 在Linux环境下执行: chmod +x /opt/hive-rest-client-example -R cd /opt/hive-rest-client-example java -jar hive-rest-client-example-8.1.0.1-3.5.1-SNAPSHOT-jar-with-dependencies.jar 以上Jar包名称仅供参考,具体名称以实际生成为主。 调用Hive的SpringBoot样例接口触发样例代码运行: Windows环境运行方式: 打开浏览器,输入:http://localhost:8080/hive/example/executesql。 Linux环境下执行运行方式: 在2中存放Jar的节点上执行curl http://localhost:8080/hive/example/executesql命令。 运行样例代码时日志中可能会打印以下日志信息,虽然日志级别显示ERROR,但是不影响执行结果: ERROR 51320 --- [c-8-EventThread] o.a.c.framework.imps.EnsembleTracker : Invalid config event received: {version=100000000, server.48=ZooKeeper节点IP地址:ZooKeeper端口号:ZooKeeper端口号:participant...} 查看样例代码中的HQL所查询出的结果。 Windows环境运行成功结果会有如下信息: =========================== Hive Example Start =========================== Start create table. Table created successfully. Start to insert data into the table. Inserting data to the table succeeded. Start to query table data. Query result : employees_infoa.id employees_infoa.age employees_infoa.name 1 31 SJK 2 25 HS 3 28 HT Querying table data succeeded. Start to delete the table. Table deleted successfully. =========================== Hive Example End =========================== Linux环境运行成功结果会有如下信息: =========================== Hive Example Start =========================== Start create table. Table created successfully. Start to insert data into the table. Inserting data to the table succeeded. Start to query table data. Query result : employees_infoa.id employees_infoa.age employees_infoa.name 1 31 SJK 2 25 HS 3 28 HT Querying table data succeeded. Start to delete the table. Table deleted successfully. =========================== Hive Example End ===========================
  • 扩展使用 配置Hive中间过程的 数据加密 指定表的格式为RCFile(推荐使用)或SequenceFile,加密算法为ARC4Codec。SequenceFile是Hadoop特有的文件格式,RCFile是Hive优化的文件格式。RCFile优化了列存储,在对大表进行查询时,综合性能表现比SequenceFile更优。 set hive.exec.compress.output=true; set hive.exec.compress.intermediate=true; set hive.intermediate.compression.codec=org.apache.hadoop.io.encryption.arc4.ARC4Codec; 自定义函数,具体内容请参见创建Hive用户自定义函数。
  • 样例代码 -- 查看薪水支付币种为美元的雇员联系方式. SELECT a.name, b.tel_phone, b.email FROM employees_info a JOIN employees_contact b ON(a.id = b.id) WHERE usd_flag='D'; -- 查询入职时间为2014年的雇员编号、姓名等字段,并将查询结果加载进表employees_info_extended中的入职时间为2014的分区中. INSERT OVERWRITE TABLE employees_info_extended PARTITION (entrytime = '2014') SELECT a.id, a.name, a.usd_flag, a.salary, a.deductions, a.address, b.tel_phone, b.email FROM employees_info a JOIN employees_contact b ON (a.id = b.id) WHERE a.entrytime = '2014'; -- 使用Hive中已有的函数COUNT(),统计表employees_info中有多少条记录. SELECT COUNT(*) FROM employees_info; -- 查询使用以“cn”结尾的邮箱的员工信息. SELECT a.name, b.tel_phone FROM employees_info a JOIN employees_contact b ON (a.id = b.id) WHERE b.email like '%cn';
  • 数据规划 发布者Job使用自定义算子每秒钟产生10000条数据 数据包含两个属性:分别是Int和String类型 配置文件 nettyconnector.registerserver.topic.storage:设置NettySink的IP、端口及并发度信息在第三方注册服务器上的路径(必填),例如: nettyconnector.registerserver.topic.storage: /flink/nettyconnector nettyconnector.sinkserver.port.range:设置NettySink的端口范围(必填),例如: nettyconnector.sinkserver.port.range: 28444-28943 nettyconnector.sinkserver.subnet:设置网络所属域,例如: nettyconnector.sinkserver.subnet: 10.162.0.0/16 接口说明 注册服务器接口 注册服务器用来保存NettySink的IP、端口以及并发度信息,以便NettySource连接使用。为用户提供以下接口: public interface RegisterServerHandler { /** * 启动注册服务器 * @param configuration Flink的Configuration类型 */ void start(Configuration configuration) throws Exception; /** *注册服务器上创建Topic节点(目录) * @param topic topic节点名称 */ void createTopicNode(String topic) throw Exception; /** *将信息注册到某个topic节点(目录)下 * @param topic 需要注册到的目录 * @param registerRecord 需要注册的信息 */ void register(String topic, RegisterRecord registerRecord) throws Exception; /** *删除topic节点 * @param topic 待删除topic */ void deleteTopicNode(String topic) throws Exception; /** *注销注册信息 *@param topic 注册信息所在的topic *@param recordId 待注销注册信息ID */ void unregister(String topic, int recordId) throws Exception; /** * 查询信息 * @param 查询信息所在的topic *@recordId 查询信息的ID */ RegisterRecord query(String topic, int recordId) throws Exception; /** * 查询某个Topic是否存在 * @param topic */ Boolean isExist(String topic) throws Exception; /** *关闭注册服务器句柄 */ void shutdown() throws Exception; 工程基于以上接口提供了ZookeeperRegisterHandler供用户使用。 NettySink算子 Class NettySink(String name, String topic, RegisterServerHandler registerServerHandler, int numberOfSubscribedJobs) name:为本NettySink的名称。 topic:为本NettySink产生数据的Topic,每个不同的NettySink(并发度除外)必须使用不同的TOPIC,否则会引起订阅混乱,数据无法正常分发。 registerServerHandler:为注册服务器的句柄。 numberOfSubscribedJobs:为订阅本NettySink的作业数量,该数量必须是明确的,只有当所有订阅者都连接上NettySink,NettySink才发送数据。 NettySource算子 Class NettySource(String name, String topic, RegisterServerHandler registerServerHandler) name:为本NettySource的名称,该NettySource必须是唯一的(并发度除外),否则,连接NettySink时会出现冲突,导致无法连接。 topic:订阅的NettySink的topic。 registerServerHandler:为注册服务器的句柄。 NettySource的并发度必须与NettySource的并发度相同,否则无法正常创建连接。
  • 权限要求 表1 操作权限要求 操作类型/作用对象 操作 权限要求 DATABASE CREATE DATABASE dbname [LOCATION "hdfs_path"] 如果指定了HDFS路径hdfs_path,需要是路径hdfs_path的所有者和具有RWX权限。 DROP DATABASE dbname 拥有数据库dbname的所有权。 ALTER DATABASE dbnameSET OWNERuser_or_role 具有admin权限。 TABLE CREATE TABLE table_a 拥有数据库的CREATE权限。 CREATE TABLE table_aAS SELECTtable_b 拥有数据库的CREATE权限,对表table_b拥有SELECT权限。 CREATE TABLE table_a LIKEtable_b 拥有数据库的CREATE权限。 CREATE [EXTERNAL] TABLE table_a LOCATION "hdfs_path" 拥有数据库的CREATE权限,是HDFS上的数据路径hdfs_path的所有者和具有RWX权限。 DROP TABLE table_a 是表table_a的所有者。 ALTER TABLE table_a SET LOCATION "hdfs_path" 是表table_a的所有者,是HDFS上的数据路径hdfs_path的所有者和具有RWX权限。 ALTER TABLE table_aSETFILEFORMAT 是表table_a的所有者。 TRUNCATE TABLE table_a 是表table_a的所有者。 ANALYZE TABLE table_a COMPUTE STATIS TICS 对表table_a拥有SELECT和INSERT权限。 SHOW TBLPROPERTIES table_a 对表table_a拥有SELECT权限。 SHOW CREATE TABLE table_a 对表table_a拥有SELECT且带有WITH GRANT OPTION的权限。 Alter ALTER TABLE table_a ADD COLUMN 是表table_a的所有者。 ALTER TABLE table_a REPLACE COLUMN 是表table_a的所有者。 ALTER TABLE table_a RENAME 是表table_a的所有者。 ALTER TABLE table_a SET SERDE 是表table_a的所有者。 ALTER TABLE table_a CLUSTER BY 是表table_a的所有者。 PARTITION ALTER TABLE table_a ADD PARTITIONpartition_spec LOCATION "hdfs_path" 对表table_a拥有INSERT权限,是HDFS上的数据路径hdfs_path的所有者和具有RWX权限。 ALTER TABLE table_a DROP PARTITIONpartition_spec 对表table_a拥有DELETE权限。 ALTER TABLE table_a PARTITIONpartition_spec SET LOCATION "hdfs_path" 是表table_a的所有者,是HDFS上的数据路径hdfs_path的所有者和具有RWX权限。 ALTER TABLE table_aPARTITIONpartition_spec SET FILEFORMAT 是表table_a的所有者。 LOAD LOAD INPATH 'hdfs_path' INTO TABLE table_a 对表table_a拥有INSERT权限,是HDFS上的数据路径hdfs_path的所有者和具有RWX权限。 INSERT INSERT TABLE table_a SELECT FROMtable_b 对表table_a拥有INSERT权限,对表table_b拥有SELECT权限。拥有Yarn的default队列的Submit权限。 SELECT SELECT * FROM table_a 对表table_a拥有SELECT权限。 SELECT FROM table_aJOINtable_b 对表table_a、表table_b拥有SELECT权限,拥有Yarn的default队列的Submit权限。 SELECT FROM (SELECT FROM table_aUNION ALL SELECT FROMtable_b) 对表table_a、表table_b拥有SELECT权限。拥有Yarn的default队列的Submit权限。 EXPLAIN EXPLAIN [EXTENDED|DEPENDENCY] query 对相关表目录具有RX权限。 VIEW CREATE VIEW view_name AS SELECT ... 对相关表拥有SELECT且带有WITH GRANT OPTION的权限。 ALTER VIEW view_name RENAME TOnew_view_name 是视图view_name的所有者。 DROP VIEW view_name 是视图view_name的所有者。 FUNCTION CREATE [TEMPORARY] FUNCTION function_name AS 'class_name' 具有admin权限。 DROP [TEMPORARY] function_name 具有admin权限。 MACRO CREATE TEMPORARY MACRO macro_name ... 具有admin权限。 DROP TEMPORARY MACRO macro_name 具有admin权限。 以上所有的操作只要拥有Hive的admin权限以及对应的HDFS目录权限就能做相应的操作。 如果当前组件使用了Ranger进行权限控制,需基于Ranger配置相关策略进行权限管理,具体操作可参考添加Hive的Ranger访问权限策略章节。
  • 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新增如下特性: 基于Kerberos技术的安全认证机制。 数据文件加密机制。 完善的权限管理。 开源社区的Hive特性,请参见https://cwiki.apache.org/confluence/display/hive/designdocs。
  • 常用概念 keytab文件 存放用户信息的密钥文件。应用程序采用此密钥文件在MRS产品中进行API方式认证。 客户端 客户端直接面向用户,可通过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的客户端。
  • Hive WebHCat接口介绍 以下示例的IP为WebHCat的业务IP,端口为安装时设置的WebHCat HTTP端口。 需要在安装客户端的机器上进行kinit认证操作后才可执行示例操作。 以下示例均为https协议的示例,若要使用http协议,需要执行以下操作: 将REST接口切换成HTTP协议方式,请参见配置基于HTTPS/HTTP协议的REST接口。 将示例中的“--insecure”去掉,将https替换成http,例如 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1/status' 更改为 curl -i -u : --negotiate 'http://10.64.35.144:9111/templeton/v1/status' 执行操作前需确保使用的curl版本在7.34.0以上。 可以使用以下命令查看curl版本: curl -V :version(GET) 描述 查询WebHCat支持的返回类型列表。 URL https://www.myserver.com/templeton/:version 参数 参数 描述 :version WebHCat版本号(当前必须是v1)。 返回结果 参数 描述 responseTypes WebHCat支持的返回类型列表。 例子 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1' status (GET) 描述 获取当前服务器的状态 URL https://www.myserver.com/templeton/v1/status 参数 无 返回结果 参数 描述 status WebHCat连接正常,返回OK。 version 字符串,包含版本号,比如v1。 例子 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1/status' version (GET) 描述 获取服务器WebHCat的版本 URL https://www.myserver.com/templeton/v1/version 参数 无 返回结果 参数 描述 supportedVersions 所有支持的版本。 version 当前服务器WebHCat的版本。 例子 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1/version' version/hive (GET) 描述 获取服务器Hive的版本 URL https://www.myserver.com/templeton/v1/version/hive 参数 无 返回结果 参数 描述 module hive version Hive的版本 例子 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1/version/hive' version/hadoop (GET) 描述 获取服务器Hadoop的版本 URL https://www.myserver.com/templeton/v1/version/hadoop 参数 无 返回结果 参数 描述 module hadoop version Hadoop的版本 例子 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1/version/hadoop' ddl (POST) 描述 执行DDL语句 URL https://www.myserver.com/templeton/v1/ddl 参数 参数 描述 exec 需要执行的HCatalog DDL语句。 group 当DDL是创建表时,创建表使用的用户组。 permissions 当DDL是创建表时,创建表使用的权限,格式为rwxr-xr-x。 返回结果 参数 描述 stdout HCatalog执行时的标准输出值,可能为空。 stderr HCatalog执行时的错误输出,可能为空。 exitcode HCatalog的返回值。 例子 curl -i -u : --insecure --negotiate -d exec="show tables" 'https://10.64.35.144:9111/templeton/v1/ddl' ddl/database (GET) 描述 列出所有的数据库 URL https://www.myserver.com/templeton/v1/ddl/database 参数 参数 描述 like 用来匹配数据库名的正则表达式。 返回结果 参数 描述 databases 数据库名 例子 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1/ddl/database' ddl/database/:db (GET) 描述 获取指定数据库的详细信息 URL https://www.myserver.com/templeton/v1/ddl/database/:db 参数 参数 描述 :db 数据库名 返回结果 参数 描述 location 数据库位置 comment 数据库的备注,如果没有备注则不存在 database 数据库名 owner 数据库的所有者 owertype 数据库所有者的类型 例子 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1/ddl/database/default' ddl/database/:db (PUT) 描述 创建数据库 URL https://www.myserver.com/templeton/v1/ddl/database/:db 参数 参数 描述 :db 数据库名 group 创建数据库时使用的用户组 permission 创建数据库时使用的权限 location 数据库的位置 comment 数据库的备注,比如描述 properties 数据库属性 返回结果 参数 描述 database 新创建的数据库的名字 例子 curl -i -u : --insecure --negotiate -X PUT -HContent-type:application/json -d '{"location": "/tmp/a", "comment": "my db", "properties": {"a": "b"}}' 'https://10.64.35.144:9111/templeton/v1/ddl/database/db2' ddl/database/:db (DELETE) 描述 删除数据库 URL https://www.myserver.com/templeton/v1/ddl/database/:db 参数 参数 描述 :db 数据库名 ifExists 如果指定数据库不存在,Hive会返回错误,除非设置了ifExists为true。 option 将参数设置成cascade或者restrict。如果选择cascade,将清除一切,包括数据和定义。如果选择restrict,表格内容为空,模式也将不存在。 返回结果 参数 描述 database 删除的数据库名字 例子 curl -i -u : --insecure --negotiate -X DELETE 'https://10.64.35.144:9111/templeton/v1/ddl/database/db3?ifExists=true' ddl/database/:db/table (GET) 描述 列出数据库下的所有表 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table 参数 参数 描述 :db 数据库名 like 用来匹配表名的正则表达式 返回结果 参数 描述 database 数据库名字 tables 数据库下表名列表 例子 curl -i -u : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1/ddl/database/default/table' ddl/database/:db/table/:table (GET) 描述 获取表的详细信息 URL https://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 : --insecure --negotiate 'https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1?format=extended' ddl/database/:db/table/:table (PUT) 描述 创建表 URL https://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 : --insecure --negotiate -X PUT -HContent-type:application/json -d '{"columns": [{"name": "id", "type": "int"}, {"name": "name","type": "string"}], "comment": "hello","format": {"storedAs": "orc"} }' 'https://10.64.35.144:9111/templeton/v1/ddl/database/db3/table/tbl1' ddl/database/:db/table/:table (POST) 描述 重命名表 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table 参数 参数 描述 :db 数据库名 :table 已有表名 rename 新表表名 返回结果 参数 描述 database 数据库名 table 新表表名 例子 curl -i -u : --insecure --negotiate -d rename=table1 'https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/tbl1' ddl/database/:db/table/:table (DELETE) 描述 删除表 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table 参数 参数 描述 :db 数据库名 :table 表名 ifExists 当设置为true时,不报错。 返回结果 参数 描述 database 数据库名 table 表名 例子 curl -i -u : --insecure --negotiate -X DELETE 'https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/table2?ifExists=true' ddl/database/:db/table/:existingtable/like/:newtable (PUT) 描述 创建一张和已经存在的表一样的表 URL https://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 : --insecure --negotiate -X PUT -HContent-type:application/json -d '{"ifNotExists": "true"}' 'https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/like/tt1' ddl/database/:db/table/:table/partition(GET) 描述 列出表的分区信息 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/partition 参数 参数 描述 :db 数据库名 :table 表名 返回结果 参数 描述 database 数据库名 table 表名 partitions 分区属性值和分区名 例子 curl -i -u : --insecure --negotiate https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/x1/partition ddl/database/:db/table/:table/partition/:partition(GET) 描述 列出表的某个具体分区的信息 URL https://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 : --insecure --negotiate https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/x1/partition/dt=1 ddl/database/:db/table/:table/partition/:partition(PUT) 描述 增加一个表分区 URL https://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 : --insecure --negotiate -X PUT -HContent-type:application/json -d '{}' https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/x1/partition/dt=10 ddl/database/:db/table/:table/partition/:partition(DELETE) 描述 删除一个表分区 URL https://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 : --insecure --negotiate -X DELETE -HContent-type:application/json -d '{}' https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/x1/partition/dt=10 ddl/database/:db/table/:table/column(GET) 描述 获取表的column列表 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/column 参数 参数 描述 :db 数据库名 :table 表名 返回结果 参数 描述 database 数据库名 table 表名 columns 列名字和类型 例子 curl -i -u : --insecure --negotiate https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/column ddl/database/:db/table/:table/column/:column(GET) 描述 获取表的某个具体的column的信息 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/column/:column 参数 参数 描述 :db 数据库名 :table 表名 :column 列名 返回结果 参数 描述 database 数据库名 table 表名 column 列名字和类型 例子 curl -i -u : --insecure --negotiate https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/column/id ddl/database/:db/table/:table/column/:column(PUT) 描述 增加表的一列 URL https://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 : --insecure --negotiate -X PUT -HContent-type:application/json -d '{"type": "string", "comment": "new column"}' https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/column/name ddl/database/:db/table/:table/property(GET) 描述 获取表的property URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/property 参数 参数 描述 :db 数据库名 :table 表名 返回结果 参数 描述 database 数据库名 table 表名 properties 属性列表 例子 curl -i -u : --insecure --negotiate https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/property ddl/database/:db/table/:table/property/:property(GET) 描述 获取表的某个具体的property的值 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/property/:property 参数 参数 描述 :db 数据库名 :table 表名 :property 属性名 返回结果 参数 描述 database 数据库名 table 表名 property 属性列表 例子 curl -i -u : --insecure --negotiate https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/property/last_modified_by ddl/database/:db/table/:table/property/:property(PUT) 描述 增加表的property的值 URL https://www.myserver.com/templeton/v1/ddl/database/:db/table/:table/property/:property 参数 参数 描述 :db 数据库名 :table 表名 :property 属性名 value 属性值 返回结果 参数 描述 database 数据库名 table 表名 property 属性名 例子 curl -i -u : --insecure --negotiate -X PUT -HContent-type:application/json -d '{"value": "my value"}' https://10.64.35.144:9111/templeton/v1/ddl/database/default/table/t1/property/mykey mapreduce/jar(POST) 描述 执行MR任务,在执行之前,需要将MR的jar包上传到HDFS中 URL https://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 : --insecure --negotiate -d jar="/tmp/word.count-0.0.1-SNAPSHOT.jar" -d class=com.huawei.word.count.WD -d statusdir="/output" -d enablelog=true "https://10.64.35.144:9111/templeton/v1/mapreduce/jar" mapreduce/streaming(POST) 描述 以Streaming方式提交MR任务 URL https://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 : --insecure --negotiate -d input=/input -d output=/oooo -d mapper=/bin/cat -d reducer="/usr/bin/wc -w" -d statusdir="/output" 'https://10.64.35.144:9111/templeton/v1/mapreduce/streaming' 本接口的使用需要前置条件,请参阅“开发规范”中的Hive规则。 /hive(POST) 描述 执行Hive命令 URL https://www.myserver.com/templeton/v1/hive 参数 参数 描述 execute hive命令,包含整个和短的Hive命令。 file 包含hive命令的HDFS文件。 files 需要复制到集群的文件名,以逗号分隔。 arg 设置argument。 define 设置hive配置,格式:define=key=value。使用post语句时需要配置实例的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 : --insecure --negotiate -d execute="select count(*) from t1" -d define=hive.exec.scratchdir=/tmp/hive-scratch -d statusdir="/output" "https://10.64.35.144:9111/templeton/v1/hive" jobs(GET) 描述 获取所有的job id URL https://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都将返回。不仅仅是用户所拥有的job。 返回结果 参数 描述 id Job id detail 如果showall为true,那么显示detail信息,否则为null。 例子 curl -i -u : --insecure --negotiate "https://10.64.35.144:9111/templeton/v1/jobs" jobs/:jobid(GET) 描述 获取指定job的信息 URL https://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 : --insecure --negotiate "https://10.64.35.144:9111/templeton/v1/jobs/job_1440386556001_0255" jobs/:jobid(DELETE) 描述 kill任务 URL https://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 : --insecure --negotiate -X DELETE "https://10.64.35.143:9111/templeton/v1/jobs/job_1440386556001_0265" 父主题: Hive对外接口介绍
  • 操作步骤 编译JDBC样例程序: 在IDEA界面左下方单击“Terminal”进入终端,执行命令mvn clean package进行编译。 当输出“BUILD SUCCESS”,表示编译成功,如下图所示。编译成功后将会在样例工程的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!
共100000条