华为云用户手册

  • 操作步骤 用于CarbonData查询的配置介绍,详情请参见表1和表2。 表1 Shuffle过程中,启动Task的个数 参数 spark.sql.shuffle.partitions 所属配置文件 spark-defaults.conf 适用于 数据查询 场景描述 Spark shuffle时启动的Task个数。 如何调优 一般建议将该参数值设置为执行器核数的1到2倍。例如,在聚合场景中,将task个数从200减少到32,有些查询的性能可提升2倍。 表2 设置用于CarbonData查询的Executor个数、CPU核数以及内存大小 参数 spark.executor.cores spark.executor.instances spark.executor.memory 所属配置文件 spark-defaults.conf 适用于 数据查询 场景描述 设置用于CarbonData查询的Executor个数、CPU核数以及内存大小。 如何调优 在银行方案中,为每个执行器提供4个CPU内核和15GB内存,可以获得良好的性能。这2个值并不意味着越多越好,在资源有限的情况下,需要正确配置。例如,在银行方案中,每个节点有足够的32个CPU核,而只有64GB的内存,这个内存是不够的。例如,当每个执行器有4个内核和12GB内存,有时在查询期间发生垃圾收集(GC),会导致查询时间从3秒增加到超过15秒。在这种情况下需要增加内存或减少CPU内核。 用于CarbonData数据加载的配置参数,详情请参见表3、表4和表5。 表3 设置数据加载使用的CPU core数量 参数 carbon.number.of.cores.while.loading 所属配置文件 carbon.properties 适用于 数据加载 场景描述 数据加载过程中,设置处理数据使用的CPU core数量。 如何调优 如果有更多的CPU个数,那么可以增加CPU值来提高性能。例如,将该参数值从2增加到4,那么 CS V文件读取性能可以增加大约1倍。 表4 是否使用YARN本地目录进行多磁盘数据加载 参数 carbon.use.local.dir 所属配置文件 carbon.properties 适用于 数据加载 场景描述 是否使用YARN本地目录进行多磁盘数据加载。 如何调优 如果将该参数值设置为“true”,CarbonData将使用YARN本地目录进行多表加载磁盘负载平衡,以提高数据加载性能。 表5 加载时是否使用多路径 参数 carbon.use.multiple.temp.dir 所属配置文件 carbon.properties 适用于 数据加载 场景描述 是否使用多个临时目录存储sort临时文件。 如何调优 设置为true,则数据加载时使用多个临时目录存储sort临时文件。此配置能提高数据加载性能并避免磁盘单点故障。 用于CarbonData数据加载和数据查询的配置参数,详情请参见表6。 表6 设置数据加载和查询使用的CPU core数量 参数 carbon.compaction.level.threshold 所属配置文件 carbon.properties 适用于 数据加载和查询 场景描述 对于minor压缩,在阶段1中要合并的segment数量和在阶段2中要合并的已压缩的segment数量。 如何调优 每次CarbonData加载创建一个segment,如果每次加载的数据量较小,将在一段时间内生成许多小文件,影响查询性能。配置该参数将小的segment合并为一个大的segment,然后对数据进行排序,可提高查询性能。 压缩的策略根据实际的数据大小和可用资源决定。如某银行1天加载一次数据,且加载数据选择在晚上无查询时进行,有足够的资源,压缩策略可选择为6、5。 表7 使用索引缓存服务器时是否开启数据预加载 参数 carbon.indexserver.enable.prepriming 所属配置文件 carbon.properties 适用于 数据加载 场景描述 使用索引缓存服务器过程中开启数据预加载可以提升首次查询的性能。 如何调优 用户可以将该参数设置为true来开启预加载。默认情况,该参数为false。
  • 操作步骤 在SFTP服务器的“/opt/houjt/test03”路径中,创建多个以“table1”为前缀,“.txt”为后缀,中间为yyyyMMdd的日期格式的文件。 图1 示例 创建一个从SFTP服务器导入数据到HDFS的Loader作业,具体操作请参见典型场景:从SFTP服务器导入数据到HDFS/OBS。 使用安装客户端的用户登录客户端所在节点。 执行以下命令,进入schedule-tool工具的conf目录。例如,Loader客户端安装目录为“/opt/client/Loader/”。 cd /opt/client/Loader/loader-tools-1.99.3/schedule-tool/conf 执行以下命令,编辑schedule.properties文件,配置登录方式。 vi schedule.properties schedule-tool工具支持两种登录方式,两者只能选一。详细参数请参见schedule-tool工具使用指导。 以密码方式登录,配置信息示例如下: [server.url = 10.10.26.187:21351,127.0.0.2:21351][authentication.type = kerberos][use.keytab = false][authentication.user = admin]# 密码明文存储存在安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全[authentication.password= xxx] 以keytab文件方式登录,配置信息示例如下: [server.url = 10.10.26.187:21351,127.0.0.2:21351][authentication.type = kerberos][use.keytab = true][client.principal = bar][client.keytab = /opt/hadoopclient/Loader/loader-tools-1.99.3/loader-tool/hadoop-config/user.keytab][krb5.conf.file = /opt/hadoopclient/Loader/loader-tools-1.99.3/loader-tool/hadoop-config/krb5.conf] 执行以下命令,编辑job.properties文件,配置作业信息。 vi job.properties #job namejob.jobName = sftp2hdfs-schedule-tool#Whether to update the loader configuration parameters(File filter)£?This parameter is used to match the import file name.Values are true or false.#false means update.the file name which is get by schedule tool will be updated to Loader configuration parameters (File filter).#false means no update.the file name which is get by schedule tool will be updated to Loader configuration parameters (import path).file.filter = false#File name = prefix + date + suffix#Need to import the file name prefixfile.fileName.prefix=table1#Need to import the file name suffixesfile.fileName.posfix=.txt#Date Days.Value is an integer.#According to the date and number of days to get the date of the import file.date.day = 1#Date Format.Import file name contains the date format.Format Type£ºyyyyMMdd,yyyyMMdd HHmmss,yyyy-MM-dd,yyyy-MM-dd HH:mm:ssfile.date.format = yyyyMMdd#Date Format.Scheduling script execution. Enter the date format.parameter.date.format = yyyyMMdd#Whether the import file is a compressed format.Values ??are true or false.#true indicates that the file is a compressed format£?Execution scheduling tool will extract the files.false indicates that the file is an uncompressed.Execution scheduling tool does not unpack.file.format.iscompressed = false#Hadoop storage type.Values are HDFS or HBase.storage.type = HDFS 根据1的所准备的数据,以文件table120160221.txt为例,过滤规则设置如下: 文件名的前缀 file.fileName.prefix=table1 文件名的后缀 file.fileName.posfix=.txt 文件名中包含的日期格式 file.date.format = yyyyMMdd 调用脚本输入的日期参数 parameter.date.format = yyyyMMdd 顺延的天数 date.day = 1 例如,脚本传入的日期参数是20160220,则通过加法计算,得到的结果是20160221。 如果执行的命令是 ./run.sh 20160220 /user/loader/schedule_01时,以上过滤规则会拼凑出一个字符串:"table1"+"20160221"+.txt = table120160221.txt 根据file.filter的值,选择过滤规则。 精确匹配某一个文件,请执行8。 模糊匹配一系列文件,请执行9。 将job.properties文件中“file.filter”的值修改为“false”。 执行以下命令,运行作业,任务结束。 cd /opt/client/Loader/loader-tools-1.99.3/schedule-tool ./run.sh 20160220 /user/loader/schedule_01 其中20160220为输入的日期,/user/loader/schedule_01为输出的路径。 通过以上过滤规则,拼凑得到的字符串“table120160221.txt”,会直接作为文件名,追加到作业配置的输入路径中。所以,作业只会处理唯一匹配到的文件“table120160221.txt”。 将job.properties文件中“file.filter”的值修改为“true”,“file.fileName.prefix”设置为“*”。 执行以下命令,运行作业,任务结束。 cd /opt/client/Loader/loader-tools-1.99.3/schedule-tool ./run.sh 20160220 /user/loader/schedule_01 其中20160220为输入的日期,/user/loader/schedule_01为输出的路径。 通过以上过滤规则,拼凑到的字符串“*20160221.txt”,会作为文件过滤器的模糊匹配模式,在作业配置的输入路径下,所有符合“*20160221.txt”这个模式的文件都将被作业处理。
  • 参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 输出分隔符 配置分隔符。 说明: 该配置仅用于MySQL专用连接器,当数据列内容中包含默认分隔符时,需要设置自定义分隔符,否则会出现数据错乱。 string 否 , 换行分隔符 用户根据数据实际情况,填写字符串作为换行符。支持任何字符串。默认使用操作系统的换行符。 说明: 该配置仅用于MySQL专用连接器,当数据列内容中包含默认分隔符时,需要设置自定义分隔符,否则会出现数据错乱。 string 否 \n 输出字段 配置关系型数据库输出字段的相关信息: 字段名:配置输出字段的字段名。 表列名:配置数据库表的列名。 类型:配置字段类型,需要和数据库的字段类型一致。 长度:配置字段长度,字段值实际长度太长则按配置的长度截取,“类型”为“CHAR”时实际长度不足则空格补齐,“类型”为“VARCHAR”时实际长度不足则不补齐。 map 是 无
  • 操作步骤 根据前提条件,创建一个满足要求的弹性云服务器。 登录集群详情页面,选择“组件管理”。 若集群详情页面没有“组件管理”页签,请先完成 IAM 用户同步(在集群详情页的“概览”页签,单击“IAM用户同步”右侧的“同步”进行IAM用户同步)。 单击“下载客户端”。 在“客户端类型”选择“完整客户端”。 在“下载路径”选择“远端主机”。 将“主机IP”设置为ECS的IP地址,设置“主机端口”为“22”,并将“保存路径”设置为“/tmp”。 如果使用SSH登录ECS的默认端口“22”被修改,请将“主机端口”设置为新端口。 “保存路径”最多可以包含256个字符。 “登录用户”设置为“root”。 如果使用其他用户,请确保该用户对保存目录拥有读取、写入和执行权限。 在“登录方式”选择“密码”或“SSH私钥”。 密码:输入创建集群时设置的root用户密码。 SSH私钥:选择并上传创建集群时使用的密钥文件。 单击“确定”开始生成客户端文件。 若界面显示以下提示信息表示客户端包已经成功保存。 下载客户端文件到远端主机成功。 若界面显示以下提示信息,请检查用户名密码及远端主机的安全组配置,确保用户名密码正确,及远端主机的安全组已增加SSH(22)端口的入方向规则。然后从3执行重新下载客户端。 连接到服务器失败,请检查网络连接或参数设置。 图1 下载客户端 选择“Flume”服务,单击“实例”,查看任意一个Flume实例和两个MonitorServer实例的“业务IP”。 使用VNC方式,登录弹性云服务器。参见远程登录(VNC方式)。 所有镜像均支持Cloud-init特性。Cloud-init预配置的用户名“root”,密码为创建集群时设置的密码。首次登录建议修改。 在弹性云服务器,切换到root用户,并将安装包复制到目录“/opt”。 sudo su - root cp /tmp/ MRS _Flume_Client.tar /opt 在“/opt”目录执行以下命令,解压压缩包获取校验文件与客户端配置包。 tar -xvf MRS_Flume_Client.tar 执行以下命令,校验文件包。 sha256sum -c MRS_Flume_ClientConfig.tar.sha256 界面显示如下信息,表明文件包校验成功: MRS_Flume_ClientConfig.tar: OK 执行以下命令,解压“MRS_Flume_ClientConfig.tar”。 tar -xvf MRS_Flume_ClientConfig.tar 执行以下命令,安装客户端运行环境到新的目录,例如“/opt/Flumeenv”。安装时自动生成目录。 sh /opt/MRS_Flume_ClientConfig/install.sh /opt/Flumeenv 查看安装输出信息,如有以下结果表示客户端运行环境安装成功: Components client installation is complete. 执行以下命令,配置环境变量。 source /opt/Flumeenv/bigdata_env 执行以下命令,解压Flume客户端。 cd /opt/MRS_Flume_ClientConfig/Flume tar -xvf FusionInsight -Flume-1.6.0.tar.gz 执行以下命令,查看当前用户密码是否过期。 chage -l root “Password expires”时间早于当前则表示过期。此时需要修改密码,或执行chage -M -1 root设置密码为未过期状态。 执行以下命令,安装Flume客户端到新目录,例如“/opt/FlumeClient”。安装时自动生成目录。 sh /opt/MRS_Flume_ClientConfig/Flume/install.sh -d /opt/FlumeClient -f MonitorServer实例的业务IP地址 -c Flume配置文件路径 -l /var/log/ -e Flume的业务IP地址 -n Flume客户端名称 各参数说明如下: “-d”:表示Flume客户端安装路径。 “-f”:可选参数,表示两个MonitorServer角色的业务IP地址,中间用英文逗号分隔,若不设置则Flume客户端将不向MonitorServer发送告警信息,同时在MRS Manager界面上看不到该客户端的相关信息。 “-c”:可选参数,表示Flume客户端在安装后默认加载的配置文件“properties.properties”。如不添加参数,默认使用客户端安装目录的“fusioninsight-flume-1.6.0/conf/properties.properties”。客户端中配置文件为空白模板,根据业务需要修改后Flume客户端将自动加载。 “-l”:可选参数,表示日志目录,默认值为“/var/log/Bigdata”。 “-e”:可选参数,表示Flume实例的业务IP地址,主要用于接收客户端上报的监控指标信息。 “-n”:可选参数,表示自定义的Flume客户端的名称。 IBM的JDK不支持“-Xloggc”,需要修改“flume/conf/flume-env.sh”,将“-Xloggc”修改为“-Xverbosegclog”,若JDK为32位,“-Xmx”不能大于3.25GB。 “flume/conf/flume-env.sh”中,“-Xmx”默认为4GB。若客户端机器内存过小,可调整为512M甚至1GB。 例如执行:sh install.sh -d /opt/FlumeClient 系统显示以下结果表示客户端运行环境安装成功: install flume client successfully.
  • 使用自定义列创建表 可通过指定各列及其数据类型来创建表。 命令示例: CREATE TABLE IF NOT EXISTS productdb.productSalesTable ( productNumber Int, productName String, storeCity String, storeProvince String, productCategory String, productBatch String, saleQuantity Int, revenue Int) STORED AS carbondata TBLPROPERTIES ( 'table_blocksize'='128'); 上述命令所创建的表的详细信息如下: 表1 表信息定义 参数 描述 productSalesTable 待创建的表的名称。该表用于加载数据进行分析。 表名由字母、数字、下划线组成。 productdb 数据库名称。该数据库将与其中的表保持逻辑连接以便于识别和管理。 数据库名称由字母、数字、下划线组成。 productName storeCity storeProvince procuctCategory productBatch saleQuantity revenue 表中的列,代表执行分析所需的业务实体。 列名(字段名)由字母、数字、下划线组成。 table_blocksize CarbonData表使用的数据文件的block大小,默认值为1024,最小值为1,最大值为2048,单位为MB。 如果“table_blocksize”值太小,数据加载时,生成过多的小数据文件,可能会影响HDFS的使用性能。 如果“table_blocksize”值太大,数据查询时,索引匹配的block数据量较大,某些block会包含较多的blocklet,导致读取并发度不高,从而降低查询性能。 一般情况下,建议根据数据量级别来选择大小。例如:GB级别用256,TB级别用512,PB级别用1024。 所有Integer类型度量均以BigInt类型进行处理与显示。 CarbonData遵循严格解析,因此任何不可解析的数据都会被保存为null。例如,在BigInt列中加载double值(3.14),将会保存为null。 在Create Table中使用的Short和Long数据类型在DESCRIBE命令中分别显示为Smallint和Bigint。 可以使用DESCRIBE格式化命令查看表数据大小和表索引大小。
  • 操作场景 本章节根据超过50个测试用例总结得出建议,帮助用户创建拥有更高查询性能的CarbonData表。 表1 CarbonData表中的列 Column name Data type Cardinality Attribution msname String 3千万 dimension BEGIN_TIME bigint 1万 dimension host String 1百万 dimension dime_1 String 1千 dimension dime_2 String 500 dimension dime_3 String 800 dimension counter_1 numeric(20,0) NA measure ... ... NA measure counter_100 numeric(20,0) NA measure
  • spark-defaults.conf相关参数 登录客户端节点,在“{客户端安装目录}/Spark/spark/conf/spark-defaults.conf”文件中配置表4相关参数。 表4 spark-defaults.conf中的Spark配置参考 参数 默认值 描述 spark.driver.memory 4G 指定用于driver端进程的内存,其中SparkContext已初始化。 说明: 在客户端模式下,不要使用SparkConf在应用程序中设置该参数,因为驱动程序JVM已经启动。要配置该参数,请在--driver-memory命令行选项或默认属性文件中进行配置。 spark.executor.memory 4GB 指定每个执行程序进程使用的内存。 spark.sql.crossJoin.enabled true 如果查询包含交叉连接,请启用此属性,以便不会发生错误,此时使用交叉连接而不是连接,可实现更好的性能。
  • 概述 loader-tool工具是Loader客户端工具之一,包括“lt-ucc”、“lt-ucj”、“lt-ctl”三个工具。 Loader支持通过参数选项或作业模板这两种方式,对连接器进行创建、更新、查询和删除,以及对Loader作业进行创建、更新、查询、删除、启动和停止等操作。 本章节适用于MRS 3.x及后续版本。 loader-tool工具是异步接口,命令提交后其结果不会实时返回到控制台,因此对连接器的创建、更新、查询和删除等操作,以及对Loader作业的创建、更新、查询、删除、启动和停止等操作,其成功与否需要在Loader WebUI确认或通过查询server端日志确认。 参数选项方式: 通过直接添加具体配置项的参数调用脚本。 作业模板方式: 修改作业模板中所有配置项的参数值,调用脚本时引用修改后的作业模板文件。 Loader客户端安装后,系统自动在“Loader客户端安装目录/loader-tools-1.99.3/loader-tool/job-config/”目录生成各种场景对应的作业模板,不同模板中配置项存在差异。作业模板中包含作业信息以及关联的连接器信息。 作业模板为xml文件,文件名格式为“数据原保存位置-to-数据新保存位置.xml”,例如“sftp-to-hdfs.xml”。如果此场景的作业支持转换步骤,则存在同名的转换步骤配置文件,文件类型为json,例如“sftp-to-hdfs.json”。 作业模板中包含了连接器的配置信息。创建、更新连接器时,实际上仅调用到作业模板中的连接器的信息。
  • 参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 HBase表类型 配置HBase表类型,可选项为normal(普通HBase表)和phoenix表。 enum 是 normal NULL值处理方式 配置NULL值处理方式。选中单选框时是将转换为空字符串并保存。不选中单选框时是不保存数据。 boolean 否 不选中单选框 HBase输出字段 配置HBase输出信息: 字段名:配置输出字段的字段名。 表名:配置HBase表名。 列族名:配置HBase列族名,如果HBase/Phoenix建表时未配置列族名,默认列族名为 '0'。 列名:配置HBase列名。 类型:配置字段类型,字段类型为“DATE”或“TIME”或“TIMESTAMP”时,需指定特定时间格式,其他类型指定无效。时间格式如:“yyyyMMdd HH:mm:ss”。 长度:配置字段长度,字段值实际长度太长则按配置的长度截取,“类型”为“CHAR”时实际长度不足则空格补齐,“类型”为“VARCHAR”时实际长度不足则不补齐。 主键:配置是否为主键列。普通HBase表主键只能指定一个;phoenix表主键可以指定多个,配置多个列为主键时,会按照配置列的先后顺序对其进行拼接。必须配置一个主键列。 map 是 无
  • 参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 配置字段 配置常量字段相关信息: 输出字段名:配置字段名。 类型:配置字段类型。 时间格式:字段类型为“DATE”或“TIME”或“TIMESTAMP”时,需指定特定时间格式,其他类型指定无效。时间格式如:“yyyyMMdd HH:mm:ss”。 长度:配置字段长度,字段值实际长度太长则按配置的长度截取,“类型”为“CHAR”时实际长度不足则空格补齐,“类型”为“VARCHAR”时实际长度不足则不补齐。 常量值:配置符合类型的常量值。 map 是 无
  • 参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 Spark文件存储格式 配置SparkSQL表文件的存储格式(目前支持四种格式:CSV、ORC、RC和PARQUET)。 说明: PARQUET格式是一种列式存储格式,PARQUET要求Loader的输出字段名和SparkSQL表中的字段名保持一致。 Hive 1.2.0版本之后,Hive使用字段名称替代字段序号对ORC文件进行解析,因此,Loader的输出字段名和SparkSQL表中的字段名需要保持一致。 enum 是 CSV Spark文件压缩格式 在下拉菜单中选择SparkSQL表文件的压缩格式,未配置或选择“NONE”表示不压缩数据。 enum 是 NONE Spark ORC文件版本 通过该字段配置ORC文件的版本(当SparkSQL表文件的存储格式是ORC时)。 enum 是 0.12 输出分隔符 配置分隔符。 string 是 无 输出字段 配置输出信息: 位置:配置输出字段的位置。 字段名:配置输出字段的字段名。 类型:配置字段类型,字段类型为“DATE”或“TIME”或“TIMESTAMP”时,需指定特定时间格式,其他类型指定无效。时间格式如:“yyyyMMdd HH:mm:ss”。 十进制格式:配置小数的刻度和精度。 长度:配置字段长度,字段值实际长度太长则按配置的长度截取,“类型”为“CHAR”时实际长度不足则空格补齐,“类型”为“VARCHAR”时实际长度不足则不补齐。 分区键:配置是否为分区列。可以不指定分区列,也可以指定多个分区列。配置多个列为分区列时,会按照配置列的先后顺序对其进行拼接。 map 是 无
  • 参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 换行符 用户根据数据实际情况,填写字符串作为换行符。支持任何字符串。默认使用操作系统的换行符。 string 否 \n 分割长度单位 长度单位,可选择“char”字符或“byte”字节。 enum 是 char 输入字段 配置输入字段相关信息: 固定长度:设置字段长度,第2个字段起点从第1个字段终点开始,以此类推。 字段名:配置输入字段名。 类型:配置字段类型。 数据格式:字段类型为“DATE”或“TIME”或“TIMESTAMP”时,需指定特定时间格式,其他字段类型指定无效。时间格式如:“yyyyMMdd HH:mm:ss”。 长度:配置字段长度,字段值实际长度太长则按配置的长度截取,“类型”为“CHAR”时实际长度不足则空格补齐,“类型”为“VARCHAR”时实际长度不足则不补齐。 map 是 无
  • 参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 转换类型 配置长整型时间转换类型: long to date:长整型数值转换为DATE类型。 long to time:长整型数值转换为TIME类型。 long to timestamp:长整型数值转换为TIMESTAMP类型。 date to long:DATE类型转换为长整型数值。 time to long:TIME类型转换为长整型数值。 timestamp to long:TIMESTAMP类型转换为长整型数值。 enum 是 long to date 输入字段名 配置输入的待转换字段名称,需填写上一个转换步骤生成的字段名。 string 是 无 输出字段名 配置输出字段的字段名。 string 是 无 字段单位 配置长整型数值字段的单位,根据“转换类型”长整型数据可以是输入字段或生成字段,可选值为“second”和“milisecond”。 enum 是 second 输出字段类型 配置输出字段的类型,可选值为“BIGINT”,“DATE”,“TIME”和“TIMESTAMP”。 enum 是 BIGINT 时间格式 配置时间字段格式,时间格式如:“yyyyMMdd HH:mm:ss”。 string 否 无
  • 转换流程 Loader读取源端数据,通过输入算子将数据按规则逐一转换成字段,再通过转换算子,对这些字段做清洗或转换,最后通过输出算子将处理后的字段,输出到目标端。 每个作业,如果进行数据转换操作,有且只能有一个输入算子,有且只能有一个输出算子。 不符合转换规则的数据,将成为脏数据跳过。 从关系型数据库导入数据到HDFS/OBS,可以不用配置数据转换,数据将按“,”分隔保存到HDFS/OBS。 从HDFS/OBS导出数据到关系型数据库,可以不用配置数据转换,数据将按“,”分隔保存到关系型数据库。
  • 算子简介 Loader算子包括以下类型: 输入算子 数据转换的第一步,负责将数据转换成字段,每次转换有且只能有一种输入算子,涉及HBase或Hive导入导出时,必须填写。 转换算子 数据转换的中间转换步骤,属于可选类型,各个转换算子可任意搭配使用。转换算子是针对字段而言,必须先使用输入算子,将数据转换成字段。 输出算子 数据转换的最后一步,每次转换有且只能有一种输出算子,用于输出处理后的字段。涉及HBase或Hive导入导出时,必须填写。 表1 算子分类一览表 类型 描述 输入 CSV文件输入:将文件的每一行按指定分隔符转换成多个输入字段。 固定宽度文件输入:将文件的每一行,按可配置长度的字符或字节,转换成多个输入字段。 表输入:将关系型数据库表的指定列按顺序转换成同等数量的输入字段。 HBase输入:将HBase表的指定列转换成同等数量的输入字段。 HTML输入:将HTML文件中的元素转换成输入字段。 Hive输入:将Hive表的指定列转换成同等数量的输入字段。 转换 长整型时间转换:实现长整型数值与日期类型的互换。 空值转换:将空值替换成指定值。 增加常量字段:生成常量字段。 随机值转换:生成随机数字段。 拼接转换:拼接已有字段,生成新字段。 分隔转换:将已有字段,按指定分隔符,分隔出新字段。 取模转换:对已有字段取模,生成新字段。 剪切字符串:通过指定起始位置,截取已有字符串类型的字段,生成新字段。 EL操作转换:指定算法,对字段值进行运算,目前支持的算法有:md5sum、sha1sum、sha256sum和sha512sum等。 字符串大小写转换:对已有的字符串类型字段,切换大小写,生成新字段。 字符串逆序转换:对已有的字符串类型字段,做逆序变换,生成新字段。 字符串空格清除转换:对已有的字符串类型字段,清除左右空格,生成新字段。 过滤行转换:配置逻辑条件过滤掉含触发条件的行。 更新域:当满足某些条件时,更新字段的值。 输出 Hive输出:将已生成的字段输出到Hive表。 表输出:将已生成的字段输出到关系型数据库表。 文件输出:将已生成的字段通过分隔符连接并输出到文件。 HBase输出:将已生成的字段输出到HBase表。
  • 操作场景 该任务指导用户在使用Oozie客户端提交Hive任务 Hive任务有如下类型: Hive作业 使用JDBC方式连接的Hive作业。 Hive2作业 使用Beeline方式连接的Hive作业。 本文以使用Oozie客户端提交Hive作业为例介绍。 使用Oozie客户端提交Hive2作业与提交Hive作业操作步骤一致,只需将操作步骤中对应路径的“/Hive”改成“/Hive2”即可。 例如,Hive作业运行目录“/opt/client/Oozie/oozie-client-*/examples/apps/hive/”,则Hive2对应的运行目录为“/opt/client/Oozie/oozie-client-*/examples/apps/hive2/”。 建议下载使用最新版本的客户端。
  • 回答 当运行任务时,将MR ApplicationMaster或ResourceManager移动为D状态(不间断睡眠状态)或T状态(停止状态),客户端会等待返回任务运行的状态,由于AM无返回,客户端会一直处于等待状态。 为避免出现上述场景,使用“core-site.xml”中的“ipc.client.rpc.timeout”配置项设置客户端超时时间。 该参数的参数值为毫秒。默认值为0,表示无超时。客户端超时的取值范围可以为0~2147483647毫秒。 如果Hadoop进程已处于D状态,重启该进程所处的节点。 “core-site.xml”配置文件在客户端安装路径的conf目录下,例如“/opt/client/Yarn/config”。
  • 操作步骤 以客户端安装用户,登录安装Oozie客户端的节点。 执行以下命令,获取安装环境信息。其中“/opt/client”为客户端安装路径,该操作的客户端目录只是举例,请根据实际安装目录修改。 source /opt/client/bigdata_env 判断集群认证模式。 安全模式,执行kinit命令进行用户认证。 例如,使用oozieuser用户进行认证。 kinit oozieuser 普通模式,执行4。 执行以下命令,进入样例目录。 cd /opt/client/Oozie/oozie-client-*/examples/apps/hive/ 该目录下需关注文件如表1所示。 表1 文件说明 文件名称 描述 hive-site.xml Hive任务的配置文件。 job.properties 工作流的参数变量定义文件。 script.q Hive任务的SQL脚本。 workflow.xml 工作流的规则定制文件。 执行以下命令,编辑“job.properties”文件。 vi job.properties 修改如下内容: 更改“userName”的参数值为提交任务的人机用户名,例如“userName=oozieuser”。 执行oozie job命令,运行工作流文件。 oozie job -oozie https://oozie角色的主机名:21003/oozie/ -config job.properties -run 命令参数解释如下: -oozie:实际执行任务的Oozie服务器URL。 -config:工作流属性文件。 -run:运行工作流。 执行完工作流文件,显示job id表示提交成功,例如:job: 0000021-140222101051722-oozie-omm-W。登录Oozie管理页面,查看运行情况。 使用oozieuser用户,登录Oozie WebUI页面:https://oozie角色的ip地址:21003/oozie 。 Oozie的WebUI界面中,可在页面表格根据jobid查看已提交的工作流信息。
  • 回答 可能原因一:配置项“delete.topic.enable”未配置为“true”,只有配置为“true”才能执行真正删除。 可能原因二:“auto.create.topics.enable”配置为“true”,其他应用程序有使用该Topic,并且一直在后台运行。 解决方法: 针对原因一:配置页面上将“delete.topic.enable”设置为“true”。 针对原因二:先停掉后台使用该Topic的应用程序,或者“auto.create.topics.enable”配置为“false”(需要重启Kafka服务),然后再做删除操作。
  • 前提条件 Hive和Oozie组件及客户端已经安装,并且正常运行。 已创建或获取访问Oozie服务的人机用户账号及密码。 该用户需要从属于hadoop、supergroup、hive组,同时添加Oozie的角色操作权限。若使用Hive多实例,该用户还需要从属于具体的Hive实例组,如hive3。 用户同时还需要至少有manager_viewer权限的角色。 获取运行状态的Oozie服务器(任意实例)URL,如“https://10.1.130.10:21003/oozie”。 获取运行状态的Oozie服务器主机名,如“10-1-130-10”。 获取Yarn ResourceManager主节点IP,如10.1.130.11。
  • 回答 目前出现上述问题时使用的是默认配置,如表1所示,HDFS客户端到NameNode的RPC连接存在keep alive机制,保持连接不会超时,尽力等待服务器的响应,因此导致已经连接的HDFS客户端的操作会长时间无响应。 对于已经长时间无响应的HDFS客户端,可以进行如下操作: 等待NameNode响应,一旦NameNode所在节点的CPU利用率回落,NameNode可以重新获得CPU资源时,HDFS客户端即可得到响应。 如果无法等待更长时间,需要重启HDFS客户端所在的应用程序进程,使得HDFS客户端重新连接空闲的NameNode。 解决措施: 为了避免该问题出现,可以在“客户端安装路径/HDFS/hadoop/etc/hadoop/core-site.xml”中做如下配置。 表1 参数说明 参数 描述 默认值 ipc.client.ping 当配置为true时,客户端会尽力等待服务端响应,定期发送ping消息,使得连接不会因为tcp timeout而断开。 当配置为false时,客户端会使用配置项“ipc.ping.interval”对应的值,作为timeout时间,在该时间内没有得到响应,即会超时。 在上述问题场景下,建议配置为false。 true ipc.ping.interval 当“ipc.client.ping”配置为true时,表示发送ping消息的周期。 当“ipc.client.ping”设置为false时,表示连接的超时时间。 在上述问题场景下,建议配置一个较大的超时时间,避免服务繁忙时的超时,建议配置为900000,单位为ms。 60000
  • 回答 原因分析 NameNode的主节点重启后,之前在ZooKeeper上建立的临时节点(/hadoop-ha/hacluster/ActiveStandbyElectorLock)就会被清理。同时,NameNode备节点发现该信息后进行抢占希望升主,所以它重新在ZooKeeper上建立了active的节点/hadoop-ha/hacluster/ActiveStandbyElectorLock。但是NameNode备节点通过客户端(ZKFC)与ZooKeeper建立连接时,由于网络问题、CPU使用率高、集群压力大等原因,出现了客户端(ZKFC)的session(0x144cb2b3e4b36ae4)与ZooKeeper服务端的session(0x164cb2b3e4b36ae4)不一致的问题,导致NameNode备节点的watcher没有感知到自己已经成功建立临时节点,依然认为自己还是备。 而NameNode主节点启动后,发现/hadoop-ha/hacluster目录下已经有active的节点,所以也无法升主,导致两个节点都为备。 解决方法 建议通过在FusionInsight Manager界面上重启HDFS的两个ZKFC加以解决。
  • 回答 “dfs.datanode.data.dir”配置项用于指定数据块在DataNode上的存储目录,在系统安装时需要指定根目录,并且可以指定多个根目录。 请谨慎修改该配置项,可以添加新的数据根目录。 禁止删除原有存储目录,否则会造成数据块丢失,导致文件无法正常读写。 禁止手动删除或修改存储目录下的数据块,否则可能会造成数据块丢失。 NameNode和JournalNode存在类似的配置项,也同样禁止删除原有存储目录,禁止手动删除或修改存储目录下的数据块。 dfs.namenode.edits.dir dfs.namenode.name.dir dfs.journalnode.edits.dir
  • 问题 MRS 3.x及之后版本,使用hbck工具检查Region状态,若日志中存在“ERROR: (regions region1 and region2) There is an overlap in the region chain.”或者“ERROR: (region region1) Multiple regions have the same startkey: xxx”信息,表示某些region存在overlap的问题,需要如何解决?
  • 回答 由于在删除了大量文件之后,DataNode需要时间去删除对应的Block。当立刻重启NameNode时,NameNode会去检查所有DataNode上报的Block信息,发现已删除的Block时,会输出对应的INFO日志信息,如下所示: 2015-06-10 19:25:50,215 | INFO | IPC Server handler 36 on 25000 | BLOCK* processReport: blk_1075861877_2121067 on node 10.91.8.218:9866 size 10249 does not belong to any file | org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.processReport(BlockManager.java:1854) 每一个被删除的Block会产生一条日志信息,一个文件可能会存在一个或多个Block。当删除的文件数过多时,NameNode会花大量的时间打印日志,然后导致NameNode启动慢。 当出现这种现象时,您可以通过如下方式提升NameNode的启动速度。 删除大量文件时,不要立刻重启NameNode,待DataNode删除了对应的Block后重启NameNode,即不会存在这种情况。 您可以通过hdfs dfsadmin -report命令来查看磁盘空间,检查文件是否删除完毕。 如已大量出现以上日志,您可以将NameNode的日志级别修改为ERROR,NameNode不会再打印此日志信息。 等待NameNode启动完毕后,再将此日志级别修改为INFO。修改日志级别后无需重启服务。
  • 配置场景 文件压缩可以减少储存文件的空间,并且提高数据从磁盘读取和网络传输的速度。HDFS有Gzip和Snappy这两种默认压缩格式。本章节为HDFS新增加的压缩格式LZC(Lempel-Ziv Compression)提供配置方法。这种压缩格式增强了Hadoop压缩能力。有关Snappy的详细信息,请参阅http://code.google.com/p/snappy/。 本章节适用于MRS 3.x及后续版本。
  • 配置步骤 MRS引入配置参数“dfs.pipeline.ecn”。当该配置启用时,DataNode会在写入通道超出负荷时从其中发出信号。客户端可以基于该阻塞信号进行退避,从而防止系统超出负荷。引入该配置参数的目的是为了使通道更加稳定,并减少不必要的取消或恢复操作。收到信号后,客户端会退避一定的时间(5000ms),然后根据相关过滤器调整退避时间(单次退避最长时间为50000ms)。 请参考修改集群服务配置参数,进入HDFS的“全部配置”页面,在搜索框中输入参数名称。 表1 NameNode ECN配置 参数 描述 缺省值 dfs.pipeline.ecn 进行该配置后,DataNode能够向客户端发送阻塞通知。 false
  • 问题 当集群重启后会进行split WAL操作,在splitWAL期间,HMaster出现不能close log,日志中频繁打印出FileNotFoundException及no lease信息。 2017-06-10 09:50:27,586 | ERROR | split-log-closeStream-2 | Couldn't close log at hdfs://hacluster/hbase/data/default/largeT1/2b48346d087275fe751fc049334fda93/recovered.edits/0000000000000000000.temp | org.apache.hadoop.hbase.wal.WALSplitter$LogRecoveredEditsOutputSink$2.call(WALSplitter.java:1330)java.io.FileNotFoundException: No lease on /hbase/data/default/largeT1/2b48346d087275fe751fc049334fda93/recovered.edits/0000000000000000000.temp (inode 1092653): File does not exist. [Lease. Holder: DFSClient_NONMAPREDUCE_1202985678_1, pendingcreates: 1936]?at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkLease(FSNamesystem.java:3432)?at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.analyzeFileState(FSNamesystem.java:3223)?at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getNewBlockTargets(FSNamesystem.java:3057)?at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:3011)?at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:842)?at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:526)?at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)?at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616)?at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:973)?at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2260)?at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2256)?at java.security.AccessController.doPrivileged(Native Method)?at javax.security.auth.Subject.doAs(Subject.java:422)?at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1769)?at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2254)?at sun.reflect.GeneratedConstructorAccessor40.newInstance(Unknown Source)?at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)?at java.lang.reflect.Constructor.newInstance(Constructor.java:423)?at org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:106)?at org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:73)?at org.apache.hadoop.hdfs.DataStreamer.locateFollowingBlock(DataStreamer.java:1842)?at org.apache.hadoop.hdfs.DataStreamer.nextBlockOutputStream(DataStreamer.java:1639)?at org.apache.hadoop.hdfs.DataStreamer.run(DataStreamer.java:665)
  • 回答 建议在使用Hudi时,schema应该以向后兼容的方式演进。此错误通常发生在使用向后不兼容的演进方式删除某些列如“col1”后,更新parquet文件中以旧的schema写入的列“col1”,在这种情况下,parquet尝试在传入记录中查找所有当前字段,当发现“col1”不存在时,发生上述异常。 解决这个问题的办法是使用所有schema演进版本来创建uber schema,并使用该schema作为target schema。用户可以从hive metastore中获取schema并将其与当前schema合并。
  • 回答 ZooKeeper IO瓶颈观测手段: 通过Manager的监控页面查看单个节点上ZooKeeper请求监控,判断是否严重超出规格限制。 通过观测ZooKeeper的日志以及HBase的日志,查看是否有大量的IO Exception Timeout或者SocketTimeout Exception异常。 调优建议: 将ZooKeeper实例个数调整为5个及以上,可以通过设置peerType=observer来增加observer的数目。 通过控制单个任务并发的map数或减少每个节点下运行task的内存,降低节点负载。 升级ZooKeeper数据磁盘,如SSD等。
共99315条