华为云用户手册

  • 示例代码 如下示例仅供参考,最新代码请前往获取SDK章节获取并运行。 /* * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved. */ package com.huaweicloud.sis.android.demo.tts; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import com.huaweicloud.sdk.core.auth.BasicCredentials; import com.huaweicloud.sdk.core.exception.ConnectionException; import com.huaweicloud.sdk.core.exception.RequestTimeoutException; import com.huaweicloud.sdk.core.exception.ServiceResponseException; import com.huaweicloud.sdk.core.http.HttpConfig; import com.huaweicloud.sdk.core.utils.StringUtils; import com.huaweicloud.sdk.sis.v1.SisClient; import com.huaweicloud.sdk.sis.v1.model.PostCustomTTSReq; import com.huaweicloud.sdk.sis.v1.model.RunTtsRequest; import com.huaweicloud.sdk.sis.v1.model.RunTtsResponse; import com.huaweicloud.sdk.sis.v1.model.TtsConfig; import com.huaweicloud.sdk.sis.v1.region.SisRegion; import com.huaweicloud.sis.android.demo.R; import com.huaweicloud.sis.android.demo.service.MediaPlayerService; import com.huaweicloud.sis.android.demo.Config; /** * 功能描述 * 语音合成 http * * @since 2022-07-18 */ public class SttsActivity extends AppCompatActivity { private EditText text; private TextView outResult; private Button startSoundRecording; private Button startPlay; private Handler handler; // 保存合成的base64字符串 private String base64Data; // 合成音频路径 private String createFilePath; // 客户端请求 private SisClient client; private MediaPlayerService mediaPlayerService; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.stts); } @Override protected void onStart() { super.onStart(); initView(); initResoureces(); } @Override protected void onDestroy() { mediaPlayerService.stopMyPlayer(createFilePath); super.onDestroy(); } // 初始化界面 private void initView() { text = findViewById(R.id.input_text); outResult = findViewById(R.id.out_result); startSoundRecording = findViewById(R.id.start); startPlay = findViewById(R.id.startplay); startSoundRecording.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Runnable runnable = new Runnable() { @Override public void run() { String sttsRequestText = getSttsResponse(); Message message = new Message(); Bundle mBundle = new Bundle(); mBundle.putString("result", sttsRequestText); message.setData(mBundle); handler.sendMessage(message); } }; new Thread(runnable).start(); } }); startPlay.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (!StringUtils.isEmpty(base64Data)) { createFilePath = mediaPlayerService.createAudioFile(getBaseContext(), "wav", base64Data); mediaPlayerService.startPlay(createFilePath); } } }); } /** * 初始化资源 * * @return */ private void initResoureces() { BasicCredentials auth = new BasicCredentials() .withAk(this.getString(R.string.HUAWEICLOUD_SDK_AK)) .withSk(this.getString(R.string.HUAWEICLOUD_SDK_SK)) .withProjectId(Config.PROJECT_ID); HttpConfig config = HttpConfig.getDefaultHttpConfig(); config.withIgnoreSSLVerification(true); client = SisClient.newBuilder() .withHttpConfig(config) .withCredential(auth) .withRegion(SisRegion.valueOf(Config.REGION)) .build(); handler = new Handler(getMainLooper()) { @Override public void handleMessage(@NonNull Message message) { super.handleMessage(message); switch (message.what) { case 0: Bundle bundle = message.getData(); String rstr = bundle.getString("result"); outResult.setText(rstr); break; default: Log.e("Unexpected value: ", String.valueOf(message.what)); } } }; mediaPlayerService = new MediaPlayerService(); } // 设置请求体 private RunTtsRequest getRunTtsRequest() { TtsConfig configbody = new TtsConfig(); configbody.setAudioFormat(TtsConfig.AudioFormatEnum.fromValue("wav")); configbody.setSampleRate(TtsConfig.SampleRateEnum.fromValue("8000")); configbody.setProperty(TtsConfig.PropertyEnum.fromValue("chinese_huaxiaomei_common")); RunTtsRequest request = new RunTtsRequest(); PostCustomTTSReq body = new PostCustomTTSReq(); body.withConfig(configbody); if (!StringUtils.isEmpty(text.getText().toString())) { body.withText(text.getText().toString()); } else { body.withText("请输入合成文本"); } request.withBody(body); return request; } // 发送请求 private String getSttsResponse() { RunTtsRequest request = getRunTtsRequest(); String ttsString = ""; try { RunTtsResponse response = client.runTts(request); if (response.getResult().getData() != null) { base64Data = response.getResult().getData(); ttsString = "合成成功"; } else { ttsString = "合成失败"; } Log.i("info", ttsString); } catch (ConnectionException | RequestTimeoutException | ServiceResponseException e) { Log.e("error", e.toString()); } catch (Exception e) { Log.e("error", e.toString()); } return ttsString; } @Override protected void onPause() { mediaPlayerService.stopMyPlayer(createFilePath); super.onPause(); } }
  • 请求参数 请求类为RunTtsRequest,其中包含参数类PostCustomTTSReq,该类包含两个参数text(待合成文本)和TtsConfig,详见TtsConfig。 表1 TtsConfig 参数名称 是否必选 参数类型 描述 audio_format 否 String 待合成的音频格式,可选mp3,wav等,默认wav。具体信息请参见《API参考》中语音合成章节。 pitch 否 Integer 音高,[-500,500] ,默认是0。 speed 否 Integer 语速,[-500,500] ,默认是0。 volume 否 Integer 音量,[0,100],默认是50。 sample_rate 否 String 采样率,支持“8000”、“16000”,默认“8000”。 property 否 String 特征字符串,{language}_{speaker}_{domain},默认chinese_xiaoqi_common。具体信息请参见《API参考》中语音合成章节。 伪代码 TtsConfig configbody = new TtsConfig(); configbody.setAudioFormat(TtsConfig.AudioFormatEnum.fromValue("wav")); configbody.setSampleRate(TtsConfig.SampleRateEnum.fromValue("8000")); configbody.setProperty(TtsConfig.PropertyEnum.fromValue("chinese_huaxiaomei_common")); RunTtsRequest request = new RunTtsRequest(); PostCustomTTSReq body = new PostCustomTTSReq(); body.withConfig(configbody); if (!StringUtils.isEmpty(text.getText().toString())) { body.withText(text.getText().toString()); } else { body.withText("请输入合成文本"); } request.withBody(body); return request;
  • 初始化Client 初始化SisClient,详细信息如下。 配置客户端连接参数。 默认配置 // 使用默认配置 HttpConfig config = HttpConfig.getDefaultHttpConfig(); 网络代理(可选) // 根据需要配置网络代理,网络代理默认的协议为 `http` 协议 config.withProxyHost("proxy.huaweicloud.com") .withProxyPort(8080) .withProxyUsername("test") .withProxyPassword("test"); 超时配置(可选) // 默认连接超时时间为60秒,可根据需要调整 config.withTimeout(60); SSL配置(可选) // 根据需要配置是否跳过SSL证书验证 config.withIgnoreSSLVerification(true); 配置认证信息。 配置AK、SK、project_id信息。华为云通过AK识别用户的身份,通过SK对请求数据进行签名验证,用于确保请求的机密性、完整性和请求者身份的正确性。 使用永久AK和SK BasicCredentials basicCredentials = new BasicCredentials() .withAk(ak) .withSk(sk) .withProjectId(projectId); 使用临时AK和SK BasicCredentials basicCredentials = new BasicCredentials() .withAk(ak) .withSk(sk) .withSecurityToken(securityToken) .withProjectId(projectId) 认证参数说明: ak、sk:访问秘钥信息,获取方法请参考AK/SK认证。 projectId:华为云项目ID,获取方法请参考获取项目ID。。 securityToken:采用临时AK、SK 认证场景下的安全票据,可以通过token获取或者通过委托授权获取。 初始化客户端(region和指定云服务enddpoint二选一即可)。 指定region方式(强烈推荐) // 初始化客户端认证信息,使用当前客户端初始化方式可不填 projectId/domainId,以初始化 BasicCredentials 为例 BasicCredentials basicCredentials = new BasicCredentials() .withAk(ak) .withSk(sk); // 初始化指定云服务的客户端 {Service}Client ,以初始化 Region 级服务SIS的 SisClient 为例 SisClient client = SisClient.newBuilder() .withHttpConfig(config) .withCredential(basicCredentials) .withRegion(SisRegion.valueOf("cn-north-4")) .build(); 指定云服务endpoint方式(可选) // 指定终端节点,以SIS服务北京四的 endpoint 为例 String endpoint = "https://sis-ext.cn-north-4.myhuaweicloud.com"; // 初始化客户端认证信息,需要填写相应 projectId/domainId,以初始化 BasicCredentials 为例 BasicCredentials basicCredentials = new BasicCredentials() .withAk(ak) .withSk(sk) .withProjectId(projectId); // 初始化指定云服务的客户端 {Service}Client ,以初始化 Region 级服务SIS的 CbsClient 为例 SisClient client = SisClient.newBuilder() .withHttpConfig(config) .withCredential(basicCredentials) .withEndpoint(endpoint) .build(); endpoint是华为云各服务应用区域和各服务的终端节点,详情请查看 地区和终端节点。
  • 代码示例 如下示例仅供参考,最新代码请前往获取SDK章节获取并运行。 import com.huawei.sis.bean.AuthInfo; import com.huawei.sis.bean.SisConfig; import com.huawei.sis.bean.SisConstant; import com.huawei.sis.bean.request.FlashLasrRequest; import com.huawei.sis.bean.response.FlashLasrResponse; import com.huawei.sis.client.FlashLasrClient; import com.huawei.sis.exception.SisException; import com.huawei.sis.util.JsonUtils; /** * 录音文件极速版Demo * * Copyright 2021 Huawei Technologies Co.,Ltd. */ public class FlashLasrDemo { // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 private String ak = System.getenv("HUAWEICLOUD_SDK_AK"); private String sk = System.getenv("HUAWEICLOUD_SDK_SK"); private String region = ""; // 区域,如cn-north-1、cn-north-4 private String projectId = ""; // 项目id,在我的凭证查看。参考https://support.huaweicloud.com/api-sis/sis_03_0008.html private String obsBucketName = ""; // obs桶名 private String obsObjectKey = ""; // obs对象的key private String audioFormat = ""; // 文件格式,如wav等, 支持格式详见api文档 private String property = ""; // 属性字符串,language_sampleRate_domain, 如chinese_8k_common, 详见api文档 /** * 设置录音文件识别极速版参数 * * @param request 录音文件极速版请求 */ private void setShortParameter(FlashLasrRequest request) { // 以下参数必选 // 设置桶名,必选 request.setObsBucketName(obsBucketName); // 设置桶内对象名,必选 request.setObsObjectKey(obsObjectKey); // 设置格式,必选 request.setAudioFormat(audioFormat); // 设置属性,必选 request.setProperty(property); // 以下参数可选 // 设置是否添加标点,默认是no request.setAddPunc("yes"); // 设置热词id,详见api文档,若热词id不存在,则会报错 // request.setVocabularyId(""); // 设置是否将音频中数字转写为阿拉伯数字,yes or no,默认yes request.setDigitNorm("no"); // 设置是否需要word_info,yes or no, 默认no request.setNeedWordInfo("no"); // 设置是否只识别首个声道的音频数据,默认no request.setFirstChannelOnly("no"); } /** * 定义config,所有参数可选,设置超时时间等。 * * @return SisConfig */ private SisConfig getConfig() { SisConfig config = new SisConfig(); // 设置连接超时,默认10000ms config.setConnectionTimeout(SisConstant.DEFAULT_CONNECTION_TIMEOUT); // 设置读取超时,默认10000ms config.setReadTimeout(SisConstant.DEFAULT_READ_TIMEOUT); // 设置代理, 一定要确保代理可用才启动此设置。 代理初始化也可用不加密的代理,new ProxyHostInfo(host, port); // ProxyHostInfo proxy = new ProxyHostInfo(host, port, username, password); // config.setProxy(proxy); return config; } /** * 录音文件极速版demo。 */ private void flashLasrDemo() { try { // 1. 初始化FlashLasrClient // 定义authInfo,根据ak,sk,region,projectId AuthInfo authInfo = new AuthInfo(ak, sk, region, projectId); // 设置config,主要与超时有关 SisConfig config = getConfig(); // 根据authInfo和config,构造FlashLasrClient FlashLasrClient flashLasrClient = new FlashLasrClient(authInfo, config); // 2. 配置请求 FlashLasrRequest request = new FlashLasrRequest(); setShortParameter(request); // 3. 发送请求,获取响应。具体结果可通过response.getXX获取。 FlashLasrResponse response = flashLasrClient.getFlashLasrResponse(request); System.out.println(JsonUtils.obj2Str(response, true)); } catch (SisException e) { e.printStackTrace(); System.out.println("error_code:" + e.getErrorCode() + "\nerror_msg:" + e.getErrorMsg()); } } public static void main(String[] args) { FlashLasrDemo demo = new FlashLasrDemo(); demo.flashLasrDemo(); } }
  • 步骤3:调用一句话识别 执行AsrCustomizationDemo.java文件,“main”函数调用一句话识别(注意注释掉录音文件识别),可查看返回结果,显示如下。 { "trace_id": "7f0ba401-d82d-4bfb-8ae7-600bf54ce4f6", "result": { "text": "欢迎来到xx公司。", "score": 0.06588845654993515 } }
  • APM服务中调用链相关的参数说明 apm-traceid: apm服务采集到调用链的唯一标识。 图1 采集调用链的唯一标识 apm-gtraceid: apm服务中未被采样到的调用关系的唯一标识。 apm服务的调用链具有一定采样率,所以用apm-gtrace-id来表示未被采样的调用链的唯一标识。 apm-spanid:在某个调用链的微服务之间调用,表示某一个微服务的id,示例如下。 图2 调用链的微服务之间调用
  • 安全管理视图 控制台的“安全管理”视图以全局视角洞察云上资产安全态势。帮助用户提前规避安全风险。各个模块的简介和功能如表5所示。 表5 模块概述和使用 模块 概述 如何使用 安全评分 显示资产安全状况评分的信息。 单击“立即查看”,可查看资产安全状况详情。 单击“重新体检”,可重新进行资源安全状况体检。 安全监控 实时监控最新威胁告警事件、最新漏洞风险事件和最新基线事件。 点击“查看更多”跳转至“全部结果”,进行结果的查看和处理。 安全趋势 显示近7天安全评分的趋势。 - 常见问题 显示安全类型的常见问题。 单击“查看更多”,查看更多的常见问题。
  • 解决方案 登录Hive客户端所在节点。 执行source 集群客户端安装目录/bigdata_env命令。 可通过klist命令查看本地是否有有效票据,如下信息表明票据在16年12月24日14:11:42生效,将在16年12月25日14:11:40失效。此期间内可以使用该票据,其他时间则该票据无效。 klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: xxx@HADOOP.COM Valid starting Expires Service principal 12/24/16 14:11:42 12/25/16 14:11:40 krbtgt/HADOOP.COM@HADOOP.COM 执行kinit username进行认证,然后再使用客户端。
  • 问题背景与现象 在使用Kafka客户端命令创建Topic时,发现创建Topic Partition的Leader显示为none。 [root@10-10-144-2 client]# kafka-topics.sh --create --replication-factor 1 --partitions 2 --topic test --zookeeper 10.6.92.36:2181/kafka Created topic "test". [root@10-10-144-2 client]# kafka-topics.sh --describe --zookeeper 10.6.92.36:2181/kafka Topic:test PartitionCount:2 ReplicationFactor:2 Configs: Topic: test Partition: 0 Leader: none Replicas: 2,3 Isr: Topic: test Partition: 1 Leader: none Replicas: 3,1 Isr:
  • 问题现象 执行如下命令创建表 create table test_table( col1 string, col2 string ) PARTITIONED BY(p1 string) STORED AS orc tblproperties('orc.compress'='SNAPPY'); 修改表结构,添加分区并插入数据 alter table test_table add partition(p1='a'); insert into test_table partition(p1='a') select col1,col2 from temp_table; 修改表结构,添加列并插入数据 alter table test_table add columns(col3 string); insert into test_table partition(p1='a') select col1,col2,col3 from temp_table; 查询test_table表数据,返回结果中列col3的值全为NULL select * from test_table where p1='a' 新添加表分区,并插入数据 alter table test_table add partition(p1='b'); insert into test_table partition(p1='b') select col1,col2,col3 from temp_table; 查询test_table表数据,返回结果中列col3有不为NULL的值 select * from test_table where p1='b'
  • 问题背景与现象 使用Flink过程中,具有两个相同权限用户testuser和bdpuser。 使用用户testuser创建Flink集群正常,但是切换至bdpuser用户创建Fllink集群时,执行yarn-session.sh命令报错: 2019-01-02 14:28:09,098 | ERROR | [main] | Ensure path threw exception | org.apache.flink.shaded.curator.org.apache.curator.framework.imps.CuratorFrameworkImpl (CuratorFrameworkImpl.java:566) org.apache.flink.shaded.zookeeper.org.apache.zookeeper.KeeperException$NoAuthException: KeeperErrorCode = NoAuth for /flink/application_1545397824912_0022
  • 问题背景与现象 执行distcp跨集群拷贝文件时,出现部分文件拷贝失败“ Source and target differ in block-size. Use -pb to preserve block-sizes during copy. ” Caused by: java.io.IOException: Check-sum mismatch between hdfs://10.180.144.7:25000/kylin/kylin_default_instance_prod/parquet/f2e72874-f01c-45ff-b219-207f3a5b3fcb/c769cd2d-575a-4459-837b-a19dd7b20c27/339114721280/0.parquettar and hdfs://10.180.180.194:25000/kylin/kylin_default_instance_prod/parquet/f2e72874-f01c-45ff-b219-207f3a5b3fcb/.distcp.tmp.attempt_1523424430246_0004_m_000019_2. Source and target differ in block-size. Use -pb to preserve block-sizes during copy. Alternatively, skip checksum-checks altogether, using -skipCrc. (NOTE: By skipping checksums, one runs the risk of masking data-corruption during file-transfer.) at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.compareCheckSums(RetriableFileCopyCommand.java:214)
  • 处理步骤 以客户端安装用户,登录安装Kafka客户端的节点。 切换到Kafka客户端安装目录,例如“/opt/client”。 cd /opt/client 切换到Kafka客户端配置目录。 cd Kafka/kafka/config 编辑tools-log4j.properties文件,将WARN修改为INFO,并保存。 切换到Kafka客户端安装目录,例如“/opt/client”。 cd /opt/client 执行以下命令,配置环境变量。 source bigdata_env 执行以下命令,进行用户认证。(普通集群跳过此步骤) kinit 组件业务用户 执行以下命令,切换到Kafka客户端安装目录。 cd Kafka/kafka/bin 执行以下命令,获取topic信息,在控制台可见日志打印。 kafka-topics.sh --list --zookeeper 10.5.144.2:2181/kafka [2017-02-17 14:34:27,005] INFO JAAS File name: /opt/client/Kafka/./kafka/config/jaas.conf (org.I0Itec.zkclient.ZkClient) [2017-02-17 14:34:27,007] INFO Starting ZkClient event thread. (org.I0Itec.zkclient.ZkEventThread) ... Test __consumer_offsets counter test test2 test3 test4
  • 问题背景与现象 客户端安装成功,执行客户端命令例如yarn-session.sh时报错,提示如下: [root@host01 bin]# yarn-session.sh 2018-10-25 01:22:06,454 | ERROR | [main] | Error while trying to split key and value in configuration file /opt/flinkclient/Flink/flink/conf/flink-conf.yaml:80: "security.kerberos.login.keytab: " | org.apache.flink.configuration.GlobalConfiguration (GlobalConfiguration.java:160) Exception in thread "main" org.apache.flink.configuration.IllegalConfigurationException: Error while parsing YAML configuration file :80: "security.kerberos.login.keytab: "
  • 解决办法 从MRS上下载用户的keytab认证文件,并放置到Flink客户端所在节点的某个目录下。 在“flink-conf.yaml”文件中配置: keytab路径。 security.kerberos.login.keytab: /home/flinkuser/keytab/abc222.keytab “/home/flinkuser/keytab/abc222.keytab”表示的是用户目录,为1中放置目录。 请确保客户端用户具备对应目录权限。 principal名。 security.kerberos.login.principal: abc222 对于HA模式,如果配置了ZooKeeper,还需要设置ZooKeeper Kerberos认证相关的配置。 zookeeper.sasl.disable: false security.kerberos.login.contexts: Client 如果用户对于Kafka Client和Kafka Broker之间也需要做Kerberos认证,配置如下: security.kerberos.login.contexts: Client,KafkaClient
  • 原因分析 在安全集群环境下,Flink需要进行安全认证。当前客户端未进行相关安全认证设置。 Flink整个系统有两种认证方式: 使用kerberos认证:Flink yarn client、Yarn Resource Manager、JobManager、HDFS、TaskManager、Kafka和Zookeeper。 使用YARN内部的认证机制:Yarn Resource Manager与Application Master(简称AM)。 如果用户安装安全集群需要使用kerberos认证和security cookie认证。根据日志提示,发现配置文件中“security.kerberos.login.keytab :”配置项错误,未进行安全配置。
  • 解决办法 登录HDFS的WebUI页面,进入DataNode的JMX页面。 在HDFS原生界面,选择Datanodes页面。 找到对应的DataNode节点,单击Http Address地址进入DataNode详情。 将url的“datanode.html”改为“jmx”就能获取到DataNode的JMX信息。 搜索“XceiverCount”指标,当该指标的值*Block块的大小超过DataNode磁盘的容量,就说明预约写Block的磁盘空间不足。 发生该问题,通常有以下两种方法来解决: 方法一:降低业务的并发度。 方法二:减少业务写文件的数目,将多个文件合并成一个文件来写。
  • 原因分析 HDFS写文件的预约机制:无论文件是10 MB还是1 GB,开始写的每个块都会被预约128 MB。如果需要写入一个10 MB的文件,HDFS会预约一个块来写,当文件写完后,这个块只占实际大小10 MB,释放多余预约的118 MB空间。如果需要写入一个1 GB的文件,HDFS还是会预约一个块来写,这个块写完后再开启下一个块,文件写完后,实际占用1 GB磁盘,释放多余预约的空间。 该异常通常是因为业务写文件的并发量太高,预约写Block的磁盘空间不足,导致写文件失败。
  • 问题背景与现象 用户运行作业时写文件到HDFS,偶现写文件失败的情况。 操作日志如下: 105 | INFO | IPC Server handler 23 on 25000 | IPC Server handler 23 on 25000, call org.apache.hadoop.hdfs.protocol.ClientProtocol.addBlock from 192.168.1.96:47728 Call#1461167 Retry#0 | Server.java:2278 java.io.IOException: File /hive/warehouse/000000_0.835bf64f-4103 could only be replicated to 0 nodes instead of minReplication (=1). There are 3 datanode(s) running and 3 node(s) are excluded in this operation.
  • 原因分析 DataNode日志“/var/log/Bigdata/hdfs/dn/hadoop-omm-datanode-XXX.log”,存在异常提示java.io.IOException: Too many open files。 2016-05-19 17:18:59,126 | WARN | org.apache.hadoop.hdfs.server.datanode.DataXceiverServer@142ff9fa | YSDN12:25009:DataXceiverServer: | org.apache.hadoop.hdfs.server.datanode.DataXceiverServer.run(DataXceiverServer.java:160) java.io.IOException: Too many open files at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:241) at sun.nio.ch.ServerSocketAdaptor.accept(ServerSocketAdaptor.java:100) at org.apache.hadoop.hdfs.net.TcpPeerServer.accept(TcpPeerServer.java:134) at org.apache.hadoop.hdfs.server.datanode.DataXceiverServer.run(DataXceiverServer.java:137) at java.lang.Thread.run(Thread.java:745) 如果某个DataNode日志中打印“Too many open files”,说明该节点文件句柄不足,导致打开文件句柄失败,然后就会重试往其他DataNode节点写数据,最终表现为写文件很慢或者写文件失败。
  • 解决办法 执行ulimit -a命令查看有问题节点文件句柄数最多设置是多少,如果很小,建议修改成640000。 图1 查看文件句柄数 执行vi /etc/security/limits.d/90-nofile.conf命令编辑文件,修改文件句柄数设置。如果没有这个文件,可以新建一个文件,并按照下图内容修改。 图2 修改文件句柄数 重新打开一个终端窗口,用ulimit -a命令查看是否修改成功,如果没有,请重新按照上述步骤重新修改。 从Manager页面重启DataNode实例。
  • 处理步骤 登录Manager,停止HDFS服务。 在停止HDFS时,建议不要停止相关服务。 停止成功后,登录到被修改了RPC端口的Master节点。 如果两个Master节点都被修改了RPC端口,则只需登录其中一个修改即可。 执行su - omm命令切换到omm用户。 如果是安全集群,需要执行kinit hdfs命令进行认证。 执行如下命令,将环境变量脚本加载到环境中。 cd ${BIGDATA_HOME}/MRS_X.X.X/1_8_Zkfc/etc source ${BIGDATA_HOME}/MRS_X.X.X/install/FusionInsight-Hadoop-3.1.1/hadoop/sbin/exportENV_VARS.sh 命令中的“MRS_X.X.X”和“1_8”根据实际版本而定。 加载完成后,执行如下命令,格式化Zkfc。 cd ${HADOOP_HOME}/bin ./hdfs zkfc -formatZK 格式化成功后,在Manager页面“重启”HDFS服务。 如果更改了NameNode的RPC端口,则之前安装的所有客户端都需要刷新配置文件。
  • 调整HDFS SHDFShell客户端日志级别 临时调整,关闭该shell客户端窗口后,日志会还原为默认值。 执行export HADOOP_ROOT_LOGGER命令可以调整客户端日志级别。 执行export HADOOP_ROOT_LOGGER=日志级别,console,可以调整shell客户端的日志级别。 export HADOOP_ROOT_LOGGER=DEBUG,console,调整为DEBUG。 export HADOOP_ROOT_LOGGER=ERROR,console,调整为ERROR。 永久调整 在HDFS客户端环境变量配置文件“/opt/client/HDFS/component_env”(其中“/opt/client”需要改为实际客户端路径)增加“export HADOOP_ROOT_LOGGER=日志级别,console”。 执行source /opt/client/bigdata_env。 重新执行客户端命令。 父主题: 使用HDFS
  • 问题背景与现象 Consumer来消费Kafka中指定Topic的消息时,发现无法从Kafka中获取到数据。 提示如下错误: org.apache.kafka.common.protocol.types.SchemaException: Error reading field 'brokers': Error reading field 'host': Error reading string of length 28271, only 593 bytes available
  • 解决方案 因此遇到此类异常应该检查最近的变更项,以确认是否配置有误。 METASTORE_GC_OPTS=Xms1024M -Xmx2048M -DIgnoreReplayReqDetect -XX\:CMSFullGCsBeforeCompaction\=1 -XX\:+UseConcMarkSweepGC -XX\:+CMSParallelRemarkEnabled -XX\:+UseCMSCompactAtFullCollection -XX\:+ExplicitGCInvokesConcurrent -server -XX\:MetaspaceSize\=128M -XX\:MaxMetaspaceSize\=256M
  • 可能原因 HiveServer或者MetaStore实例在启动的时候发生异常,无法正常启动。如,当修改MetaStore/HiveServer GC参数时,可通过查看对应进程的启动日志,如hiveserver.out(hadoop-omm-jar-192-168-1-18.out)文件排查。 如下异常: Error: Could not find or load main class Xmx2048M 说明java虚拟机启动时,将Xmx2048M作为java进程的启动参数而不是JVM的启动参数了,如下将符号‘-’误删掉。 METASTORE_GC_OPTS=Xms1024M Xmx2048M -DIgnoreReplayReqDetect -XX\:CMSFullGCsBeforeCompaction\=1 -XX\:+UseConcMarkSweepGC -XX\:+CMSParallelRemarkEnabled -XX\:+UseCMSCompactAtFullCollection -XX\:+ExplicitGCInvokesConcurrent -server -XX\:MetaspaceSize\=128M -XX\:MaxMetaspaceSize\=256M
  • 处理步骤 Hive在执行SQL语句前,可以通过set命令来设置Map/Reduce相关客户端参数。 以下为与Map/Reduce内存相关的参数: set mapreduce.map.memory.mb=4096;// 每个Map Task需要的内存量 set mapreduce.map.java.opts=-Xmx3276M; // 每个Map Task 的JVM最大使用内存 set mapreduce.reduce.memory.mb=4096; // 每个Reduce Task需要的内存量 set mapreduce.reduce.java.opts=-Xmx3276M; // 每个Reduce Task 的JVM最大使用内存 set mapred.child.java.opts=-Xms1024M -Xmx3584M;//此参数为全局参数,既对Map和Reduce统一设置 参数设置只对当前session有效。
  • 处理步骤 使用 --jars 加载flume-ng-sdk-{version}.jar依赖包。 同时修改“spark-default.conf”中两个配置项。 spark.driver.extraClassPath=$PWD/*:{加上原来配置的值} spark.executor.extraClassPath =$PWD/* 作业运行成功。如果还有报错,则需要排查还有哪个jar没有加载,再次执行步骤1和步骤2。
  • 原因分析 查看NameNode原生页面发现有大量的块丢失。 图1 块丢失 查看原生页面Datanode Information发现显示的DataNode节点数和实际的相差10个节点。 图2 查看DataNode节点数 查看DateNode运行日志“/var/log/Bigdata/hdfs/dn/hadoop-omm-datanode-主机名.log”,发现如下错误信息。 重要错误信息Clock skew too great 图3 DateNode运行日志错误
  • 问题背景与现象 在使用Kafka客户端命令创建Topic时,发现Topic无法被创建。 kafka-topics.sh --create --replication-factor 1 --partitions 2 --topic test --zookeeper 192.168.234.231:2181 提示错误NoNodeException: KeeperErrorCode = NoNode for /brokers/ids。 具体如下: Error while executing topic command : org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/ids [2017-09-17 16:35:28,520] ERROR org.I0Itec.zkclient.exception.ZkNoNodeException: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/ids at org.I0Itec.zkclient.exception.ZkException.create(ZkException.java:47) at org.I0Itec.zkclient.ZkClient.retryUntilConnected(ZkClient.java:995) at org.I0Itec.zkclient.ZkClient.getChildren(ZkClient.java:675) at org.I0Itec.zkclient.ZkClient.getChildren(ZkClient.java:671) at kafka.utils.ZkUtils.getChildren(ZkUtils.scala:541) at kafka.utils.ZkUtils.getSortedBrokerList(ZkUtils.scala:176) at kafka.admin.AdminUtils$.createTopic(AdminUtils.scala:235) at kafka.admin.TopicCommand$.createTopic(TopicCommand.scala:105) at kafka.admin.TopicCommand$.main(TopicCommand.scala:60) at kafka.admin.TopicCommand.main(TopicCommand.scala) Caused by: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/ids at org.apache.zookeeper.KeeperException.create(KeeperException.java:115) at org.apache.zookeeper.KeeperException.create(KeeperException.java:51) at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:2256) at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:2284) at org.I0Itec.zkclient.ZkConnection.getChildren(ZkConnection.java:114) at org.I0Itec.zkclient.ZkClient$4.call(ZkClient.java:678) at org.I0Itec.zkclient.ZkClient$4.call(ZkClient.java:675) at org.I0Itec.zkclient.ZkClient.retryUntilConnected(ZkClient.java:985) ... 8 more (kafka.admin.TopicCommand$)
共100000条