华为云用户手册

  • Kafka应用开发流程介绍 Kafka客户端角色包括Producer和Consumer两个角色,其应用开发流程是相同的。 开发流程中各个阶段的说明如图1和表1所示。 图1 Kafka客户端程序开发流程 表1 Kafka客户端程序开发的流程说明 阶段 说明 参考文档 了解基本概念 在开始开发客户端前,需要了解Kafka的基本概念,根据实际场景判断,需要开发的角色是Producer还是Consumer。 Kafka应用开发常用概念 准备开发环境 Kafka的客户端程序当前推荐使用java语言进行开发,并使用Maven工具构建工程。 准备Maven和JDK 准备运行环境 Kafka的样例程序运行环境即 MRS 服务所VPC集群的节点。 - 准备工程 Kafka提供了不同场景下的样例程序,您可以下载样例工程进行程序学习。或者您可以根据指导,新建一个Kafka工程。 导入并配置Kafka样例工程 根据场景开发工程 提供了Producer和Consumer相关API的使用样例,包含了新旧API和多线程的使用场景,帮助用户快速熟悉Kafka接口。 Kafka样例程序开发思路 编译并运行程序 指导用户将开发好的程序编译并打包,上传到VPC的Linux节点运行。 调测Kafka应用 查看程序运行结果 程序运行结果可以输出到Linux命令行页面。也可通过Linux客户端进行Topic数据消费的方式查看数据是否写入成功。 调测Kafka应用 父主题: Kafka应用开发概述
  • 问题 执行Spark Core应用,尝试收集大量数据到Driver端,当Driver端内存不足时,应用挂起不退出,日志内容如下。 16/04/19 15:56:22 ERROR Utils: Uncaught exception in thread task-result-getter-2java.lang.OutOfMemoryError: Java heap spaceat java.lang.reflect.Array.newArray(Native Method)at java.lang.reflect.Array.newInstance(Array.java:75)at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1671)at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1345)at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2000)at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1924)at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2000)at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1924)at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1707)at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1345)at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)at org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:71)at org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:91)at org.apache.spark.scheduler.DirectTaskResult.value(TaskResult.scala:94)at org.apache.spark.scheduler.TaskResultGetter$$anon$3$$anonfun$run$1.apply$mcV$sp(TaskResultGetter.scala:66)at org.apache.spark.scheduler.TaskResultGetter$$anon$3$$anonfun$run$1.apply(TaskResultGetter.scala:57)at org.apache.spark.scheduler.TaskResultGetter$$anon$3$$anonfun$run$1.apply(TaskResultGetter.scala:57)at org.apache.spark.util.Utils$.logUncaughtExceptions(Utils.scala:1716)at org.apache.spark.scheduler.TaskResultGetter$$anon$3.run(TaskResultGetter.scala:56)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)Exception in thread "task-result-getter-2" java.lang.OutOfMemoryError: Java heap spaceat java.lang.reflect.Array.newArray(Native Method)at java.lang.reflect.Array.newInstance(Array.java:75)at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1671)at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1345)at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2000)at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1924)at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2000)at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1924)at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1707)at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1345)at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)at org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:71)at org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:91)at org.apache.spark.scheduler.DirectTaskResult.value(TaskResult.scala:94)at org.apache.spark.scheduler.TaskResultGetter$$anon$3$$anonfun$run$1.apply$mcV$sp(TaskResultGetter.scala:66)at org.apache.spark.scheduler.TaskResultGetter$$anon$3$$anonfun$run$1.apply(TaskResultGetter.scala:57)at org.apache.spark.scheduler.TaskResultGetter$$anon$3$$anonfun$run$1.apply(TaskResultGetter.scala:57)at org.apache.spark.util.Utils$.logUncaughtExceptions(Utils.scala:1716)at org.apache.spark.scheduler.TaskResultGetter$$anon$3.run(TaskResultGetter.scala:56)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)
  • 操作步骤 并行度可以通过如下三种方式来设置,用户可以根据实际的内存、CPU、数据以及应用程序逻辑的情况调整并行度参数。 在会产生shuffle的操作函数内设置并行度参数,优先级最高。 testRDD.groupByKey(24) 在代码中配置“spark.default.parallelism”设置并行度,优先级次之。 val conf = new SparkConf()conf.set("spark.default.parallelism", 24) 在“$SPARK_HOME/conf/spark-defaults.conf”文件中配置“spark.default.parallelism”的值,优先级最低。 spark.default.parallelism 24
  • 操作步骤 参考《访问开源组件UI界面》章节,访问Storm Web界面 。 在Storm UI中单击word-count应用,查看应用程序运行情况,如图1所示。 图1 Storm应用程序执行界面 Topology stats统计了最近各个不同时间段的算子之间发送数据的总数据量。 Spouts中统计了spout算子从启动到现在发送的消息总量。Bolts中统计了Count算子和split算子的发送消息总量,如图2所示。 图2 Storm应用程序算子发送数据总量
  • 操作步骤 优化GC,调整老年代和新生代的大小和比例。在客户端的conf/spark-defaults.conf配置文件中,在spark.driver.extraJavaOptions和spark.executor.extraJavaOptions配置项中添加参数:-XX:NewRatio。如," -XX:NewRatio=2",则新生代占整个堆空间的1/3,老年代占2/3。 开发Spark应用程序时,优化RDD的数据结构。 使用原始类型数组替代集合类,如可使用fastutil库。 避免嵌套结构。 Key尽量不要使用String。 开发Spark应用程序时,建议序列化RDD。 RDD做cache时默认是不序列化数据的,可以通过设置存储级别来序列化RDD减小内存。例如: testRDD.persist(StorageLevel.MEMORY_ONLY_SER)
  • 操作场景 Spark是内存计算框架,计算过程中内存不够对Spark的执行效率影响很大。可以通过监控GC(Garbage Collection),评估内存中RDD的大小来判断内存是否变成性能瓶颈,并根据情况优化。 监控节点进程的GC情况(在客户端的conf/spark-defaults.conf配置文件中,在spark.driver.extraJavaOptions和spark.executor.extraJavaOptions配置项中添加参数:"-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps" ),如果频繁出现Full GC,需要优化GC。把RDD做Cache操作,通过日志查看RDD在内存中的大小,如果数据太大,需要改变RDD的存储级别来优化。
  • Spark应用开发流程介绍 Spark包含Spark Core、Spark SQL和Spark Streaming三个组件,其应用开发流程相同。 开发流程中各阶段的说明如图1和表1所示。 图1 Spark应用程序开发流程 表1 Spark应用开发的流程说明 阶段 说明 参考文档 了解基本概念 在开始开发应用前,需要了解Spark的基本概念,根据实际场景选择需要了解的概念,分为Spark Core基本概念、Spark SQL基本概念和Spark Streaming基本概念。 Spark应用开发常用概念 准备开发环境 Spark的应用程序支持使用Scala、Java、Python三种语言进行开发。推荐使用IDEA工具,请根据指导完成不同语言的开发环境配置。 请参考准备Spark应用Java开发环境至准备Spark应用Python开发环境章节 准备运行环境 Spark的运行环境即Spark客户端,请根据指导完成客户端的安装和配置。 准备Spark应用运行环境 获取并导入样例工程 或者新建工程 Spark提供了不同场景下的样例程序,您可以导入样例工程进行程序学习。或者您可以根据指导,新建一个Spark工程。 导入并配置Spark样例工程 根据场景开发工程 提供了Scala、Java、Python三种不同语言的样例工程,还提供了Streaming、SQL、JDBC客户端程序以及Spark on HBase四种不同场景的样例工程。帮助用户快速了解Spark各部件的编程接口。 请参考场景说明至Scala样例代码章节 编译并运行程序 指导用户将开发好的程序编译并提交运行。 编包并运行Spark应用 查看程序运行结果 程序运行结果会写在用户指定的路径下。用户还可以通过UI查看应用运行情况。 查看Spark应用调测结果 调优程序 您可以根据程序运行情况,对程序进行调优,使其性能满足业务场景诉求。 调优完成后,请重新进行编译和运行 请参考数据序列化至Spark CBO调优章节 父主题: Spark应用开发概述
  • 准备本地应用开发环境 在进行应用开发时,要准备的开发环境如表1所示。 表1 开发环境 准备项 说明 Eclipse 开发环境的基本配置。版本要求:4.2或以上。 JDK JDK使用1.7或者1.8版本。 说明: 基于安全考虑,MRS集群服务端只支持TLS 1.1和TLS 1.2加密协议,IBM JDK默认TLS只支持1.0,若使用IBM JDK,请配置启动参数“com.ibm.jsse2.overrideDefaultTLS”为“true”,设置后可以同时支持TLS1.0/1.1/1.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。 父主题: 准备HDFS应用开发环境
  • 准备运行调测环境 在弹性云服务器管理控制台,申请一个新的弹性云服务器,用于应用开发运行调测。 弹性云服务器的安全组需要和MRS集群Master节点的安全组相同。 弹性云服务器的VPC需要与MRS集群在同一个VPC中。 弹性云服务器的网卡需要与MRS集群在同一个网段中。 申请弹性IP,绑定新申请的弹性云主机IP,并配置安全组出入规则。 下载客户端程序,请参考下载MRS客户端。 登录客户端下载目标节点,以root用户安装集群客户端。 执行以下命令解压客户端包。 tar -xvf /opt/MRS_Services_Client.tar 执行以下命令校验安装文件包。 sha256sum -c /opt/MRS_Services_ClientConfig.tar.sha256 MRS_Services_ClientConfig.tar:OK 执行以下命令解压安装文件包。 tar -xvf MRS_Services_ClientConfig.tar 执行如下命令安装客户端到指定目录(绝对路径),例如“/opt/client”。目录会自动创建。 cd /opt/MRS_Services_ClientConfig sh install.sh /opt/client Components client installation is complete.
  • 场景说明 假定用户有某个周末网民网购停留时间的日志文本,基于某些业务要求,要求开发Spark应用程序实现如下功能: 统计日志文件中本周末网购停留总时间超过2个小时的女性网民信息。 周末两天的日志文件第一列为姓名,第二列为性别,第三列为本次停留时间,单位为分钟,分隔符为“,”。 log1.txt:周六网民停留日志 LiuYang,female,20YuanJing,male,10GuoYijun,male,5CaiXuyu,female,50Liyuan,male,20FangBo,female,50LiuYang,female,20YuanJing,male,10GuoYijun,male,50CaiXuyu,female,50FangBo,female,60 log2.txt:周日网民停留日志 LiuYang,female,20YuanJing,male,10CaiXuyu,female,50FangBo,female,50GuoYijun,male,5CaiXuyu,female,50Liyuan,male,20CaiXuyu,female,50FangBo,female,50LiuYang,female,20YuanJing,male,10FangBo,female,50GuoYijun,male,50CaiXuyu,female,50FangBo,female,60
  • 功能介绍 该样例主要分为三个部分。 从HDFS原文件中抽取name信息,查询HBase、Hive相关数据,并进行数据拼接,通过类MultiComponentMapper继承Mapper抽象类实现。 获取拼接后的数据取最后一条输出到HBase、HDFS,通过类MultiComponentReducer继承Reducer抽象类实现。 main方法提供建立一个MapReduce job,并提交MapReduce作业到Hadoop集群。
  • 场景说明 该样例以MapReduce访问HDFS、HBase、Hive为例,介绍如何编写MapReduce作业访问多个服务组件。帮助用户理解认证、配置加载等关键使用方式。 该样例逻辑过程如下。 以HDFS文本文件为输入数据 log1.txt:数据输入文件 YuanJing,male,10GuoYijun,male,5 Map阶段 获取输入数据的一行并提取姓名信息。 查询HBase一条数据。 查询Hive一条数据。 将HBase查询结果与Hive查询结果进行拼接作为Map输出。 Reduce阶段 获取Map输出中的最后一条数据。 将数据输出到HBase。 将数据保存到HDFS。
  • Client HDFS Client主要包括五种方式:JAVA API、C API、Shell、HTTP REST API、WEB UI。 Java API 提供HDFS文件系统的应用接口,本开发指南主要介绍如何使用Java APIHDFS Java API接口介绍 HDFS文件系统的应用开发。 C API 提供HDFS文件系统的应用接口,使用C语言开发的用户可参考C接口HDFS C API接口介绍 的描述进行应用开发。 Shell 提供shell命令 HDFS Shell命令介绍 完成HDFS文件系统的基本操作。 HTTP REST API 提供除Shell、Java API和C API以外的其他接口,可通过此接口 HDFS HTTP REST API接口介绍 监控HDFS状态等信息。 WEB UI 提供Web可视化组件管理界面。
  • 数据规划 创建HDFS数据文件。 在Linux系统上新建文本文件,将log1.txt中的内容复制保存到data.txt。 在HDFS上创建一个文件夹,“/tmp/examples/multi-components/mapreduce/input/”,并上传data.txt到此目录,命令如下。 在Linux系统HDFS客户端使用命令hdfs dfs -mkdir -p /tmp/examples/multi-components/mapreduce/input/ 在Linux系统HDFS客户端使用命令hdfs dfs -put data.txt /tmp/examples/multi-components/mapreduce/input/ 创建HBase表并插入数据。 在Linux系统HBase客户端使用命令hbase shell。 在HBase shell交互窗口创建数据表table1,该表有一个列族cf,使用命令create 'table1', 'cf'。 插入一条rowkey为1、列名为cid、数据值为123的数据,使用命令put 'table1', '1', 'cf:cid', '123'。 执行命令quit退出。 创建Hive表并载入数据。 在Linux系统Hive客户端使用命令beeline。 在Hive beeline交互窗口创建数据表person,该表有3个字段:name/gender/stayTime,使用命令CREATE TABLE person(name STRING, gender STRING, stayTime INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' stored as textfile;。 在Hive beeline交互窗口加载数据文件,LOAD DATA INPATH '/tmp/examples/multi-components/mapreduce/input/' OVERWRITE INTO TABLE person;。 执行命令!q退出。 由于Hive加载数据将HDFS对应数据目录清空,所以需再次执行1。
  • Hive应用开发流程介绍 开发流程中各阶段的说明如图1和表1所示。 图1 Hive应用程序开发流程 表1 Hive应用开发的流程说明 阶段 说明 参考文档 了解基本概念 在开始开发应用前,需要了解Hive的基本概念。 Hive应用开发常用概念 准备开发和运行环境 Hive的应用程序支持使用Java、Python两种语言进行开发。推荐使用Eclipse工具,请根据指导完成不同语言的开发环境配置。 Hive应用开发环境简介 根据场景开发工程 提供了Java、Python两种不同语言的样例工程,还提供了从建表、数据加载到数据查询的样例工程。 Hive样例程序开发思路 运行程序及查看结果 指导用户将开发好的程序编译提交运行并查看结果。 在Linux中调测Hive JDBC应用 在Linux中调测Hive HCatalog应用 父主题: Hive应用开发概述
  • MapReduce应用开发简介 Hadoop MapReduce是一个使用简易的并行计算软件框架,基于它写出来的应用程序能够运行在由上千个服务器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集。 一个MapReduce作业(application/job)通常会把输入的数据集切分为若干独立的数据块,由map任务(task)以完全并行的方式来处理。框架会对map的输出先进行排序,然后把结果输入给reduce任务,最后返回给客户端。通常作业的输入和输出都会被存储在文件系统中。整个框架负责任务的调度和监控,以及重新执行已经失败的任务。 MapReduce主要特点如下: 大规模并行计算 适用于大型数据集 高容错性和高可靠性 合理的资源调度 父主题: MapReduce应用开发概述
  • JDBC客户端运行及结果查看 执行mvn clean compile assembly:single生成jar包,在工程目录target目录下获取,比如:presto-examples-1.0-SNAPSHOT-jar-with-dependencies.jar。 在运行调测环境上创建一个目录作为运行目录,如或“/opt/presto_examples”(Linux环境),并在该目录下创建子目录“conf”。 将1导出的presto-examples-1.0-SNAPSHOT-jar-with-dependencies.jar拷贝到“/opt/presto_examples”下。 开启Kerberos认证集群需要将4获取的user.keytab和krb5.conf拷贝到的/opt/presto_examples/conf下,并修改样例代码中conf目录下的presto.preperties。未开启Kerberos认证集群无须执行此步骤。 表1 presto.preperties参数说明 参数 说明 user 用于Kerberos认证的用户名,即准备Presto应用开发用户中创建的开发用户的用户名。 KerberosPrincipal 用于认证的名字,即认证准备Presto应用开发用户中创建的开发用户的用户名。 KerberosConfigPath krb5.conf的路径。 KerberosKeytabPath user.keytab的路径。 presto.preperties样例 user = prestouserSSL = trueKerberosRemoteServiceName = HTTPKerberosPrincipal = prestouserKerberosConfigPath = /opt/presto_examples/conf/krb5.confKerberosKeytabPath = /opt/presto_examples/conf/user.keytab 在Linux环境下执行运行样例程序。 chmod +x /opt/presto_examples -R cd /opt/presto_examplesjava -jar presto-examples-1.0-SNAPSHOT-jar-with-dependencies.jar 在命令行终端查看样例代码所查询出的结果。 Linux环境运行成功结果会有如下信息: NY Metro : 2Mid Atlantic : 6Mid Atlantic : 6North Midwest : 1North Midwest : 3North Midwest : 7
  • Hive应用开发常用概念 客户端 客户端直接面向用户,可通过Java API、Thrift API访问服务端进行Hive的相关操作。本文中的Hive客户端特指Hive client的安装目录,里面包含通过Java API访问Hive的样例代码。 HiveQL语言 Hive Query Language,类SQL语句。 HCatalog HCatalog是建立在Hive元数据之上的一个表信息管理层,吸收了Hive的DDL命令。为MapReduce提供读写接口,提供Hive命令行接口来进行数据定义和元数据查询。基于Hive的HCatalog功能,Hive、MapReduce开发人员能够共享元数据信息,避免中间转换和调整,能够提升数据处理的效率。 WebHCat WebHCat运行用户通过Rest API来执行Hive DDL,提交MapReduce任务,查询MapReduce任务执行结果等操作。 父主题: Hive应用开发概述
  • 开发思路 数据准备。 创建三张表,雇员信息表“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 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 数据分析。 数据分析代码实现,请见查询Hive数据。 查看薪水支付币种为美元的雇员联系方式。 查询入职时间为2014年的雇员编号、姓名等字段,并将查询结果加载进表employees_info_extended中的入职时间为2014的分区中。 统计表employees_info中有多少条记录。 查询使用以“cn”结尾的邮箱的员工信息。 提交数据分析任务,统计表employees_info中有多少条记录。实现请见分析Hive数据。
  • Presto应用开发环境简介 在进行应用开发时,要准备的本地开发环境如表1所示。同时需要准备运行调测的Linux环境,用于验证应用程序运行是否正常。 表1 开发环境 准备项 说明 操作系统 开发环境:Windows系统,推荐Windows7以上版本。 运行环境:Linux系统。 安装JDK 开发和运行环境的基本配置。版本要求如下: MRS集群的服务端和客户端仅支持自带的Oracle JDK(版本为1.8),不允许替换。 对于客户应用需引用SDK类的Jar包运行在客户应用进程中的,支持Oracle JDK和IBM JDK。 Oracle JDK:支持1.7和1.8版本。 IBM JDK:推荐1.7.8.10、1.7.9.40和1.8.3.0版本。 说明: 在Presto的开发环境中,基于安全考虑,MRS服务端只支持TLS 1.1和TLS 1.2加密协议。由于IBM JDK默认TLS只支持1.0,若使用IBM JDK,请配置启动参数“com.ibm.jsse2.overrideDefaultTLS”为“true”,设置后可以同时支持TLS1.0/1.1/1.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。 安装和配置Eclipse 用于开发Presto应用程序的工具。版本要求如下: JDK使用1.7版本,Eclipse使用3.7.1及以上版本。 JDK使用1.8版本,Eclipse使用4.3.2及以上版本。 说明: 若使用IBM JDK,请确保Eclipse中的JDK配置为IBM JDK。 若使用Oracle JDK,请确保Eclipse中的JDK配置为Oracle JDK。 不同的Eclipse不要使用相同的workspace和相同路径下的示例工程。 网络 确保客户端与Presto服务主机在网络上互通。 父主题: 准备Presto应用开发环境
  • 代码样例 以下代码片段在com.huawei.bigdata.hbase.examples包的“HIndexExample”类的addIndicesExample方法中: addIndices(): 将索引添加到没有数据的表中 public void addIndicesExample() { LOG .info("Entering Adding a Hindex."); // Create index instance TableIndices tableIndices = new TableIndices(); HIndexSpecification spec = new HIndexSpecification(indexNameToAdd); spec.addIndexColumn(new HColumnDescriptor("info"), "name", ValueType.STRING); tableIndices.addIndex(spec); Admin admin = null; HIndexAdmin iAdmin = null; try { admin = conn.getAdmin(); iAdmin = HIndexClient.newHIndexAdmin(admin); // add index to the table iAdmin.addIndices(tableName, tableIndices); // Alternately, add the specified indices with data // iAdmin.addIndicesWithData(tableName, tableIndices); LOG.info("Successfully added indices to the table " + tableName); } catch (IOException e) { LOG.error("Add Indices failed for table " + tableName + "." + e); } finally { if (iAdmin != null) { try { // Close the HIndexAdmin object. iAdmin.close(); } catch (IOException e) { LOG.error("Failed to close HIndexAdmin ", e); } } if (admin != null) { try { // Close the Admin object. admin.close(); } catch (IOException e) { LOG.error("Failed to close admin ", e); } } } LOG.info("Exiting Adding a Hindex."); } 以下代码片段在com.huawei.bigdata.hbase.examples包的“HIndexExample”类的addIndicesExampleWithData方法中: addIndicesWithData():将索引添加到具有大量预先存在数据的表中 public void addIndicesExampleWithData() { LOG.info("Entering Adding a Hindex With Data."); // Create index instance TableIndices tableIndices = new TableIndices(); HIndexSpecification spec = new HIndexSpecification(indexNameToAdd); spec.addIndexColumn(new HColumnDescriptor("info"), "age", ValueType.STRING); tableIndices.addIndex(spec); Admin admin = null; HIndexAdmin iAdmin = null; try { admin = conn.getAdmin(); iAdmin = HIndexClient.newHIndexAdmin(admin); // add index to the table iAdmin.addIndicesWithData(tableName, tableIndices); // Alternately, add the specified indices with data // iAdmin.addIndicesWithData(tableName, tableIndices); LOG.info("Successfully added indices to the table " + tableName); } catch (IOException e) { LOG.error("Add Indices failed for table " + tableName + "." + e); } finally { if (iAdmin != null) { try { // Close the HIndexAdmin object. iAdmin.close(); } catch (IOException e) { LOG.error("Failed to close HIndexAdmin ", e); } } if (admin != null) { try { // Close the Admin object. admin.close(); } catch (IOException e) { LOG.error("Failed to close admin ", e); } } } LOG.info("Exiting Adding a Hindex With Data."); }
  • OpenTSDB应用开发流程介绍 开发流程中各阶段的说明如图1和表1所示。 图1 Opentsdb应用程序开发流程 表1 Opentsdb应用开发流程说明 阶段 说明 参考文档 了解基本概念 在开始开发应用前,需要了解OpenTSDB的基本概念,了解场景需求,设计表等。 OpenTSDB应用开发常用概念 准备开发环境和运行环境 OpenTSDB的应用程序当前推荐使用Java语言进行开发。可使用Eclipse工具。OpenTSDB的运行环境即OpenTSDB客户端,请根据指导完成客户端的安装和配置。 OpenTSDB应用开发环境简介 准备工程 OpenTSDB提供了不同场景下的样例程序,您可以导入样例工程进行程序学习。或者您可以根据指导,新建一个OpenTSDB工程。 导入并配置OpenTSDB样例工程 根据场景开发工程 提供了Java语言的样例工程,包含从创建metric、写入到查询流程的样例工程。 OpenTSDB样例程序开发思路 编译并运行程序 指导用户将开发好的程序编译并提交运行。 调测OpenTSDB应用 查看程序运行结果 程序运行结果会写在用户指定的路径下。用户还可以通过UI查看导入数据的状态。 查看OpenTSDB应用调测结果 父主题: OpenTSDB应用开发概述
  • MapReduce应用开发流程介绍 开发流程中各阶段的说明如图1和表1所示。 图1 MapReduce应用程序开发流程 表1 MapReduce应用开发的流程说明 阶段 说明 参考文档 了解基本概念 在开始开发应用前,需要了解MapReduce的基本概念。 MapReduce应用开发常用概念 准备开发环境 使用Eclipse工具,请根据指导完成开发环境配置。 准备Eclipse与JDK 准备运行环境 MapReduce的运行环境即MapReduce客户端,请根据指导完成客户端的安装和配置。 准备MapReduce应用运行环境 获取并导入样例工程 或者新建工程 MapReduce提供了不同场景下的样例程序,您可以导入样例工程进行程序学习。或者您可以根据指导,新建一个MapReduce工程。 导入并配置MapReduce样例工程 根据场景开发工程 提供了样例工程。 帮助用户快速了解MapReduce各部件的编程接口。 MapReduce统计样例程序开发思路 MapReduce访问多组件样例程序开发思路 编译并运行程序 指导用户将开发好的程序编译并提交运行。 编译并运行MapReduce应用 查看程序运行结果 程序运行结果会写在用户指定的路径下。用户还可以通过UI查看应用运行情况。 查看MapReduce应用调测结果 父主题: MapReduce应用开发概述
  • 准备Eclipse与JDK 选择Windows开发环境下,安装Eclipse,安装JDK。 开发环境安装Eclipse程序,安装要求Eclipse使用4.2或以上版本。 开发环境安装JDK程序,安装要求JDK使用1.8版本。 若使用IBM JDK,请确保Eclipse中的JDK配置为IBM JDK。 若使用Oracle JDK,请确保Eclipse中的JDK配置为Oracle JDK。 不同的Eclipse不要使用相同的workspace和相同路径下的示例工程。 父主题: 准备MapReduce应用开发环境
  • 场景说明 假定用户有某个周末网民网购停留时间的日志文本,基于某些业务要求,要求开发MapReduce应用程序实现如下功能。 统计日志文件中本周末网购停留总时间超过2个小时的女性网民信息。 周末两天的日志文件第一列为姓名,第二列为性别,第三列为本次停留时间,单位为分钟,分隔符为“,”。 log1.txt:周六网民停留日志 LiuYang,female,20YuanJing,male,10GuoYijun,male,5CaiXuyu,female,50Liyuan,male,20FangBo,female,50LiuYang,female,20YuanJing,male,10GuoYijun,male,50CaiXuyu,female,50FangBo,female,60 log2.txt:周日网民停留日志 LiuYang,female,20YuanJing,male,10CaiXuyu,female,50FangBo,female,50GuoYijun,male,5CaiXuyu,female,50Liyuan,male,20CaiXuyu,female,50FangBo,female,50LiuYang,female,20YuanJing,male,10FangBo,female,50GuoYijun,male,50CaiXuyu,female,50FangBo,female,60
  • 代码样例 如下是写文件的代码片段,详细代码请参考com.huawei.bigdata.hdfs.examples中的HdfsMain类和HdfsWriter类。 /** * 创建文件,写文件 * * @throws IOException * @throws ParameterException */private void write() throws IOException, ParameterException { final String content = "hi, I am bigdata. It is successful if you can see me."; InputStream in = (InputStream) new ByteArrayInputStream(content.getBytes()); try { HdfsWriter writer = new HdfsWriter(fSystem, DEST_PATH + File.separator + FILE_NAME); writer.doWrite(in); System.out.println("success to write."); } finally { //务必要关闭流资源 close(in); }}
  • 数据规划 首先需要把原日志文件放置在HDFS系统里。 本地新建两个文本文件,将log1.txt中的内容复制保存到input_data1.txt,将log2.txt中的内容复制保存到input_data2.txt。 在HDFS上建立一个文件夹,“/tmp/input”,并上传input_data1.txt,input_data2.txt到此目录,命令如下。 在Linux系统HDFS客户端使用命令hdfs dfs -mkdir /tmp/input 在Linux系统HDFS客户端使用命令hdfs dfs -put local_filepath /tmp/input
  • 场景说明 通过典型场景,可以快速学习和掌握HDFS的开发过程,并对关键的接口函数有所了解。 HDFS的业务操作对象是文件,代码样例中所涉及的文件操作主要包括创建文件夹、写文件、追加文件内容、读文件和删除文件/文件夹;HDFS还有其他的业务处理,例如设置文件权限等,其他操作可以在掌握本代码样例之后,再扩展学习。 本代码样例讲解顺序为: HDFS初始化 初始化HDFS 写文件 写HDFS文件 追加文件内容 追加HDFS文件内容 读文件 读HDFS文件 删除文件 删除HDFS文件 Colocation HDFS Colocation 设置存储策略 设置HDFS存储策略 访问OBS HDFS访问OBS
  • 开发思路 根据前述场景说明进行功能分解,以上传一个新员工的信息为例,对该员工的信息进行查询、追加、删除等,可分为以下七部分: 通过kerberos认证。 调用fileSystem中的mkdir接口创建目录。 调用HdfsWriter的dowrite接口写入信息。 调用fileSystem中的open接口读取文件。 调用HdfsWriter的doAppend接口追加信息。 调用fileSystem中的deleteOnExit接口删除文件。 调用fileSystem中的delete接口删除文件夹。
  • 功能介绍 统计日志文件中本周末网购停留总时间超过2个小时的女性网民信息。 主要分为三个部分。 从原文件中筛选女性网民上网时间数据信息,通过类CollectionMapper继承Mapper抽象类实现。 汇总每个女性上网时间,并输出时间大于两个小时的女性网民信息,通过类CollectionReducer继承Reducer抽象类实现。 main方法提供建立一个MapReduce job,并提交MapReduce作业到hadoop集群。
共100000条
提示

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