华为云用户手册

  • 执行Impala SQL 执行Impala SQL,注意Impala SQL不能以";"结尾。 正确示例: String sql = "SELECT COUNT(*) FROM employees_info";Connection connection = DriverManager.getConnection(url, "", "");PreparedStatement statement = connection.prepareStatement(sql);resultSet = statement.executeQuery(); 错误示例: String sql = "SELECT COUNT(*) FROM employees_info;";Connection connection = DriverManager.getConnection(url, "", "");PreparedStatement statement = connection.prepareStatement(sql);resultSet = statement.executeQuery();
  • 常用概念 Topic Kafka维护的同一类的消息称为一个Topic。 Partition 每一个Topic可以被分为多个Partition,每个Partition对应一个可持续追加的、有序不可变的log文件。 Producer 将消息发往Kafka topic中的角色称为Producer。 Consumer 从Kafka topic中获取消息的角色称为Consumer。 Broker Kafka集群中的每一个节点服务器称为Broker。 keytab file 存放用户信息的密钥文件。应用程序采用此密钥文件在集群中进行API方式认证。 父主题: 概述
  • Impala SQL语法规则之判空 判断字段是否为“空”,即没有值,使用“is null”;判断不为空,即有值,使用“is not null”。 要注意的是,在Impala SQL中String类型的字段若是空字符串, 即长度为0,那么对它进行is null的判断结果是False。此时应该使用“col = '' ”来判断空字符串;使用“col != '' ”来判断非空字符串。 正确示例: select * from default.tbl_src where id is null;select * from default.tbl_src where id is not null;select * from default.tbl_src where name = '';select * from default.tbl_src where name != ''; 错误示例: select * from default.tbl_src where id = null;select * from default.tbl_src where id != null;select * from default.tbl_src where name is null;select * from default.tbl_src where name is not null;注:表tbl_src的id字段为Int类型,name字段为String类型。
  • Hive JDBC驱动的加载 客户端程序以JDBC的形式连接Impalad时,需要首先加载Hive的JDBC驱动类org.apache.hive.jdbc.HiveDriver。 所以在客户端程序开始前,必须先使用当前类加载器加载该驱动类。 如果classpath下没有相应的jar包,则客户端程序抛出Class Not Found异常并退出。 如下: Class.forName("org.apache.hive.jdbc.HiveDriver").newInstance();
  • 获取数据库连接 使用JDK的驱动管理类java.sql.DriverManager来获取一个Impalad的数据库连接。 Impalad的数据库URL为url="jdbc:hive2://xxx.xxx.xxx.xxx:21050;auth=KERBEROS;principal=impala/hadoop.hadoop.com@HADOOP.COM;user.principal=impala/hadoop.hadoop.com;user.keytab=conf/impala.keytab"; 以上已经经过安全认证,所以用户名和密码为null或者空。 // 建立连接 connection = DriverManager.getConnection(url, "", "");
  • 开发思路 数据准备。 创建三张表,雇员信息表“employees_info”、雇员联络信息表“employees_contact”、雇员信息扩展表“employees_info_extended”。 雇员信息表“employees_info”的字段为雇员编号、姓名、支付薪水币种、薪水金额、缴税税种、工作地、入职时间,其中支付薪水币种“R”代表人民币,“D”代表美元。 雇员联络信息表“employees_contact”的字段为雇员编号、电话号码、e-mail。 雇员信息扩展表“employees_info_extended”的字段为雇员编号、姓名、电话号码、e-mail、支付薪水币种、薪水金额、缴税税种、工作地,分区字段为入职时间。 创建表代码实现请见创建表。 加载雇员信息数据到雇员信息表“employees_info”中。 加载数据代码实现请见数据加载。 雇员信息数据如表1所示。 表1 雇员信息数据 编号 姓名 支付薪水币种 薪水金额 缴税税种 工作地 入职时间 1 Wang R 8000.01 personal income tax&0.05 China:Shenzhen 2014 3 Tom D 12000.02 personal income tax&0.09 America:NewYork 2014 4 Jack D 24000.03 personal income tax&0.09 America:Manhattan 2014 6 Linda D 36000.04 personal income tax&0.09 America:NewYork 2014 8 Zhang R 9000.05 personal income tax&0.05 China:Shanghai 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 数据分析。 数据分析代码实现,请见数据查询。 查看薪水支付币种为美元的雇员联系方式。 查询入职时间为2014年的雇员编号、姓名等字段,并将查询结果加载进表employees_info_extended中的入职时间为2014的分区中。 统计表employees_info中有多少条记录。 查询使用以“cn”结尾的邮箱的员工信息。 提交数据分析任务,统计表employees_info中有多少条记录。实现请见样例程序指导。
  • 操作步骤 编译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",将配置并导入JDBC/HCatalog样例工程获取的“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!_c00Delete table success!
  • 在Windows中调测程序 运行样例。 导入和修改样例后,即可在开发环境中,右击“JDBCExample.java”,选择“Run 'JDBCExample.main()'”运行对应的应用程序工程。 使用Windows访问 MRS 集群来操作Impala,有如下两种方式。 方法一:申请一台Windows的E CS 访问MRS集群操作Impala,在安装开发环境后可直接运行样例代码。 在“现有集群”列表中,单击已创建的集群名称。 记录集群的“可用分区”、“虚拟私有云”,以及Master节点的“默认安全组”。 在弹性云服务管理控制台,创建一个新的弹性云服务器。 弹性云服务器的“可用分区”、“虚拟私有云”、“安全组”,需要和待访问集群的配置相同。 选择一个Windows系统的公共镜像。 其他配置参数详细信息,请参见自定义购买弹性云服务器。 方法二:使用本机访问MRS集群操作Impala,在安装开发环境后并完成以下步骤后再运行样例代码。 为任意一个Core节点绑定弹性公网IP,完成后将该IP地址配置在开发样例的client.properties下的impala-server配置项中,用于访问Impala服务、提交SQL语句。 在弹性云服务器页面申请并绑定弹性云服务器IP,具体请参考为弹性云服务器申请和绑定弹性公网IP。 为MRS集群开放安全组规则。在集群Master节点和Core节点的安全组添加安全组规则使弹性云服务器可以访问集群,具体请参考配置安全组规则。 修改导入样例的“krb5.conf”中"kdc"、"admin_server"和“kpasswd_server”三个参数的ip,使其对应于KrbServer服务中对应的弹性公网IP(Kerberos服务默认在Master节点上,此处取Master节点的公网IP)。 样例中的client.properties配置如下: auth = KERBEROS ##kerberos模式principal = impala/node-ana-corexphm@10530B19_8446_4846_97BD_87880A2535DF.COM ##所要连接的impalad实例使用的principalimpala-server = XX.XX.XX.XX:21050 ##指定要连接的impalad实例所在Core节点绑定的服务地址,方式二需要填写步骤1中绑定的弹性公网IP 查看结果。 查看样例代码中的Impala SQL所查询出的结果,运行成功结果会有如下信息。 JDBC客户端运行及结果查看。 Create table success!_c00Delete table success! 父主题: 调测程序
  • Impala SQL编写之不支持隐式类型转换 查询语句使用字段的值做过滤时,不支持使用Hive类似的隐式类型转换来编写Impala SQL: Impala示例: select * from default.tbl_src where id = 10001;select * from default.tbl_src where name = 'TestName'; Hive示例(支持隐式类型转换): select * from default.tbl_src where id = '10001';select * from default.tbl_src where name = TestName; 表tbl_src的id字段为Int类型,name字段为String类型。
  • HBase样例工程介绍 MRS样例工程获取地址为https://github.com/huaweicloud/huaweicloud-mrs-example,切换分支为与MRS集群相匹配的版本分支,然后下载压缩包到本地后解压,即可获取各组件对应的样例代码工程。 当前MRS提供以下HBase相关样例工程: 表1 HBase相关样例工程 样例工程位置 描述 hbase-examples/hbase-example HBase数据读写操作的应用开发示例。 通过调用HBase接口可实现创建用户表、导入用户数据、增加用户信息、查询用户信息及为用户表创建二级索引等功能,相关业务场景介绍请参见典型场景说明。 hbase-examples/hbase-rest-example HBase Rest接口应用开发示例。 使用Rest接口实现查询HBase集群信息、获取表、操作NameSpace、操作表等功能,相关样例介绍请参见HBase Rest接口调用样例程序。 hbase-examples/hbase-thrift-example 访问HBase ThriftServer应用开发示例。 访问ThriftServer操作表、向表中写数据、从表中读数据,相关样例介绍请参见访问HBase ThriftServer样例程序。 hbase-examples/hbase-zk-example HBase访问ZooKeeper应用开发示例。 在同一个客户端进程内同时访问MRS ZooKeeper和第三方的ZooKeeper,其中HBase客户端访问MRS ZooKeeper,客户应用访问第三方ZooKeeper。相关样例介绍请参见HBase访问多个ZooKeeper样例程序。 父主题: 概述
  • 功能简介 本小节介绍了如何使用Impala SQL建内部表、外部表的基本操作。创建表主要有以下三种方式。 自定义表结构,以关键字EXTERNAL区分创建内部表和外部表。 内部表,如果对数据的处理都由Impala完成,则应该使用内部表。在删除内部表时,元数据和数据一起被删除。 外部表,如果数据要被多种工具(如Pig等)共同处理,则应该使用外部表,可避免对该数据的误操作。删除外部表时,只删除掉元数据。 根据已有表创建新表,使用CREATE LIKE句式,完全复制原有的表结构,包括表的存储格式。 根据查询结果创建新表,使用CREATE AS SELECT句式。 这种方式比较灵活,可以在复制原表表结构的同时指定要复制哪些字段,不包括表的存储格式。
  • 应用开发简介 Impala直接对存储在HDFS,HBase 或 对象存储服务 (OBS)中的Hadoop数据提供快速,交互式SQL查询。除了使用相同的统一存储平台之外,Impala还使用与Apache Hive相同的元数据,SQL语法(Hive SQL),ODBC驱动程序和用户界面(Hue中的Impala查询UI)。这为实时或面向批处理的查询提供了一个熟悉且统一的平台。作为查询大数据的工具补充,Impala不会替代基于MapReduce构建的批处理框架,例如Hive。基于MapReduce构建的Hive和其他框架最适合长时间运行的批处理作业。 Impala主要特点如下: 支持Hive查询语言(HiveQL)中大多数的SQL-92功能,包括 SELECT,JOIN和聚合函数。 HDFS,HBase 和对象存储服务(OBS)存储,包括: HDFS文件格式:基于分隔符的text file,Parquet,Avro,SequenceFile和RCFile。 压缩编解码器:Snappy,GZIP,Deflate,BZIP。 常见的数据访问接口包括: JDBC驱动程序。 ODBC驱动程序。 Hue beeswax和Impala查询UI。 impala-shell命令行接口。 支持Kerberos身份认证。 Impala主要应用于实时查询数据的离线分析(如 日志分析 ,集群状态分析)、大规模的数据挖掘(用户行为分析,兴趣分区,区域展示)等场景下。 父主题: 概述
  • 样例代码 -- 从本地文件系统/opt/impala_examples_data/目录下将employee_info.txt加载进employees_info表中. LOAD DATA LOCAL INPATH '/opt/impala_examples_data/employee_info.txt' OVERWRITE INTO TABLE employees_info;-- 从HDFS上/user/impala_examples_data/employee_info.txt加载进employees_info表中. LOAD DATA INPATH '/user/impala_examples_data/employee_info.txt' OVERWRITE INTO TABLE employees_info; 加载数据的实质是将数据拷贝到HDFS上指定表的目录下。 “LOAD DATA LOCAL INPATH”命令可以完成从本地文件系统加载文件到Impala的需求,但是当指定“LOCAL”时,这里的路径指的是当前连接的“Impalad”的本地文件系统的路径。
  • 常用概念 客户端 客户端直接面向用户,可通过Java API、Thrift API访问服务端进行Impala的相关操作。本文中的Impala客户端特指Impala client的安装目录,里面包含通过Java API访问Impala的样例代码。 HiveQL语言 Hive Query Language,类SQL语句,与Hive类似。 Statestore Statestore管理Impala集群中所有的Impalad实例的健康状态,并将实例健康信息广播到所有实例上。当某一个Impalad实例发生故障,比如节点异常、网络异常等,Statestore将通知其他Impalad实例,后续的查询请求等将不会向该实例分发。 Catalog Catalog实例服务将每个Impalad实例上发生的元数据变动同步到集群内其他Impalad实例,从而避免在一个Impalad实例中更改元数据,其他各个实例需要执行REFRESH操作来更新。但是,在Hive中建表,修改表等,则需要执行REFRESH或者INVALIDATE METADATA操作。 父主题: 概述
  • 开发流程 开发流程中各阶段的说明如图1和表1所示。 图1 Impala应用程序开发流程 表1 Impala应用开发的流程说明 阶段 说明 参考文档 了解基本概念 在开始开发应用前,需要了解Impala的基本概念。 常用概念 准备开发和运行环境 Impala的应用程序支持使用Java、Python两种语言进行开发。推荐使用IntelliJ IDEA工具,请根据指导完成不同语言的开发环境配置。 准备开发和运行环境 根据场景开发工程 提供了Java、Python两种不同语言的样例工程,还提供了从建表、数据加载到数据查询的样例工程。 典型场景说明 运行程序及查看结果 指导用户将开发好的程序编译提交运行并查看结果。 调测程序 父主题: 概述
  • 样例代码 使用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 = 21066, 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 iexcept Exception, e: print e
  • 操作步骤 编译JDBC样例程序: 在IDEA界面左下方单击“Terminal”进入终端,执行命令mvn clean package进行编译。 当输出“BUILD SUCCESS”,表示编译成功,如下图所示。编译成功后将会在样例工程的target下生成含有“-with-dependencies”字段的jar包。 运行JDBC样例程序: 在Linux上创建一个目录作为运行目录,如“/opt/jdbc_example”,将1中生成的“target”目录下包名中含有“-with-dependencies”字段的Jar包放进该路径下,并在该目录下创建子目录“src/main/resources",将配置并导入JDBC/HCatalog样例工程获取的“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!_c00Delete table success!
  • Hive样例工程介绍 MRS样例工程获取地址为https://github.com/huaweicloud/huaweicloud-mrs-example,切换分支为与MRS集群相匹配的版本分支,然后下载压缩包到本地后解压,即可获取各组件对应的样例代码工程。 当前MRS提供以下Hive相关样例工程: 表1 Hive相关样例工程 样例工程位置 描述 hive-examples/hive-jdbc-example hive-examples/hive-jdbc-example-multizk Hive JDBC处理数据Java示例程序。 本工程使用JDBC接口连接Hive,在Hive中执行相关数据操作。使用JDBC接口实现创建表、加载数据、查询数据等功能,还可实现在同一个客户端进程内同时访问 FusionInsight ZooKeeper和第三方的ZooKeeper,相关样例介绍请参见JDBC访问Hive样例程序。 hive-examples/hcatalog-example Hive HCatalog处理数据Java示例程序。 使用HCatalog接口实现通过Hive命令行方式对MRS Hive元数据进行数据定义和查询操作,相关样例介绍请参见HCatalog访问Hive样例程序。 hive-examples/python-examples 使用Python连接Hive执行SQL样例。 可实现使用Python对接Hive并提交数据分析任务,相关样例介绍请参见Python访问Hive样例程序。 hive-examples/python3-examples 使用Python3连接Hive执行SQL样例。 可实现使用Python3对接Hive并提交数据分析任务,相关样例介绍请参见Python3访问Hive样例程序。 父主题: 概述
  • 操作步骤 查看运行结果获取应用运行情况 HdfsExample Linux样例程序运行结果如下所示。 0 [main] INFO org.apache.hadoop.security.UserGroupInformation - Login successful for user hdfsDevelop using keytab file user.keytab1 [main] INFO com.huawei.hadoop.security.LoginUtil - Login success!!!!!!!!!!!!!!568 [main] WARN org.apache.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable582 [main] WARN org.apache.hadoop.hdfs.shortcircuit.DomainSocketFactory - The short-circuit local reads feature cannot be used because libhadoop cannot be loaded.793 [main] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to create path /user/hdfs-examples969 [main] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to write.1068 [main] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to append.1191 [main] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - result is : hi, I am bigdata. It is successful if you can see me.I append this content.1191 [main] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to read.1202 [main] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to delete the file /user/hdfs-examples/test.txt1210 [main] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to delete path /user/hdfs-examples1223 [hdfs_example_0] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to create path /user/hdfs-examples/hdfs_example_01224 [hdfs_example_1] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to create path /user/hdfs-examples/hdfs_example_11261 [hdfs_example_0] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to write.1264 [hdfs_example_1] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to write.2807 [hdfs_example_0] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to append.2810 [hdfs_example_1] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to append.2861 [hdfs_example_0] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - result is : hi, I am bigdata. It is successful if you can see me.I append this content.2861 [hdfs_example_0] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to read.2866 [hdfs_example_0] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to delete the file /user/hdfs-examples/hdfs_example_0/test.txt2874 [hdfs_example_0] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to delete path /user/hdfs-examples/hdfs_example_02874 [hdfs_example_1] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - result is : hi, I am bigdata. It is successful if you can see me.I append this content.2874 [hdfs_example_1] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to read.2879 [hdfs_example_1] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to delete the file /user/hdfs-examples/hdfs_example_1/test.txt2885 [hdfs_example_1] INFO com.huawei.bigdata.hdfs.examples.HdfsExample - success to delete path /user/hdfs-examples/hdfs_example_1 ColocationExample Linux样例程序运行结果如下所示。 0 [main] INFO com.huawei.hadoop.security.LoginUtil - JaasConfiguration loginContextName=Client principal=hdfsDevelop useTicketCache=false keytabFile=/opt/hdfsDemo/conf/user.keytab817 [main] INFO org.apache.hadoop.security.UserGroupInformation - Login successful for user hdfsDevelop using keytab file user.keytab817 [main] INFO com.huawei.hadoop.security.LoginUtil - Login success!!!!!!!!!!!!!!1380 [main] WARN org.apache.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable...Create Group has finished.Put file is running...Put file has finished.Delete file is running...Delete file has finished.Delete Group is running...Delete Group has finished.... 查看HDFS日志获取应用运行情况 您可以查看HDFS的namenode日志了解应用运行情况,并根据日志信息调整应用程序。
  • 开发流程 本文档主要基于Java API对Manager进行应用开发。 开发流程中各阶段的说明如图1和表1所示。 图1 Manager应用程序开发流程 表1 Manager应用开发的流程说明 阶段 说明 参考文档 了解基本概念 在开始开发应用前,需要了解基本认证的基本概念,了解场景需求,设计表等。 常用概念 准备开发和运行环境 Manager REST API的应用开发程序当前推荐使用Java语言进行开发,可使用IntelliJ IDEA工具。 开发和运行环境简介 准备样例工程 Manager REST API提供了不同场景下的样例程序,您可以导入样例工程进行程序学习。 配置并导入样例工程 根据场景开发工程 提供了Java语言的样例工程,包含添加用户、查找用户、修改用户、删除用户,导出用户列表等典型应用场景。 开发程序 编译并运行程序 指导用户将开发好的程序编译并提交运行。 编译并运行程序 查看程序运行结果 程序运行结果会写在用户指定的路径下。用户还可以通过UI查看应用运行情况。 查看Windows调测结果 父主题: 概述
  • 开发和运行环境简介 在进行开发时,要准备的开发和运行环境如表1所示。 表1 开发和运行环境 准备项 说明 操作系统 Windows系统,支持Windows 7以上版本。 本地开发环境需要和集群业务平面网络互通。 安装JDK 开发和运行环境的基本配置,版本要求如下: JDK版本号应该与用户要访问的FusionInsight Manager使用的版本号一致,具体的版本号可以查看对应版本文档或咨询系统管理员。 例如FusionInsight Manager 8.1.0.1支持的JDK是JDK 1.8.x。 安装和配置IntelliJ IDEA 开发环境的基本配置,建议使用2019.1或其他兼容版本。 父主题: 环境准备
  • 代码样例 以下代码片段是查找用户的示例,在rest.UserManager类的main方法中。 //访问Manager接口完成查找用户列表 operationName = "QueryUserList"; operationUrl = webUrl + QUERY_USER_LIST_URL; String responseLineContent = httpManager.sendHttpGetRequest(httpClient, operationUrl, operationName); LOG .info("The {} response is {}.", operationName, responseLineContent);
  • 代码样例 以下代码片段是删除用户的示例,在rest.UserManager类的main方法中。 //访问Manager接口完成删除用户 operationName = "DeleteUser"; String deleteJsonStr = "{\"userNames\":[\"user888\"]}"; operationUrl = webUrl + DELETE_USER_URL; httpManager.sendHttpDeleteRequest(httpClient, operationUrl, deleteJsonStr, operationName); LOG.info("Exit main.");
  • 代码样例 以下代码片段是修改用户的示例,在rest.UserManager类的main方法中。 //访问Manager接口完成修改用户 operationName = "ModifyUser"; String modifyUserName = "user888"; operationUrl = webUrl + MODIFY_USER_URL + modifyUserName; jsonFilePath = "./conf/modifyUser.json"; httpManager.sendHttpPutRequest(httpClient, operationUrl, jsonFilePath, operationName);
  • 代码样例 以下代码片段是导出用户列表的示例,在rest.ExportUsers类的main方法中。 String operationName = "ExportUsers"; String exportOperationUrl = webUrl + EXPORT_URL; HttpManager httpManager = new HttpManager(); //调用导出接口 String responseLineContent = httpManager .sendHttpPostRequestWithString(httpClient, exportOperationUrl, StringUtils.EMPTY, operationName); //调用下载接口 operationName = "DownloadUsers"; JSONObject jsonObj = JSON.parseObject(responseLineContent); String downloadOperationUrl = webUrl + DOWNLOAD_URL + jsonObj.getString("fileName"); httpManager.sendHttpGetRequest(httpClient, downloadOperationUrl, operationName);
  • 不要关闭WAL WAL是Write-Ahead-Log的简称,是指数据在入库之前,首先会写入到日志文件中,借此来确保数据的安全性。 WAL功能默认是开启的,但是,在Put类中提供了关闭WAL功能的接口: public void setWriteToWAL(boolean write) 因此,不建议调用该方法将WAL关闭(即将writeToWAL设置为False),因为可能会造成最近1S(该值由RegionServer端的配置参数“hbase.regionserver.optionallogflushinterval”决定,默认为1S)内的数据丢失。但如果在实际应用中,对写入的速率要求很高,并且可以容忍丢失最近1S内的数据的话,可以将该功能关闭。
  • 创建一张表或Scan时设定blockcache为true HBase客户端建表和scan时,设置blockcache=true。需要根据具体的应用需求来设定它的值,这取决于有些数据是否会被反复的查询到,如果存在较多的重复记录,将这个值设置为true可以提升效率,否则,建议关闭。 建议按默认配置,默认就是true,只要不强制设置成false就可以,例如: HColumnDescriptor fieldADesc = new HColumnDescriptor("value".getBytes());fieldADesc.setBlockCacheEnabled(false);
  • 适用场景 HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。HBase设计目标是用来解决关系型数据库在处理海量数据时的局限性。 HBase使用场景有如下几个特点: 处理海量数据(TB或PB级别以上)。 具有高吞吐量。 在海量数据中实现高效的随机读取。 具有很好的伸缩能力。 能够同时处理结构化和非结构化的数据。 不需要完全拥有传统关系型数据库所具备的ACID特性。ACID特性指原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。 HBase中的表具有如下特点: 大:一个表可以有上亿行,上百万列。 面向列:面向列(族)的存储和权限控制,列(族)独立检索。 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。 父主题: HBase
  • 业务表设计建议 预分Region,使Region分布均匀,提高并发 避免过多的热点Region。根据应用场景,可考虑将时间因素引入Rowkey。 同时访问的数据尽量连续存储。同时读取的数据相邻存储;同时读取的数据存放在同一行;同时读取的数据存放在同一cell。 查询频繁属性放在Rowkey前面部分。Rowkey的设计在排序上必须与主要的查询条件契合。 离散度较好的属性作为RowKey组成部分。分析数据离散度特点以及查询场景,综合各种场景进行设计。 存储冗余信息,提高检索性能。使用二级索引,适应更多查询场景。 利用过期时间、版本个数设置等操作,让表能自动清除过期数据。 在HBase中,一直在繁忙写数据的Region被称为热点Region。
  • Scan时指定StartKey和EndKey 一个有确切范围的Scan,在性能上会带来较大的好处。 代码示例: Scan scan = new Scan();scan.addColumn(Bytes.toBytes("familyname"),Bytes.toBytes("columnname"));scan.setStartRow( Bytes.toBytes("rowA")); // 假设起始Key为rowAscan.setStopRow( Bytes.toBytes("rowB")); // 假设EndKey为rowBfor(Result result : demoTable.getScanner(scan)) {// process Result instance}
共100000条