• [赋能学习] MRS3.0.2版本 二次开发(24/27): Spark读写ElasticSearch样例
    # 视频在本帖二楼 ## 一、Spark简介 Spark是分布式批处理框架,提供分析挖掘与迭代式内存计算能力,支持多种语言(Scala/Java/Python)的应用开发。 适用以下场景: - 数据处理(Data Processing):可以用来快速处理数据,兼具容错性和可扩展性。 - 迭代计算(Iterative Computation):支持迭代计算,有效应对多步的数据处理逻辑。 - 数据挖掘(Data Mining):在海量数据基础上进行复杂的挖掘分析,可支持各种数据挖掘和机器学习算法。 - 流式处理(Streaming Processing):支持秒级延迟的流式处理,可支持多种外部数据源。 - 查询分析(Query Analysis):支持标准SQL查询分析,同时提供DSL(DataFrame), 并支持多种外部输入。 ## 二、样例背景 在Spark应用中,用户可以通过Elasticsearch的原生接口,以及elasticsearch-spark工具提供的接口,实现索引的创建、查询、删除等操作。 ## 三、样例调试 1. 前提:Linux环境有安装集群客户端,环境准备,参考第一课 2. 数据规划 首先需要把数据文件放置在HDFS系统里。 1. 获取测试数据文件,获取样例代码data目录中的people.json文件; 2. 在HDFS上建立一个文件夹“spark-on-es”,并将上一步得到的people.json文件上传到hdfs的/user/spark-on-es目录下面,命令如下: 1. 在HDFS客户端,执行如下命令获取安全认证。 cd /opt/hadoopclient kinit 用于认证的业务用户> 2. 在Linux系统HDFS客户端使用命令hadoop fs -mkdir /user/spark-on-es(hdfs dfs命令有同样的作用),创建对应目录。 3. 在Linux系统HDFS客户端使用命令hadoop fs -put people.json /user/spark-on-es,上传数据文件。 3. 比对“本地时间和Linux机器时间”与集群时间误都不能超过5分钟 4. 检查linux环境的JDK版本为1.8 5. 配置linux环境的/etc/hosts文件 6. 检查 C:\Windows\System32\drivers\etc\hosts文件中是否包含所有集群节点的域名IP映射信息 7. 在IDEA打开样例代码的SparkOnEsJavaExample目录,检查SDK配置 8. 默认自动加载依赖,如未加载,则打开后选中pom.xml文件,右键点击“Add As Maven Project”后等待项目自动将依赖下载完毕 9. 在Linux环境新建目录,例如“/opt/spark-on-es/” 10. 从Manager界面下载用户认证凭据后,解压缩获取秘钥文件user.keytab和krb5.conf,将这两个文件放到Linux环境新建的目录中例如“/opt/spark-on-es” 11. 修改样例代码conf中esParams.properties文件,可以参考es客户端下es-rest-client-example.properties文件 需要修改用户名principal与密码userPassword,其他项可参考es-rest-client-example.properties文件 12. 在IDEA主页面,选择“View->Tool Windows->Maven”打开“Maven”工具窗口。 13. 在Maven工具窗口,选择clean生命周期,执行Maven构建过程。 14. 在Maven工具窗口,选择package生命周期,执行Maven构建过程。 15. 从IDEA项目目录下的target文件夹中获取到Jar包,拷贝到Spark运行环境下(即Spark客户端),如“/opt/spark-on-es”。 16. 通过如下maven指令构建样例工程依赖jar包到lib目录,注意--settings后客户使用自己的本地目录 mvn dependency:copy-dependencies -DoutputDirectory=lib --settings D:\tools\apache-maven-3.6.3\conf\settings.xml 17. 在“/opt/spark-on-es”目录下新建子目录"libs",将步骤16所打的jar包中如下包拷贝到子目录"libs"下 - elasticsearch-7.6.0-hw-ei.jar - elasticsearch-core-7.6.0-hw-ei.jar - elasticsearch-rest-client-7.6.0-hw-ei.jar - elasticsearch-rest-high-level-client-7.6.0-hw-ei.jar - elasticsearch-spark-20_2.11-7.6.0.jar - elasticsearch-x-content-7.6.0-hw-ei.jar - lang-mustache-client-7.6.0-hw-ei.jar - log4j-api-2.12.0.jar - log4j-core-2.12.0.jar - lucene-core-8.4.0-hw-ei.jar - rank-eval-client-7.6.0-hw-ei.jar 18. 从IDEA项目conf目录下esParams.properties拷贝到“/opt/spark-on-es” 19. kinit认证后,运行命令分别如下(类名与文件名等请与实际代码保持一致,此处仅为示例) 1. client模式运行任务 ``` cd /opt/spark-on-es spark-submit --class com.huawei.bigdata.spark.examples.SparkOnEs --master yarn --deploy-mode client --conf spark.driver.userClassPathFirst=true --jars $(files=(/opt/spark-on-es/libs/*.jar); IFS=,; echo "${files<li>}") ./SparkOnEs-1.0.jar ``` 其中“/opt/spark-on-es/libs/”是外部依赖的jar包路径。 2. cluster模式运行任务 ``` cd /opt/spark-on-es spark-submit --class com.huawei.bigdata.spark.examples.SparkOnEs --master yarn --deploy-mode cluster --conf spark.driver.userClassPathFirst=true --jars $(files=(/opt/spark-on-es/libs/*.jar); IFS=,; echo "${files[*]}") --files ./user.keytab,./krb5.conf,./esParams.properties ./SparkOnEs-1.0.jar ``` 其中--files参数用来指定程序运行时需要的配置文件,多个文件要以半角逗号“,”分隔。 20. 查询Elasticsearch中的数据。 ``` # kinit认证后,查看Elasticsearch中的index: curl -XGET --tlsv1.2 --negotiate -k -u : 'https://10.10.10.11:24100/_cat/indices?v' # 通过下述命令对people索引中的数据进行范围查询: curl -XPOST --tlsv1.2 --negotiate -k -u : 'https://10.10.10.11:24100/people/_search?pretty' -H 'Content-Type:application/json' -d '{ "query": { "range": { "createdTime": {"gte": "2010-01-01T00:00:00Z", "lt": "2015-12-31T23:59:59Z"} } }}' ``` 21. 查询HDFS中的文件。 ``` # kinit认证后,查看保存到HDFS中的分组结果文件: hdfs dfs -ls /user/spark-on-es/group-result # 查看某个文件中的内容,比如查看文件part-00001: hdfs dfs -cat /user/spark-on-es/group-result/part-00001 ``` ## 四、问题互动渠道 FusonInsight 论坛入口 https://bbs.huaweicloud.com/forum/forum-1103-1.html
  • [赋能学习] MRS3.0.2版本 二次开发(21/27): 使用java命令提交spark任务样例
    # 视频在本帖二楼 ## 一、Spark简介 Spark是分布式批处理框架,提供分析挖掘与迭代式内存计算能力,支持多种语言(Scala/Java/Python)的应用开发。 适用以下场景: - 数据处理(Data Processing):可以用来快速处理数据,兼具容错性和可扩展性。 - 迭代计算(Iterative Computation):支持迭代计算,有效应对多步的数据处理逻辑。 - 数据挖掘(Data Mining):在海量数据基础上进行复杂的挖掘分析,可支持各种数据挖掘和机器学习算法。 - 流式处理(Streaming Processing):支持秒级延迟的流式处理,可支持多种外部数据源。 - 查询分析(Query Analysis):支持标准SQL查询分析,同时提供DSL(DataFrame), 并支持多种外部输入。 ## 二、样例背景 假定用户有某个周末网民网购停留时间的日志文本,基于某些业务要求,要求开发Spark应用程序实现如下功能: 1.统计日志文件中本周末网购停留总时间超过2个小时的女性网民信息。 2.周末两天的日志文件第一列为姓名,第二列为性别,第三列为本次停留时间,单位为分钟,分隔符为“,” log1.txt:周六网民停留日志 LiuYang,female,20 YuanJing,male,10 GuoYijun,male,5 CaiXuyu,female,50 Liyuan,male,20 FangBo,female,50 LiuYang,female,20 YuanJing,male,10 GuoYijun,male,50 CaiXuyu,female,50 FangBo,female,60 log2.txt:周日网民停留日志 LiuYang,female,20 YuanJing,male,10 CaiXuyu,female,50 FangBo,female,50 GuoYijun,male,5 CaiXuyu,female,50 Liyuan,male,20 CaiXuyu,female,50 FangBo,female,50 LiuYang,female,20 YuanJing,male,10 FangBo,female,50 GuoYijun,male,50 CaiXuyu,female,50 FangBo,female,60 ## 三、样例调试 1. 数据规划,前提:Linux环境有安装集群客户端,环境准备,参考第一课 本地新建两个文本文件input_data1.txt和input_data2.txt,将log1.txt中的内容复制保存到input_data1.txt,将log2.txt中的内容复制保存到input_data2.txt。 在HDFS客户端路径下建立一个文件夹,例如“/tmp/input”,并上传input_data1.txt,input_data2.txt到此目录,指令如下: 在HDFS客户端,执行如下命令获取安全认证,以下路径以实际hadoop客户端安装路径为准 cd /opt/hadoopclient kinit 用于认证的业务用户> 在Linux系统HDFS客户端使用命令hadoop fs -mkdir /tmp/input(hdfs dfs命令有同样的作用),创建对应目录。 进入到HDFS客户端下的“/tmp/input”目录,在Linux系统HDFS客户端使用命令hadoop fs -put input_data1.txt /tmp/input和hadoop fs -put input_data2.txt /tmp/input,上传数据文件。 2. 比对“本地时间和Linux机器时间”与集群时间误都不能超过5分钟 3. 检查linux环境的JDK版本为1.8 4. 配置linux环境的/etc/hosts文件 5. 检查 C:\Windows\System32\drivers\etc\hosts文件中是否包含所有集群节点的域名IP映射信息 6. 在IDEA打开样例代码的SparkJavaExample目录,检查SDK配置 7. 默认自动加载依赖,如未加载,则打开后选中pom.xml文件,右键点击“Add As Maven Project”后等待项目自动将依赖下载完毕 8. 在Linux环境新建目录,例如“/opt/sparktest” 9. 从Manager界面下载用户认证凭据后,解压缩获取秘钥文件user.keytab和krb5.conf,将这两个文件放到Linux环境新建的目录中例如“/opt/sparktest” 10. 修改src\main\java\com\huawei\bigdata\spark\examples\FemaleInfoCollection.java类中userPrincipal参数修改为实际用户名,userKeytabPath参数修改为user.keytab文件在linux环境的目录“/opt/sparktest/user.keytab”,krb5ConfPath参数修改为krb5.conf文件在linux环境的目录“/opt/sparktest/krb5.conf” 11. 在IDEA主页面,选择“View->Tool Windows->Maven”打开“Maven”工具窗口。 12. 在Maven工具窗口,选择clean生命周期,执行Maven构建过程。 13. 在Maven工具窗口,选择package生命周期,执行Maven构建过程。 14. 从IDEA项目目录下的target文件夹中获取到Jar包,拷贝到Spark运行环境下(即Spark客户端),如“/opt/sparktest”。 15. 进入Spark客户端目录,调用bin/spark-submit脚本运行代码,运行命令如下 ``` bin/spark-submit --class com.huawei.bigdata.spark.examples.FemaleInfoCollection --master yarn --deploy-mode client /opt/female/FemaleInfoCollection-1.0.jar <input path> ``` 其中input path,指HDFS文件系统中input的路径。 ## 四、问题互动渠道 FusonInsight 论坛入口 https://bbs.huaweicloud.com/forum/forum-1103-1.html
  • [赋能学习] MRS3.0.2版本 二次开发(18/27): Flink读写Kafka样例
    # 视频在本帖二楼 ## 一、Flink简介 Flink是一个批处理和流处理结合的统一计算框架,其核心是一个提供了数据分发以及并行化计算的流数据处理引擎。它的最大亮点是流处理,是业界最顶级的开源流处理引擎。 ## 二、Flink客户端准备,可参考MRS二次开发(15/27)Flink构造DataStream样例,有详细的视频介绍 **Kerberos认证** 从服务器上下载用户keytab,并将keytab放到Flink客户端所在主机的某个文件夹下。 修改客户端配置文件/opt/client/Flink/flink/conf/flink-conf.yaml内容: ``` keytab路径。例如:security.kerberos.login.keytab: /opt/testclient/flinkuser.keytab principal名。例如:security.kerberos.login.principal: flinkuser 对于HA模式,如果配置了ZooKeeper,还需要设置ZK kerberos认证相关的配置。配置如下: zookeeper.sasl.disable: false security.kerberos.login.contexts: Client 如果用户对于Kafka client和Kafka broker之间也需要做kerberos认证,配置如下: security.kerberos.login.contexts: Client,KafkaClient ``` **Security Cookie认证** 1. 用户需要获取SSL证书,放置到Flink客户端中。 参考 拷贝其中代码生成generate_keystore.sh脚本,放置在Flink客户端的bin目录下。 在客户端目录下执行source bigdata_env。 执行命令“sh generate_keystore.sh ”即可,例如“sh generate_keystore.sh 123456",会在Flink客户端的conf目录下生成flink.keystore,flink.truststore文件。 在Flink客户端同级目录下新建ssl目录,例如“/opt/testclient/Flink/flink/ssl”,将生成的flink.keystore,flink.truststore文件拷贝到ssl目录中。 1. 获取证书后,在Flink客户端的conf目录下配置文件“flink-conf.yaml”中将以下配置项进行赋值。 将配置项“security.ssl.keystore”设置为keystore文件的相对路径,例如“ssl/flink.keystore” 将配置项“security.ssl.truststore”设置为truststore文件的相对路径,例如“ssl/flink.truststore” 将配置项“security.cookie”设置为一串密码,该密码可以是一串随机规则密码,可以取默认 使用Manager明文加密API进行获取密文:curl -k -i -u 用户名:密码 -X POST -HContent-type:application/json -d '{"plainText":""}' '';其中要与签发证书时使用的密码一致,x.x.x.x为集群Manager的浮动IP。 将配置项“security.ssl.key-password”、“security.ssl.keystore-password”和“security.ssl.truststore-password”设置为如上指令获取到的密文。 2. 打开“Security Cookie”开关,配置“security.enable: true”,查看“security cookie”是否已配置成功。 #### 加密传输 配置SSL传输,用户主要在客户端的“flink-conf.yaml”文件中做如下配置: 1. 打开SSL开关和设置SSL加密算法,配置如下: security.ssl.enabled:true akka.ssl.enabled: true blob.service.ssl.enabled: true taskmanager.data.ssl.enabled: true security.ssl.algorithms: TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 2. 配置keystore或truststore文件路径为相对路径时,Flink Client执行命令的目录需要可以直接访问该相对路径。 在Flink的CLI yarn-session.sh命令中增加“-t”选项来传输keystore和truststore文件到各个执行节点。例如“./bin/yarn-session.sh **-t** ssl/ ” 在Flink run命令中增加“-yt”选项来传输keystore和truststore文件到各个执行节点。例如“./bin/flink run **-yt** ssl/ -ys 3 -yn 3 -m yarn-cluster -c com.huawei.SocketWindowWordCount ../lib/flink-eg-1.0.jar --hostname r3-d3 --port 9000” 3. 配置keystore或truststore文件路径为绝对路径时,需要在Flink Client以及Yarn各个节点的该绝对路径上放置keystore或truststore文件。 执行命令中不需要使用“-t”或“-yt”来传输keystore和truststore文件。 4. 将客户端安装节点的业务ip和manager界面浮动ip追加到jobmanager.web.allow-access-address配置中用“,”隔开 ## 三、样例背景 假定用户有某个网站周末网民网购停留时间的日志文本,基于某些业务要求,要求开发Flink的DataStream应用程序实现如下功能: 实时统计总计网购时间超过2个小时的女性网民信息。周末两天的日志文件第一列为姓名,第二列为性别,第三列为本次停留时间,单位为分钟,分隔符为“,”。 log1.txt:周六网民停留日志。该日志文件在该样例程序中的data目录下获取。 LiuYang,female,20 YuanJing,male,10 GuoYijun,male,5 CaiXuyu,female,50 Liyuan,male,20 FangBo,female,50 LiuYang,female,20 YuanJing,male,10 GuoYijun,male,50 CaiXuyu,female,50 FangBo,female,60 log2.txt:周日网民停留日志。该日志文件在该样例程序中的data目录下获取。 LiuYang,female,20 YuanJing,male,10 CaiXuyu,female,50 FangBo,female,50 GuoYijun,male,5 CaiXuyu,female,50 Liyuan,male,20 CaiXuyu,female,50 FangBo,female,50 LiuYang,female,20 YuanJing,male,10 FangBo,female,50 GuoYijun,male,50 CaiXuyu,female,50 FangBo,female,60 ## 四、样例调试 前提:Linux环境有安装集群客户端,环境准备,参考第一课 数据规划: Flink样例工程的数据存储在Kafka组件中。向Kafka组件发送数据(需要有Kafka权限用户),并从Kafka组件接收数据。确保集群安装完成,包括HDFS、Yarn、Flink和Kafka。 1. 创建Topic。 将Kafka的Broker配置参数“allow.everyone.if.no.acl.found”的值修改为“true” 用户使用Linux命令行创建topic,执行命令前需要使用kinit命令进行人机认证,如:kinit flinkuser。 在kafka客户端目录执行如下指令,ZooKeeper集群信息以自己的为准: ``` bin/kafka-topics.sh --create --zookeeper 10.244.231.91:24002,10.244.230.245:24002,10.244.230.229:24002/kafka --partitions 5 --replication-factor 1 --topic topic3 ``` 2. Kerberos认证配置 修改flink客户端flink-conf.yaml如下配置: security.kerberos.login.keytab: /opt/testclient/user.keytab security.kerberos.login.principal: flinkuser security.kerberos.login.contexts: Client,KafkaClient security.kerberos.login.use-ticket-cache: false 调试步骤: 1. 比对“本地时间和Linux机器时间”与集群时间误都不能超过5分钟 2. 检查linux环境的JDK版本为1.8 3. 配置linux环境的/etc/hosts文件 4. 检查 C:\Windows\System32\drivers\etc\hosts文件中是否包含所有集群节点的域名IP映射信息 5. 在IDEA打开样例代码的FlinkKafkaJavaExample目录,检查SDK配置 6. 默认自动加载依赖,如未加载,则打开后选中pom.xml文件,右键点击“Add As Maven Project”后等待项目自动将依赖下载完毕 7. 在IDEA主页面,选择“File > Project Structures...”进入“Project Structure”页面。 8. 在“Project Structure”页面,选择“Artifacts”,单击“+”并选择“JAR > Empty”。 9. 根据实际情况设置Jar包的名称、类型以及输出路径。 10. 选择“Put into Output Root”。然后单击“Apply”。 11. 在IDEA主页面,选择“Build > Build Artifacts...”。在弹出的菜单中构建我们的jar包 12. 从IDEA项目out目录下的获取到Jar包,拷贝到Flink客户端目录,如“/opt/testclient/Flink/flink”。 13. 将如下包拷到"/opt/testclient/Flink/flink/lib"目录下,若已存在则忽略。 - kafka-clients-2.4.0-hw-ei-302002.jar - flink-connector-kafka_2.11-1.10.0-hw-ei-302002.jar - flink-connector-kafka-base_2.11-1.10.0-hw-ei-302002.jar - flink-dist_2.11-1.10.0-hw-ei-302002.jar 14. 在Linux环境中运行Flink应用程序,需要先启动Flink集群。在Flink客户端下执行yarn session命令,启动flink集群。 例如我们使用ssl相对路径指令为“bin/yarn-session.sh **-t** ssl/ -jm 1024 -tm 1024” 15. 在终端另开一个窗口,进入Flink客户端目录,调用bin/flink run脚本运行代码,例如: a. 生产数据的执行命令启动程序: ``` bin/flink run --class com.huawei.bigdata.flink.examples.WriteIntoKafka /opt/testclient/Flink/flink/FlinkKafkaJavaExample.jar --topic topic3 -bootstrap.servers 10.244.230.213:21007,10.244.231.48:21007,10.244.231.130:21007 --security.protocol SASL_PLAINTEXT --sasl.kerberos.service.name kafka --kerberos.domain.name hadoop.hadoop_arm_802.com ``` b. 消费数据 ``` bin/flink run --class com.huawei.bigdata.flink.examples.ReadFromKafka /opt/testclient/Flink/flink/FlinkKafkaJavaExample.jar --topic topic3 -bootstrap.servers 10.244.230.213:21007,10.244.231.48:21007,10.244.231.130:21007 --security.protocol SASL_PLAINTEXT --sasl.kerberos.service.name kafka --kerberos.domain.name hadoop.hadoop_arm_802.com ``` 16. 使用Flink Web页面查看Flink应用程序运行情况。 ## 五、问题互动渠道 FusonInsight 论坛入口 https://bbs.huaweicloud.com/forum/forum-1103-1.html
  • [赋能学习] MRS3.0.2版本 二次开发(2/27): HDFS调用样例
    # 视频在本帖二楼 ## 一、HDFS简介 HDFS(Hadoop Distribute File System)是一个适合运行在通用硬件之上,具备高度容错特性,支持高吞吐量数据访问的分布式**文件系统**,非常适合大规模数据集应用 ## 二、样例背景 HDFS的业务操作对象是文件,代码样例中所涉及的文件操作主要包括 1. 创建文件夹 2. 写文件 3. 追加文件内容 4. 读文件 5. 删除文件/文件夹 HDFS还有其他的业务处理,例如设置文件权限等,其他操作可以在掌握本代码样例之后,再扩展学习。 ## 三、Windows环境样例调用步骤 1. 环境准备,参考第一课 2. 比对时间,与集群时间误差不能超过5分钟 3. 检查 C:\Windows\System32\drivers\etc\hosts文件中是否包含所有集群节点的域名IP映射信息 4. 在IDEA打开样例代码中的hdfs-example-security目录,默认会自动下载依赖,如未下载,选中该目录下的pom.xml文件,右键点击“Add As Maven Project”后等待项目自动将依赖下载完毕 5. 从Manager界面下载用户认证凭据后,解压缩获取秘钥文件user.keytab和krb5.conf,将这两个文件放到样例代码的conf目录 6. 从客户端 /opt/client/HDFS/hadoop/etc/hadoop 目录中获取core-site.xml和hdfs-site.xml文件放到样例代码的conf目录 7. 修改样例代码中的用户信息 8. 右键选择conf目录,选择“Mark Directory as”-"Resources Root" 9. 打开 HdfsExample.java 文件右键执行Run 启动样例代码 ## 四、Linux环境调试步骤 1. 完成Windows环境样例调用步骤 2. 在windows环境中执行打包 3. 检查linux环境时间与集群误差不超过5分钟 4. 检查linux环境的JDK版本为1.8 5. 检查linux环境的/etc/hosts文件中包含所有集群节点的域名IP映射信息 6. 创建样例执行路径,例如/opt/hdfstest 7. 上传windows环境打包后生成的target目录下的 HDFSTest-0.0.1-SNAPSHOT.jar 包到/opt/hdfstest目录 8. 上传windows环境打包后生成的target目录下的lib目录到/opt/hdfstest目录下 9. 上传windows环境中调试通过后的conf目录到/opt/hdfstest目录 10. 执行如下命令验证linux环境下可访问HDFS ``` java -cp HDFSTest-0.0.1-SNAPSHOT.jar:/opt/hdfstest/conf:/opt/hdfstest/lib/* com.huawei.bigdata.hdfs.examples.HdfsExample ``` ## 五、问题互动渠道 FusionInsight论坛入口 https://bbs.huaweicloud.com/forum/forum-1103-1.html ​
  • [技术干货] 高性能利器!华为云MRS ClickHouse重磅推出!
     摘要:华为智能数据湖MRS服务即将上线ClickHouse高性能引擎集群,用户只需要几分钟,就可以轻松方便地一键式完成集群部署搭建,快速拥有PB级数据的秒级交互查询分析能力,帮助用户带来极致的性能体验。前言高性能引擎简介ClickHouse是最近这两年非常火的一款开源的分析型数据库,来自俄罗斯的Yandex公司,2016年开源。它独立于Hadoop大数据体系,其最核心的特点是极致压缩率和极速查询性能,能为用户节约大量成本,同时创造更多收益。它提供了兼容标准SQL协议的接口,支持JDBC、ODBC驱动,使用C++语言实现。当然它还有个宏伟的目标:成为世界上最快的分析型数据库,官方测试数据表明,ClickHouse领先Vertica达6倍,领先GreenPlum达到18倍,更是比传统大数据引擎Hive、Spark等快了上百倍!这是它和其他多个开源以及商业数据库的性能比对结果:https://clickhouse.tech/benchmark/dbms。典型应用场景ClickHouse是Click Stream + Data WareHouse的缩写,它起初应用于一款Web流量分析工具,基于页面的点击事件流,面向数据仓库进行OLAP分析。现在,ClickHouse被广泛的应用于互联网广告、App和Web流量、电信、金融、物联网等众多领域,非常适用于商业智能化应用场景,在国内外有大量的应用和实践:https://clickhouse.tech/docs/en/introduction/adopters/。正文华为智能数据湖MRS服务即将上线ClickHouse高性能引擎集群,用户只需要几分钟,就可以轻松方便地一键式完成集群部署搭建,快速拥有PB级数据的秒级交互查询分析能力,帮助用户带来极致的性能体验。手动挡集群模式升级2.1.1模糊的集群在介绍之前,我们首先要有个思维转变,ClickHouse集群和通常理解的集群是有差异的。比方说Hadoop集群由2个NameNode和多个DataNode组成的完备且独立的集群,业务可以直接交互访问;而对于多个ClickHouse节点组成的集群,它们是没有中心节点,更多的是一个静态资源池的概念,业务要使用ClickHouse集群模式,需要预先在各个节点的配置文件中定义cluster信息,等所有参与的节点达成共识,业务才可以正确的交互访问,也就是说配置文件中的cluster才是我们通常理解的“集群”概念。2.1.2真实的cluster常见的数据库系统,隐藏了表级以下的数据分区、副本存储等细节,用户是无感知的,而ClickHouse则要求用户主动来规划和定义数据分片(shard)、分区(partition)、副本(replica)位置等详细配置。它的这种类似“手动挡”的属性,给用户带来及其不友好的体验,所以MRS服务的ClickHouse实例对这些工作做了统一的打包处理,适配成了“自动挡”,实现了统一管理,灵活易用。具体部署形态上,一个ClickHouse实例将包含3个Zookeeper节点和多个ClickHouse节点,采用Dedicated Replica模式,数据双副本高可靠。平滑的弹性扩容能力随着业务的快速增长,面对集群存储容量或者CPU计算资源接近极限场景,MRS服务提供了平滑的弹性扩容能力,快速的满足客户业务增长的诉求。在用户进行集群扩容新的ClickHouse节点时,MRS提供了一键式数据Balance均衡工具,并把数据均衡的主动权交给用户,由用户根据业务的特点,自由决定数据均衡的方式和时间点,以便保障业务可用性,实现了更加平滑的扩容能力。例如:把负载高的节点从ELB中摘除,让负载(新数据)往新节点倾斜;使用MRS提供的专业化工具重新均衡数据;数据双写老化后自动切换;多元的鲲鹏算力加持面对鲲鹏生态快速发展,华为云也提供包含X86、ARM鲲鹏、昇腾在内的多样计算能力,支持从IOT、大数据、到AI等多种技术,提供最佳的性能、性价比、能效比。得益于华为云鲲鹏处理器多核优势,MRS的ClickHouse集群也支持华为自研ARM鲲鹏服务器,充分利用鲲鹏多核高并发能力,提供了芯片级的全栈自主优化能力,同时使用华为自研的操作系统EulerOS、华为JDK及数据加速层,充分释放底层硬件算力,实现了高性价比。灵活易用的配置管理MRS服务为用户提供了统一的集群管理页面,并将ClickHouse的实例配置向用户完全开放,用户可以根据自定义需求,灵活方便的通过可视化页面修改集群配置参数,包括增删cluster、macros、storage等信息。和其他MRS服务组件的配置一样,ClickHouse配置也分成集群和节点两个层面,考虑到ClickHouse引擎特殊性,需要注意不要被覆盖。另外,需要引起特别注意是,有些高级配置建议只能由“高级”用户使用,否者可能会导致系统异常。高可用HA部署架构MRS服务为用户提供了基于ELB的HA部署架构,可以将用户访问流量自动分发到多台后端节点,扩展系统对外的服务能力,实现更高水平的应用容错。如下图,客户端应用请求集群时,使用ELB(Elastic Load Balance)来进行流量分发,通过ELB的轮询机制,写不同节点上的本地表(Local Table),读不同节点上的分布式表(Distributed Table),这样,无论集群写入的负载、读的负载以及应用接入的高可用性都具备了有力的保障。丰富的监控运维能力MRS提供了丰富的ClickHouse集群监控和告警能力,实时发现系统异常,保障业务稳定运行。用户可以通过集群管理Manager的监控页面实时查看ClickHouse集群的运行概况,如健康、配置及角色实例状态统计等指标信息,同时还可以监控具体实例内部运行状态,包括:实时的读、写、数据库连接等多个维度的信息;此外,MRS还可以与华为云消息通知服务(SMN)的消息服务系统对接,将告警信息通过短信或者邮件等形式推送给用户。用户可以自定义配置监控与告警阈值用于关注各指标的健康情况,当监控数据达到告警阈值,系统将自动触发告警,将异常信息以告警形式及时通知到用户。通过以上能力,MRS可以帮助用户轻松运维,实时监控,实时发送告警,操作灵活,让用户更加省心省力。可靠的安全防护能力MRS提供了VPC网络隔离、专属资源隔离、主机安全等完备的安全保障机制,保障了用户ClickHouse集群数据访问的安全可靠。具体如下:VPC网络隔离:在公有云部署环境中,MRS通过VPC提供隔离的网络环境,保证集群的业务、管理的安全性。用户可以结合虚拟私有云VPC的子网划分、路由控制、安全组等功能,为用户提供高安全、高可靠的网络隔离环境。专属资源隔离:在面向企业、政府、金融等客户,MRS提供了计算、存储资源池以及网络、管控多级隔离的资源隔离部署方案,为客户打造了安全可靠、便捷的云上“头等舱”。具体模式包括:专属计算资源+共享存储资源、共享计算资源+专属存储资源、专属计算资源+专属存储资源等三种模式。主机安全服务:MRS支持与云上的安全服务集成,针对主机安全服务,做了兼容性测试,保证功能和性能不受影响的情况下,增强服务的安全能力,如支持漏洞扫描、安全防护、应用防火墙、堡垒机、网页防篡改等能力。结尾总结展望MRS隆重推出的ClickHouse引擎,快速补齐了MRS服务在大数据实时分析领域的能力。同时相对用户自建集群,MRS ClickHouse具备平滑扩容、HA、鲲鹏加持、灵活配置、简单运维、安全可靠等优势能力,将会成为用户在云上构建高性能海量数据分析仓库的首选。同时作为一款新的重量级数据库引擎,我们还在持续学习和探索过程中,MRS后面会持续从内核、服务化、生态端多个角度进行优化和改进,包括:鲲鹏指令集加速、安全鉴权、SQL诊断、BI工具集成、AI融合高级特性等。案例分享前段时间我们在华为云MRS服务上测试了ClickHouse官网的Star Schema Benchmark测试套,硬件配置:3台32 vCPU * 128GB的虚机,1TB的数据集,13个查询6个在1秒以内返回,10个在5秒内返回,全部查询10秒以内返回,性能表现非常突出。海量数据分析的低成本案例:https://altinity.com/blog/2020/1/1/clickhouse-cost-efficiency-in-action-analyzing-500-billion-rows-on-an-intel-nuc
  • [问题求助] MRS-hetuserver HSConsole UI访问部分功能不显示
    【功能模块】hetuserver 服务中,访问 HSConsole web UI后,在 Web UI中看不到部分功能【操作步骤&问题现象】1、通过admin管理员登陆 FIM,进入hetuserver服务中,访问 HSConsole web UI ,看不到部分功能模块,请问是缺少权限吗?缺少什么权限?请说明。请各位专家耐心指教。【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [其他] 了解MRS的可靠性
    MRS在基于Apache Hadoop开源软件的基础上,在主要业务部件的可靠性方面进行了优化和提升。具体体现如下:1、管理节点均实现HAHadoop开源版本的数据、计算节点已经是按照分布式系统进行设计的,单节点故障不影响系统整体运行;而以集中模式运作的管理节点可能出现的单点故障,就成为整个系统可靠性的短板。MRS对所有业务组件的管理节点都提供了类似的双机的机制,包括Manager、Presto、HDFS NameNode、Hive Server、HBase HMaster、YARN Resources Manager、Kerberos Server、Ldap Server等,全部采用主备或负荷分担配置,有效避免了单点故障场景对系统可靠性的影响。2、完备的可靠性机制      a、通过可靠性分析方法,梳理软件、硬件异常场景下的处理措施,提升系统的可靠性。      b、保障意外掉电时的数据可靠性,不论是单节点意外掉电,还是整个集群意外断电,恢复供电后系统能够正常恢复业务,除非硬盘介质损坏,否则关键数据不会丢失。     c 、硬盘亚健康检测和故障处理,对业务不造成实际影响。     d、自动处理文件系统的故障,自动恢复受影响的业务。     e、自动处理进程和节点的故障,自动恢复受影响的业务。     f 、自动处理网络故障,自动恢复受影响的业务。
  • [其他] 了解MRS的安全性
           MapReduce服务(MRS)提供租户完全可控的企业级大数据集群云服务,轻松运行Hadoop、Spark、HBase、Kafka、Storm等大数据组件,用户无需关注硬件的购买和维护。MRS服务拥有强大的Hadoop内核团队,基于华为FusionInsight大数据企业级平台构筑,历经行业数万节点部署量的考验,提供多级用户SLA保障。具体安全性体现如下:1、MRS服务支持资源专属区内部署,专属区内物理资源隔离,用户可以在专属区内灵活地组合计算存储资源,包括专属计算资源+共享存储资源、共享计算资源+专属存储资源、专属计算资源+专属存储资源。MRS集群内支持逻辑多租,通过权限隔离,对集群的计算、存储、表格等资源按租户划分。2、MRS支持Kerberos安全认证,实现了基于角色的安全控制及完善的审计功能。3、MRS支持对接华为云云审计服务(CTS),为用户提供MRS资源操作请求及请求结果的操作记录,供用户查询、审计和回溯使用。支持所有集群操作审计,所有用户行为可溯源。4、MRS支持与主机安全服务对接,针对主机安全服务,做过兼容性测试,保证功能和性能不受影响的情况下,增强服务的安全能力。5、MRS支持基于WebUI的统一的用户登录能力,Manager自带用户认证环节,用户只有通过Manager认证才能正常访问集群。6、MRS支持数据存储加密,所有用户账号密码加密存储,数据通道加密传输,服务模块跨信任区的数据访问支持双向证书认证等能力。7、MRS大数据集群提供了完整的企业级大数据多租户解决方案。多租户是MRS大数据集群中的多个资源集合(每个资源集合是一个租户),具有分配和调度资源(资源包括计算资源和存储资源)的能力。多租户将大数据集群的资源隔离成一个个资源集合,彼此互不干扰,用户通过“租用”需要的资源集合,来运行应用和作业,并存放数据。在大数据集群上可以存在多个资源集合来支持多个用户的不同需求。8、MRS支持细粒度权限管理,结合华为云IAM服务提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。例如:针对MRS服务,管理员能够控制IAM用户仅能对集群进行指定的管理操作。如不允许某用户组删除集群,仅允许操作MRS集群基本操作,如创建集群、查询集群列表等。同时MRS支持多租户对OBS存储的细粒度权限管理,根据多种用户角色来区分访问OBS桶及其内部的对象的权限,实现MRS用户对OBS桶下的目录权限控制。9、MRS支持企业项目管理。企业项目是一种云资源管理方式,企业管理(Enterprise Management)提供面向企业客户的云上资源管理、人员管理、权限管理、财务管理等综合管理服务。区别于管理控制**立操控、配置云产品的方式,企业管理控制台以面向企业资源管理为出发点,帮助企业以公司、部门、项目等分级管理方式实现企业云上的人员、资源、权限、财务的管理。MRS支持已开通企业项目服务的用户在创建集群时为集群配置对应的项目,然后使用企业项目管理对MRS上的的资源进行分组管理。此特性适用于客户针对多个资源进行分组管理,并对相应的企业项目进行诸如权限控制、分项目费用查看等操作的场景。
  • [其他] 【活动周知】11·11狂欢继续!!!MapReduce服务5折钜惠
    【11.11上云嘉年华,MapReduce服务5折钜惠】MapReduce服务  5折火热抢购中!热门应用场景     IoT数据处理全栈式、高性能、低成本的大数据分析平台火热抢购中→点此直达
  • [问题求助] 【MRS产品】【SPARK】客户运行python写的算法模型时报错
    【功能模块】spark2MRS版本为6.5.1.7【操作步骤&问题现象】1、运行客户的算法模型时报错【截图信息】报错日志信息如下【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【MapReduce】【SparkSubmit功能】最初能执行成功的作业任务,现在总是失败,怎么解决?
    【功能模块】SparkSubmit作业任务执行失败【操作步骤&问题现象】1、自定义创建Hadoop分析集群2、添加SparkSubmit作业(标红处是系统生成的,无法修改)3、等待作业执行完成,output路径下应该有对应的csv文件生成。实际是作业任务失败,报错如下:【截图信息】详见步骤附图【日志信息】(可选,上传日志内容或者附件)输入数据文件及主函数jar包见附件。
  • [技术干货] MRS 2.x版本集群安装Ranger 2.0.0
    Apache Ranger提供一个集中式安全管理框架,并解决授权和审计。它可以对整个Hadoop生态中如HDFS、Hive、HBase、Kafka、Storm等进行细粒度的数据访问控制。用户可以利用Ranger提供的前端WebUI控制台通过配置相关策略来控制用户对这些组件的访问权限 。本文主要介绍如何在MRS2.x版本集群手动安装Ranger组件,并对hive,hbase,hdfs进行权限控制。博文链接:https://bbs.huaweicloud.com/blogs/203406
  • 还担心开发删库跑路? 试试在MRS中配置Ranger控制访问权限
            Ranger作为当前比较流行的大数据生态权限控制方案,在大部分的公司有着广泛使用,Ranger提供了不同用户访问大数据资源的权限控制方案,配合用户认证登录系统,它提供了细粒度级、基于角色的授权.      在MRS 服务的1.9.3的版本中,已经提供了对ranger的支持。在创建完安装了Ranger组件的MRS集群后,Hive的权限控制暂未集成在Ranger中,本章节主要介绍Hive组件如何集成在Ranger中。登录Ranger WebUI界面。在“Service Manager”中的HIVE处,单击+添加Hive Service。图1 添加Hive Service请参考表1填写添加Hive Service的相关参数,未在表中列出的参数请保持默认值。表1 参数说明参数说明示例值Service Name创建的service name名称,固定填写:hivedev。hivedevUsername可以任意填写。adminPassword可以任意填写。-jdbc.driverClassName连接hive的驱动类,固定填写:org.apache.hive.jdbc.HiveDriver。org.apache.hive.jdbc.HiveDriverjdbc.url连接hive的url,格式为ZooKeeper Mode:jdbc:hive2://<host>:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2其中<host>为ZooKeeper地址,ZooKeeper地址可通过登录MRS Manager然后选择“服务管理 > ZooKeeper > 实例”,查看ZooKeeper实例的“管理IP”地址获取。jdbc:hive2://xx.xx.xx.xx:2181,xx.xx.xx.xx:2181,xx.xx.xx.xx:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2图2 Create hivedev单击“Add”添加服务。启动Ranger Hive Plugin,授权Ranger管理Hive。hive.security.authorization.enabled = truehive.security.authorization.manager = org.apache.ranger.authorization.hive.authorizer.RangerHiveAuthorizerFactory在MRS控制台,单击集群名称进入集群详情页面。选择“组件管理”。选择“Hive > 服务配置”,将“基础配置”切换为“全部配置”。搜索配置“hive.security.authorization”,修改如下两个配置:图3 修改hive.security.authorization单击“保存配置”,并勾选“重新启动受影响的服务或实例。”重启Hive服务。添加访问控制策略,即Policy。登录Ranger WebUI界面。在HIVE区域单击已添加的服务名称“hivedev”。单击“Add New Policy”,新增访问控制策略。参考表2配置参数,未在表中列出的参数请保持默认值。表2 参数说明参数说明示例值Policy Name策略名称。Policy001database该策略允许访问的数据库名称。testtable该策略允许访问的数据库对应的表名称。table1Hive Column该策略允许访问的数据库对应的表的列名。nameAllow ConditionsSelect Group:该策略允许访问的用户组。Select User:该策略允许访问的用户组中的用户。Permissions:该策略允许用户使用的权限。Select Group:testuserSelect User:testuserPermissions:Create和select图4 新增hivedev的访问控制策略单击“Add”,完成策略添加,依据如上Policy示例,testuser用户组中的testuser用户将对Hive的“test”数据库中的表“table1”的“name”列有Create和select的权限,而对于其他列则没有任何的访问权限。参见从零开始使用Hive登录hive客户端,验证Ranger是否已经完成集成Hive。执行如下命令,进入hive beeline。source /opt/client/bigdata_envbeeline执行如下命令,建立连接并使用testuser登录。!connect jdbc:hive2://xx.xx.xx.xx:2181,xx.xx.3.81:2181,192.168.3.153:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2图5 登录Hive查询数据,验证Ranger是否已经集成成功。图6 验证Ranger集成Hive
  • [技术干货] MRS Hive 调优参考
    12.5 Hive12.5.1 建立表分区操作场景Hive在做Select查询时,一般会扫描整个表内容,会消耗较多时间去扫描不关注的数据。此时,可根据业务需求及其查询维度,建立合理的表分区,从而提高查询效率。操作步骤1.      使用PuTTY工具,以root用户登录已安装Hive客户端的节点。2.      执行以下命令,进入客户端安装目录,例如“/opt/client”。cd /opt/client3.      执行source bigdata_env命令,配置客户端环境变量。4.      在客户端中执行如下命令,执行登录操作。kinit 用户名5.      执行以下命令登录客户端工具。beeline6.      指定静态分区或者动态分区。1.      静态分区:静态分区是手动输入分区名称,在创建表时使用关键字PARTITIONED BY指定分区列名及数据类型。应用开发时,使用ALTER TABLE ADD PARTITION语句增加分区,以及使用LOAD DATA INTO PARTITON语句将数据加载到分区时,只能静态分区。2.      动态分区:通过查询命令,将结果插入到某个表的分区时,可以使用动态分区。动态分区通过在客户端工具执行如下命令来开启:set hive.exec.dynamic.partition=true动态分区默认模式是strict,也就是必须至少指定一列为静态分区,在静态分区下建立动态子分区,可以通过如下设置来开启完全的动态分区:set hive.exec.dynamic.partition.mode=nonstrict  说明:1.      动态分区可能导致一个DML语句创建大量的分区,对应的创建大量新文件夹,对系统性能可能带来影响。2.      在文件数量大的情况下,执行一个SQL语句启动时间较长,可以在执行SQL语句之前执行“set mapreduce.input.fileinputformat.list-status.num-threads = 100;”语句来缩短启动时间。“mapreduce.input.fileinputformat.list-status.num-threads”参数需要先添加到Hive的白名单才可设置。12.5.2 Join优化操作场景使用Join语句时,如果数据量大,可能造成命令执行速度和查询速度慢,此时可进行Join优化。Join优化可分为以下方式:·         Map Join·         Sort Merge Bucket Map Join·         Join顺序优化Map JoinHive的Map Join适用于能够在内存中存放下的小表(指表大小小于25MB),通过“hive.mapjoin.smalltable.filesize”定义小表的大小,默认为25MB。Map Join的方法有两种:·         使用/*+ MAPJOIN(join_table) */。·         执行语句前设置如下参数,当前版本中该值默认为true。set hive.auto.convert.join=true使用Map Join时没有Reduce任务,而是在Map任务前起了一个MapReduce Local Task,这个Task通过TableScan读取小表内容到本机,在本机以HashTable的形式保存并写入硬盘上传到DFS,并在distributed cache中保存,在Map Task中从本地磁盘或者distributed cache中读取小表内容直接与大表join得到结果并输出。使用Map Join时需要注意小表不能过大,如果小表将内存基本用尽,会使整个系统性能下降甚至出现内存溢出的异常。Sort Merge Bucket Map Join使用Sort Merge Bucket Map Join必须满足以下2个条件:1.      join的两张表都很大,内存中无法存放。2.      两张表都按照join key进行分桶(clustered by (column))和排序(sorted by(column)),且两张表的分桶数正好是倍数关系。通过如下设置,启用Sort Merge Bucket Map Join:set hive.optimize.bucketmapjoin=true   set hive.optimize.bucketmapjoin.sortedmerge=true这种Map Join也没有Reduce任务,是在Map任务前启动MapReduce Local Task,将小表内容按桶读取到本地,在本机保存多个桶的HashTable备份并写入HDFS,并保存在Distributed Cache中,在Map Task中从本地磁盘或者Distributed Cache中按桶一个一个读取小表内容,然后与大表做匹配直接得到结果并输出。Join顺序优化当有3张及以上的表进行Join时,选择不同的Join顺序,执行时间存在较大差异。使用恰当的Join顺序可以有效缩短任务执行时间。Join顺序原则:·         Join出来结果较小的组合,例如表数据量小或两张表Join后产生结果较少,优先执行。·         Join出来结果大的组合,例如表数据量大或两张表Join后产生结果较多,在后面执行。例如,customer表的数据量最多,orders表和lineitem表优先Join可获得较少的中间结果。原有的Join语句如下:select  l_orderkey,  sum(l_extendedprice * (1 - l_discount)) as revenue,  o_orderdate,  o_shippriorityfrom  customer,  orders,  lineitemwhere  c_mktsegment = 'BUILDING'  and c_custkey = o_custkey  and l_orderkey = o_orderkey  and o_orderdate < '1995-03-22'  and l_shipdate > '1995-03-22'limit 10;Join顺序优化后如下:select  l_orderkey,  sum(l_extendedprice * (1 - l_discount)) as revenue,  o_orderdate,  o_shippriorityfrom  orders,  lineitem,  customerwhere  c_mktsegment = 'BUILDING'  and c_custkey = o_custkey  and l_orderkey = o_orderkey  and o_orderdate < '1995-03-22'  and l_shipdate > '1995-03-22'limit 10;注意事项Join数据倾斜问题执行任务的时候,任务进度长时间维持在99%,这种现象叫数据倾斜。数据倾斜是经常存在的,因为有少量的Reduce任务分配到的数据量和其他Reduce差异过大,导致大部分Reduce都已完成任务,但少量Reduce任务还没完成的情况。解决数据倾斜的问题,可通过设置set hive.optimize.skewjoin=true并调整hive.skewjoin.key的大小。hive.skewjoin.key是指Reduce端接收到多少个key即认为数据是倾斜的,并自动分发到多个Reduce。12.5.3 Group By优化操作场景优化Group by语句,可提升命令执行速度和查询速度。Group by的时候, Map端会先进行分组, 分组完后分发到Reduce端, Reduce端再进行分组。可采用Map端聚合的方式来进行Group by优化,开启Map端初步聚合,减少Map的输出数据量。操作步骤在Hive客户端进行如下设置:set hive.map.aggr=true注意事项Group By数据倾斜Group By也同样存在数据倾斜的问题,设置hive.groupby.skewindata为true,生成的查询计划会有两个MapReduce Job,第一个Job的Map输出结果会随机的分布到Reduce中,每个Reduce做聚合操作,并输出结果,这样的处理会使相同的Group By Key可能被分发到不同的Reduce中,从而达到负载均衡,第二个Job再根据预处理的结果按照Group By Key分发到Reduce中完成最终的聚合操作。Count Distinct聚合问题当使用聚合函数count distinct完成去重计数时,处理值为空的情况会使Reduce产生很严重的数据倾斜,可以将空值单独处理,如果是计算count distinct,可以通过where字句将该值排除掉,并在最后的count distinct结果中加1。如果还有其他计算,可以先将值为空的记录单独处理,再和其他计算结果合并。12.5.4 数据存储优化操作场景“ORC”是一种高效的列存储格式,在压缩比和读取效率上优于其他文件格式。建议使用“ORC”作为Hive表默认的存储格式。前提条件已登录Hive客户端,具体操作请参见《管理员指南》的“使用Hive客户端”。操作步骤·         推荐:使用“SNAPPY”压缩,适用于压缩比和读取效率要求均衡场景。Create table xx stored as orc tblproperties ("orc.compress"="SNAPPY")·         可用:使用“ZLIB”压缩,适用于压缩比要求较高场景。Create table xx stored as orc tblproperties ("orc.compress"="ZLIB")  说明:xx为具体使用的Hive表名。12.5.5 SQL优化操作场景在Hive上执行SQL语句查询时,如果语句中存在“(a&b) or (a&c)”逻辑时,建议将逻辑改为“a & (b or c)”。样例假设条件a为“p_partkey = l_partkey”,优化前样例如下所示:select        sum(l_extendedprice* (1 - l_discount)) as revenuefrom        lineitem,        partwhere           (                p_partkey = l_partkey                 and p_brand = 'Brand#32'                and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG')                and l_quantity >= 7 and l_quantity <= 7 + 10                and p_size between 1 and 5                and l_shipmode in ('AIR', 'AIR REG')                and l_shipinstruct = 'DELIVER IN PERSON'        )        or        (       p_partkey = l_partkey                 and p_brand = 'Brand#35'                and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK')                and l_quantity >= 15 and l_quantity <= 15 + 10                and p_size between 1 and 10                and l_shipmode in ('AIR', 'AIR REG')                and l_shipinstruct = 'DELIVER IN PERSON'        )        or        (       p_partkey = l_partkey                 and p_brand = 'Brand#24'                and p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG')                and l_quantity >= 26 and l_quantity <= 26 + 10                and p_size between 1 and 15                and l_shipmode in ('AIR', 'AIR REG')                and l_shipinstruct = 'DELIVER IN PERSON'        )优化后样例如下所示:select        sum(l_extendedprice* (1 - l_discount)) as revenuefrom        lineitem,        partwhere   p_partkey = l_partkey and        ((                p_brand = 'Brand#32'                and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG')                and l_quantity >= 7 and l_quantity <= 7 + 10                and p_size between 1 and 5                and l_shipmode in ('AIR', 'AIR REG')                and l_shipinstruct = 'DELIVER IN PERSON'        )        or        (                p_brand = 'Brand#35'                and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK')                and l_quantity >= 15 and l_quantity <= 15 + 10                and p_size between 1 and 10                and l_shipmode in ('AIR', 'AIR REG')                and l_shipinstruct = 'DELIVER IN PERSON'        )        or        (                p_brand = 'Brand#24'                and p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG')                and l_quantity >= 26 and l_quantity <= 26 + 10                and p_size between 1 and 15                and l_shipmode in ('AIR', 'AIR REG')                and l_shipinstruct = 'DELIVER IN PERSON'        ))12.5.6 使用Hive CBO优化查询操作场景在Hive中执行多表Join时,Hive支持开启CBO(Cost Based Optimization),系统会自动根据表的统计信息,例如数据量、文件数等,选出最优计划提高多表Join的效率。Hive需要先收集表的统计信息后才能使CBO正确的优化。  说明:·         CBO优化器会基于统计信息和查询条件,尽可能地使join顺序达到最优。但是也可能存在特殊情况导致join顺序调整不准确。例如数据存在倾斜,以及查询条件值在表中不存在等场景,可能调整出非优化的join顺序。·         开启列统计信息自动收集时,需要在reduce侧做聚合统计。对于没有reduce阶段的insert任务,将会多出reduce阶段,用于收集统计信息。前提条件已登录Hive客户端,具体操作请参见《管理员指南》的“使用Hive客户端”。操作步骤1.      在Manager界面Hive组件的服务配置中搜索“hive.cbo.enable”参数,选中“true”永久开启功能或者通过以下命令临时开启功能:set hive.cbo.enable=true;2.      手动收集Hive表已有数据的统计信息。执行以下命令,可以手动收集统计信息。仅支持统计一张表,如果需要统计不同的表需重复执行。ANALYZE TABLE [db_name.]tablename [PARTITION(partcol1[=val1], partcol2[=val2], ...)]COMPUTE STATISTICS[FOR COLUMNS][NOSCAN];  说明:1.      指定FOR COLUMNS时,收集列级别的统计信息。2.      指定NOSCAN时,将只统计文件大小和个数,不扫描具体文件。例如:analyze table table_name compute statistics;analyze table table_name compute statistics for columns;3.      配置Hive自动收集统计信息。开启配置后,执行insert overwrite/into命令插入数据时才自动统计新数据的信息。0.      在Hive客户端执行以下命令临时开启收集:set hive.stats.autogather = true; 开启表/分区级别的统计信息自动收集。set hive.stats.column.autogather = true; 开启列级别的统计信息自动收集。  说明:1.          列级别统计信息的收集不支持复杂的数据类型,例如Map,Struct等。2.      表级别统计信息的自动收集不支持Hive on HBase表。1.      在Manager界面Hive的服务配置中,搜索参数“hive.stats.autogather”和“hive.stats.column.autogather”,选中“true”永久开启收集功能。4.      执行以下命令可以查看统计信息。DESCRIBE FORMATTED table_name[.column_name] PARTITION partition_spec;例如:desc formatted table_name;desc formatted table_name.id;desc formatted table_name.id partition(time='2016-05-27');  说明:分区表仅支持分区级别的统计信息收集,因此分区表需要指定分区来查询统计信息。 
  • [技术干货] clickhouse 很火,我们也来实践一把
    手把手教你在华为云编译和使用ClickHouse  https://bbs.huaweicloud.com/blogs/199893手把手教你在MRS集群部署ClickHouse服务https://bbs.huaweicloud.com/blogs/199894更多期待: MRS即将推出自己的clickhouse托管产品