华为云用户手册

  • 回答 建议在使用Hudi时,schema应该以向后兼容的方式演进。此错误通常发生在使用向后不兼容的演进方式删除某些列如“col1”后,更新parquet文件中以旧的schema写入的列“col1”,在这种情况下,parquet尝试在传入记录中查找所有当前字段,当发现“col1”不存在时,发生上述异常。 解决这个问题的办法是使用所有schema演进版本来创建uber schema,并使用该schema作为target schema。用户可以从hive metastore中获取schema并将其与当前schema合并。
  • Hive支持ZSTD压缩格式 ZSTD(全称为Zstandard)是一种开源的无损数据压缩算法,其压缩性能和压缩比均优于当前Hadoop支持的其他压缩格式,本特性使得Hive支持ZSTD压缩格式的表。Hive支持基于ZSTD压缩的存储格式有常见的ORC、RCFile、TextFile、JsonFile、Parquet、Squence和 CS V。 可在Hive客户端创建ZSTD压缩格式的表,命令如下: ORC存储格式建表时可指定TBLPROPERTIES("orc.compress"="zstd"): create table tab_1(...) stored as orc TBLPROPERTIES("orc.compress"="zstd"); Parquet存储格式建表可指定TBLPROPERTIES("parquet.compression"="zstd"): create table tab_2(...) stored as parquet TBLPROPERTIES("parquet.compression"="zstd"); 其他格式或通用格式建表可执行设置参数指定compress.codec为“org.apache.hadoop.io.compress.ZStandardCode”: set hive.exec.compress.output=true; set mapreduce.map.output.compress=true; set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.ZStandardCodec; set mapreduce.output.fileoutputformat.compress=true; set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.ZStandardCodec; set hive.exec.compress.intermediate=true; create table tab_3(...) stored as textfile; ZSTD压缩格式的表和其他普通压缩表的SQL操作没有区别,可支持正常的增删查及聚合类SQL操作。 父主题: Hive数据存储及加密配置
  • 配置场景 当Spark2x Web UI中有一些不允许其他用户看到的数据时,用户可能想对UI进行安全防护。用户一旦登录,Spark2x 可以比较与这个用户相对应的视图ACLs来确认是否授权用户访问 UI。 Spark2x存在两种类型的Web UI,一种为运行中任务的Web UI,可以通过Yarn原生页面的应用链接或者REST接口访问。一种为已结束任务的Web UI,可以通过Spark2x JobHistory服务或者REST接口访问。 本章节仅支持安全模式(开启了Kerberos认证)集群。 运行中任务Web UI ACL配置。 运行中的任务,可通过服务端对如下参数进行配置。 “spark.admin.acls”:指定Web UI的管理员列表。 “spark.admin.acls.groups”:指定管理员组列表。 “spark.ui.view.acls”:指定yarn界面的访问者列表。 “spark.modify.acls.groups”:指定yarn界面的访问者组列表。 “spark.modify.acls”:指定Web UI的修改者列表。 “spark.ui.view.acls.groups”:指定Web UI的修改者组列表。 运行结束后Web UI ACL配置。 运行结束的任务通过客户端的参数“spark.history.ui.acls.enable”控制是否开启ACL访问权限。 如果开启了ACL控制,由客户端的“spark.admin.acls”和“spark.admin.acls.groups”配置指定Web UI的管理员列表和管理员组列表,由客户端的“spark.ui.view.acls”和“spark.modify.acls.groups”配置指定查看Web UI任务明细的访问者列表和组列表,由客户端的“spark.modify.acls”和“spark.ui.view.acls.groups”配置指定修改Web UI任务明细的访问者列表和组列表。
  • 设置HBase和HDFS的句柄数限制 联系集群管理员增加各用户的句柄数。该配置为操作系统的配置,并非HBase或者HDFS的配置。建议集群管理员根据HBase和HDFS的业务量及各操作系统用户的权限进行句柄数设置。如果某一个用户需对业务量很大的HDFS进行很频繁且很多的操作,则为此用户设置较大的句柄数,避免出现以上错误。 使用root用户登录集群所有节点机器或者客户端机器的操作系统,并进入“/etc/security”目录。 执行如下命令编辑“limits.conf”文件。 vi limits.conf 新增如下内容: hdfs - nofile 32768 hbase - nofile 32768 其中“hdfs”和“hbase”表示业务中用到的操作系统用户名称。 只有root用户有权限编辑“limits.conf”文件。 如果修改的配置不生效,请确认“/etc/security/limits.d”目录下是否有针对操作系统用户的其他nofile值。这样的值可能会覆盖“/etc/security/limits.conf”中配置的值。 如果用户需要对HBase进行操作,建议将该用户的句柄数设置为“10000”以上。如果用户需要对HDFS进行操作,建议根据业务量大小设置对应的句柄数,建议不要给太小的值。如果用户需要对HBase和HDFS操作,建议设置较大的值,例如“32768”。 使用如下命令查看某一用户的句柄数限制。 su - user_name ulimit -n 界面会返回此用户的句柄数限制值。如下所示: 8194
  • 参数描述 表1 参数描述 参数 描述 table_name 需要清理无效数据文件的Hudi表的表名,必选。 op_type 命令运行模式,可选,默认值为dry_run,取值:dry_run、repair、undo、query。 dry_run:显示需要清理的无效数据文件。 repair:显示并清理无效的数据文件。 undo:恢复已清理的数据文件。 query:显示已执行清零操作的备份目录。 backup_path 运行模式为undo时有效,需要恢复数据文件的备份目录,必选。 start_time 运行模式为dry_run、repair时有效,产生无效数据文件的开始时间,可选,默认不限制开始时间。 end_time 运行模式为dry_run、repair时有效,产生无效数据文件的结束时间,可选,默认不限制结束时间。
  • 操作步骤 使用Ranger管理员用户rangeradmin登录Ranger管理页面,具体操作可参考登录Ranger WebUI界面。 在首页中单击“HBASE”区域的组件插件名称如“HBase”。 单击“Add New Policy”,添加HBase权限控制策略。 根据业务需求配置相关参数。 表1 HBase权限参数 参数名称 描述 Policy Name 策略名称,可自定义,不能与本服务内其他策略名称重复。 Policy Conditions IP过滤策略,可自定义,配置当前策略适用的主机节点,可填写一个或多个IP或IP段,并且IP填写支持“*”通配符,例如:192.168.1.10,192.168.1.20或者192.168.1.*。 Policy Label 为当前策略指定一个标签,可以根据这些标签搜索报告和筛选策略。 HBase Table 将适用该策略的表。 可支持通配符“*”,例如“table1:*”表示table1下的所有表。 “Include”策略适用于当前输入的对象,“Exclude”表示策略适用于除去当前输入内容之外的其他对象。 说明: Ranger界面上HBase服务插件的“hbase.rpc.protection”参数值必须和HBase服务端的“hbase.rpc.protection”参数值保持一致。具体请参考配置HBase权限策略时无法使用通配符搜索已存在的HBase表。 HBase Column-family 将适用该策略的列族。 “Include”策略适用于当前输入的对象,“Exclude”表示策略适用于除去当前输入内容之外的其他对象。 HBase Column 将适用该策略的列。 “Include”策略适用于当前输入的对象,“Exclude”表示策略适用于除去当前输入内容之外的其他对象。 Description 策略描述信息。 Audit Logging 是否审计此策略。 Allow Conditions 策略允许条件,配置本策略内允许的权限及例外。 在“Select Role”、“Select Group”、“Select User”列选择已创建好的需要授予权限的Role、用户组或用户,单击“Add Conditions”,添加策略适用的IP地址范围,单击“Add Permissions”,添加对应权限。 Read:读权限 Write:写权限 Create:创建权限 Admin:管理权限 Select/Deselect All:全选/取消全选 如需让当前条件中的用户或用户组管理本条策略,可勾选“Delegate Admin”使这些用户或用户组成为受委托的管理员。被委托的管理员可以更新、删除本策略,还可以基于原始策略创建子策略。 如需添加多条权限控制规则,可单击按钮添加。如需删除权限控制规则,可单击按钮删除。 Exclude from Allow Conditions:配置策略例外条件。 Deny All Other Accesses 是否拒绝其他所有访问。 True:拒绝其他所有访问 False:设置为False,可配置Deny Conditions。 Deny Conditions 策略拒绝条件,配置本策略内拒绝的权限及例外,配置方法与“Allow Conditions”类似。 拒绝条件的优先级高于“Allow Conditions”中配置的允许条件。 Exclude from Deny Conditions:配置排除在拒绝条件之外的例外规则。 表2 设置权限 任务场景 角色授权操作 设置HBase管理员权限 在首页中单击“HBase”区域的组件插件名称,例如“HBase”。 选择“Policy Name”为“all - table, column-family, column”的策略,单击按钮编辑策略。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 设置用户创建表的权限 在“HBase Table”配置表名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Create”。 该用户具有以下操作权限: create table drop table truncate table alter table enable table flush table flush region compact disable enable desc 设置用户写入数据的权限 在“HBase Table”配置表名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Write”。 该用户具有put,delete,append,incr等操作权限。 设置用户读取数据的权限 在“HBase Table”配置表名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Read”。 该用户具有get,scan操作权限。 设置用户管理命名空间或表的权限 在“HBase Table”配置表名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Admin”。 该用户具有rsgroup,peer,assign,balance等操作权限。 设置列的读取或写入权限 在“HBase Table”配置表名。 在“HBase Column-family”配置列族名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Read”或者“Write”。 如果用户在hbase shell中执行desc操作,需要同时给该用户赋予hbase:quota表的读权限。 (可选)添加策略有效期。在页面右上角单击“Add Validity period”,设置“Start Time”和“End Time”,选择“Time Zone”。单击“Save”保存。如需添加多条策略有效期,可单击按钮添加。如需删除策略有效期,可单击按钮删除。 单击“Add”,在策略列表可查看策略的基本信息。等待策略生效后,验证相关权限是否正常。 如需禁用某条策略,可单击按钮编辑策略,设置策略开关为“Disabled”。 如果不再使用策略,可单击按钮删除策略。
  • Qualifying Column Names 当JOIN的两个relation有相同的列名时,列引用必须使用relation别名(如果relation有别名)或relation名称进行限定: SELECT nation.name, region.name FROM nation CROSS JOIN region; SELECT n.name, r.name FROM nation AS n CROSS JOIN region AS r; SELECT n.name, r.name FROM nation n CROSS JOIN region r;
  • SEMI JOIN、ANTI JOIN 当一张表在另一张表找到匹配的记录之后,半连接(semi-join)返回第一张表中的记录。与条件连接相反,即使在右节点中找到几条匹配的记录,左节点的表也只会返回一条记录。另外,右节点的表一条记录也不会返回。半连接通常使用IN或EXISTS作为连接条件。 而anti-join则与semi-join相反,即当在第二张表没有发现匹配记录时,才会返回第一张表里的记录;当使用not exists/not in的时候会用到。 其他支持的条件包括如下内容: where子句中的多个条件 别名关系 下标表达式 解引用表达式 强制转换表达式 特定函数调用 目前,只在如下情况下支持多个semi/anti join表达式:第一个表中的列在其直接后续的join表达式中被查询,且不与其他join表达式有关系。 示例如下:
  • 使用coalesce调整分片的数量 coalesce可以调整分片的数量。coalesce函数有两个参数: coalesce(numPartitions: Int, shuffle: Boolean = false) 当shuffle为true的时候,函数作用与repartition(numPartitions: Int)相同,会将数据通过Shuffle的方式重新分区;当shuffle为false的时候,则只是简单的将父RDD的多个partition合并到同一个task进行计算,shuffle为false时,如果numPartitions大于父RDD的切片数,那么分区不会重新调整。 遇到下列场景,可选择使用coalesce算子: 当之前的操作有很多filter时,使用coalesce减少空运行的任务数量。此时使用coalesce(numPartitions, false),numPartitions小于父RDD切片数。 当输入切片个数太大,导致程序无法正常运行时使用。 当任务数过大时候Shuffle压力太大导致程序挂住不动,或者出现linux资源受限的问题。此时需要对数据重新进行分区,使用coalesce(numPartitions, true)。
  • 操作步骤 推荐:使用“SNAPPY”压缩,适用于压缩比和读取效率要求均衡场景。 Create table xx (col_name data_type) stored as orc tblproperties ("orc.compress"="SNAPPY"); 可用:使用“ZLIB”压缩,适用于压缩比要求较高场景。 Create table xx (col_name data_type) stored as orc tblproperties ("orc.compress"="ZLIB"); xx为具体使用的Hive表名。
  • 参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 Hive文件存储格式 配置Hive表文件的存储格式(目前支持四种格式:CSV、ORC、RC和PARQUET)。 说明: PARQUET格式是一种列式存储格式,PARQUET要求Loader的输出字段名和Hive表中的字段名保持一致。 Hive 1.2.0版本之后,Hive使用字段名称替代字段序号对ORC文件进行解析,因此,Loader的输出字段名和Hive表中的字段名需要保持一致。 enum 是 CSV Hive文件压缩格式 在下拉菜单中选择Hive表文件的压缩格式,未配置或选择“NONE”表示不压缩数据。 enum 是 NONE Hive ORC文件版本 通过该字段配置ORC文件的版本(当Hive表文件的存储格式是ORC时)。 enum 是 0.12 输出分隔符 配置分隔符。 string 是 无 输出字段 配置输出信息: 位置:配置输出字段的位置。 字段名:配置输出字段的字段名。 类型:配置字段类型,字段类型为“DATE”或“TIME”或“TIMESTAMP”时,需指定特定时间格式,其他类型指定无效。时间格式如:“yyyyMMdd HH:mm:ss”。 十进制格式:配置小数的刻度和精度。 长度:配置字段长度,字段值实际长度太长则按配置的长度截取,“类型”为“CHAR”时实际长度不足则空格补齐,“类型”为“VARCHAR”时实际长度不足则不补齐。 分区键:配置是否为分区列。可以不指定分区列,也可以指定多个分区列。配置多个列为分区列时,会按照配置列的先后顺序对其进行拼接。 map 是 无
  • SDK 服务通过MySQL协议与Doris建立连接,部分语言的SDK已经提供了高可用能力,例如MySQL JDBC可以使用自动重试机制,建立连接时通过如下配置设置数据源: jdbc:mysql:loadbalance://[host1][:port],[host2][:port][,[host3][:port]]...[/[database]][?propertyName1=propertyValue1[&propertyName2=propertyValue2]...] 详细内容可参考https://dev.mysql.com/doc/connector-j/en/connector-j-usagenotes-j2ee-concepts-managing-load-balanced-connections.html。
  • 通过ECS访问 FusionInsight Manager 登录 MRS 管理控制台。 在“现有集群”列表中,单击指定的集群名称。 记录集群的“可用区”、“虚拟私有云”、“集群管理页面”、“安全组”。 在管理控制台首页服务列表中选择“弹性云服务器”,进入ECS管理控制台,创建一个新的弹性云服务器。 弹性云服务器的“可用区”、“虚拟私有云”、“安全组”,需要和待访问集群的配置相同。 选择一个Windows系统的公共镜像。例如,选择一个标准镜像“Windows Server 2012 R2 Standard 64bit(40GB)”。 其他配置参数详细信息,请参见购买弹性云服务器。 如果ECS的安全组和Master节点的“默认安全组”不同,用户可以选择以下任一种方法修改配置: 将ECS的安全组修改为Master节点的默认安全组,请参见更改安全组。 在集群Master节点和Core节点的安全组添加两条安全组规则使ECS可以访问集群,“协议”需选择为“TCP”,“端口”需分别选择“28443”和“20009”。请参见创建安全组。 在EIP管理控制台,申请一个弹性IP地址,并与ECS绑定。 登录弹性云服务器。 登录ECS需要Windows系统的账号、密码,弹性IP地址以及配置安全组规则。具体请参见Windows云服务器登录方式。 在Windows的远程桌面中,打开浏览器访问Manager。 Manager访问地址为“集群管理页面”地址。访问时需要输入集群的用户名和密码,例如“admin”用户。 如果使用其他集群用户访问Manager,第一次访问时需要修改密码。新密码需要满足集群当前的用户密码复杂度策略。请咨询管理员。 默认情况下,在登录时输入5次错误密码将锁定用户,需等待5分钟自动解锁。 注销用户退出Manager时移动鼠标到右上角 ,然后单击“注销”。
  • 回答 查询S3中的数据: select * from s3(path [,access_key_id, secret_access_key] [,format] [,structure]) path:带有文件路径的Bucket URL地址。 format:文件的格式。 access_key_id, secret_access_key:账号的长期凭证,可以使用凭证来对请求进行认证,参数是可选的。如果没有指定凭据,将从配置文件中读取凭据。 structure:表结构。 ClickHouse从S3中获取数据创建表: CREATE TABLE test1_s3 (name String, value UInt32) ENGINE = S3(path, [access_key_id, secret_access_key,] format) 查看创建好的表: select * from test1_s3
  • 操作场景 用户可以通过KafkaUI查看Topic详情、修改Topic Configs、增加Topic分区个数、删除Topic,并可实时查看不同时段的生产数据条数。 安全模式下,KafkaUI对查看Topic详情操作不作鉴权处理,即任何用户都可以查询Topic信息;对于修改Topic Configs、增加Topic分区个数、删除Topic场景,需保证KafkaUI登录用户属于“kafkaadmin”用户组或者单独给用户授予对应操作权限,否则将会鉴权失败。 非安全模式下,KafkaUI对所有操作不作鉴权处理。
  • IoTDB支持的数据类型和编码 IoTDB支持如下几种数据类型和编码方式,参见表1。 表1 IoTDB支持的数据类型和编码 类型 说明 支持的编码 BOOLEAN 布尔值 PLAIN、RLE INT32 整型 PLAIN、RLE、TS_2DIFF、GORILLA、FREQ、ZIGZAG INT64 长整型 PLAIN、RLE、TS_2DIFF、GORILLA、FREQ、ZIGZAG FLOAT 单精度浮点数 PLAIN、RLE、TS_2DIFF、GORILLA、FREQ DOUBLE 双精度浮点数 PLAIN、RLE、TS_2DIFF、GORILLA、FREQ TEXT 字符串 PLAIN、DICTIONARY 父主题: 使用IoTDB
  • 基础操作 使用root用户登录集群客户端节点,执行如下命令: cd {客户端安装目录} source bigdata_env source Hudi/component_env kinit 创建的用户 执行hudi-cli.sh进入Hudi客户端, cd {客户端安装目录}/Hudi/hudi/bin/ ./hudi-cli.sh 即可执行各种Hudi命令,执行示例(仅部分命令,全部命令请参考Hudi官网:https://hudi.apache.org/docs/quick-start-guide/): 查看帮助: help //查看hudi-cli的所有命令 help 'command' //查看某一个命令的帮助及参数列表。 连接表: connect --path '/tmp/huditest/test_table' 查看表信息: desc 查看compaction计划: compactions show all 查看clean计划: cleans show 执行clean: cleans run 查看commit信息: commits show 查看commit写入的分区: commit showpartitions --commit 20210127153356 20210127153356表示commit的时间戳,下同。 查看指定commit写入的文件: commit showfiles --commit 20210127153356 比较两个表的commit信息差异: commits compare --path /tmp/hudimor/mytest100 rollback指定提交(rollback每次只允许rollback最后一次commit): commit rollback --commit 20210127164905 compaction调度: compaction schedule --hoodieConfigs 'hoodie.compaction.strategy=org.apache.hudi.table.action.compact.strategy.BoundedIOCompactionStrategy,hoodie.compaction.target.io=1,hoodie.compact.inline.max.delta.commits=1' 执行compaction compaction run --parallelism 100 --sparkMemory 1g --retry 1 --compactionInstant 20210602101315 --hoodieConfigs 'hoodie.compaction.strategy=org.apache.hudi.table.action.compact.strategy.BoundedIOCompactionStrategy,hoodie.compaction.target.io=1,hoodie.compact.inline.max.delta.commits=1' --propsFilePath hdfs://hacluster/tmp/default/tb_test_mor/.hoodie/hoodie.properties --schemaFilePath /tmp/default/tb_test_mor/.hoodie/compact_tb_base.json 创建savepoint savepoint create --commit 20210318155750 回滚指定的savepoint savepoint rollback --savepoint 20210318155750 如果commit写入导致元数据冲突异常,执行commit rollback、savepoint rollback能回退数据,但不能回退Hive元数据,只能删除Hive表然后手动进行同步刷新。 commit rollback只能回退当前最新的一个commit,savepoint rollback只能回退到最新的一个savepoint。二者均不能随意指定进行回退。
  • MySQL与HetuEngine数据类型映射 MySQL数据类型到HetuEngine数据类型映射 MySQL类型 HetuEngine类型 BIT BOOLEAN BOOLEAN TINYINT TINYINT TINYINT SMALLINT SMALLINT INTEGER INTEGER BIGINT BIGINT DOUBLE PRECISION DOUBLE FLOAT REAL REAL(m, d) REAL(m, d) DECIMAL(p, s) DECIMAL(p, s) CHAR(n) CHAR(n) VARCHAR(n) VARCHAR(n) TINYTEXT VARCHAR(255) TEXT VARCHAR(65535) MEDIUMTEXT VARCHAR(16777215) LONGTEXT VARCHAR ENUM(n) VARCHAR(n) BINARY, VARBINARY, TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB VARBINARY JSON JSON DATE DATE TIME(n) TIME(n) DATETIME(n) TIMESTAMP(n) TIMESTAMP(n) TIMESTAMP(n)
  • 添加MySQL数据源前提条件 数据源与HetuEngine集群节点网络互通。 集群已启用Kerberos认证(安全模式)创建HetuEngine管理员用户,集群未启用Kerberos认证(普通模式)创建HetuEngine业务用户,并为其赋予HDFS管理员权限,即创建用户时需同时加入“hadoop”和“hadoopmanager”用户组,创建用户可参考创建HetuEngine权限角色。 已创建HetuEngine计算实例,可参考创建HetuEngine计算实例。 已获取MySQL数据库所在的IP地址,端口号,用户名及密码。
  • Flume模块介绍 Flume客户端/服务端由一个或多个Agent组成,而每个Agent是由Source、Channel、Sink三个模块组成,数据先进入Source然后传递到Channel,最后由Sink发送到下一个Agent或目的地(客户端外部)。各模块说明见表1。 表1 模块说明 名称 说明 Source Source负责接收数据或产生数据,并将数据批量放到一个或多个Channel。Source有两种类型:数据驱动和轮询。 典型的Source样例如下: 和系统集成并接收数据的Sources:Syslog、Netcat。 自动生成事件数据的Sources:Exec、SEQ。 用于Agent和Agent之间通信的IPC Sources:Avro。 Source必须至少和一个Channel关联。 Channel Channel位于Source和Sink之间,用于缓存Source传递的数据,当Sink成功将数据发送到下一跳的Channel或最终数据处理端,缓存数据将自动从Channel移除。 不同类型的Channel提供的持久化水平也是不一样的: Memory Channel:非持久化 File Channel:基于预写式日志(Write-Ahead Logging,简称WAL)的持久化实现 JDBC Channel:基于嵌入Database的持久化实现 Channel支持事务特性,可保证简易的顺序操作,同时可以配合任意数量的Source和Sink共同工作。 Sink Sink负责将数据传输到下一跳或最终目的,成功完成后将数据从Channel移除。 典型的Sink样例如下: 存储数据到最终目的终端Sink,比如:HDFS、Kafka 自动消耗的Sinks,比如:Null Sink 用于Agent和Agent之间通信的IPC sink:Avro Sink必须关联到一个Channel。 每个Flume的Agent可以配置多个Source、Channel、Sink模块,即一个Source将数据发送给多个Channel,再由多个Sink发送到下一个Agent或目的地。 Flume支持多个Flume配置级联,即上一个Agent的Sink将数据再发送给另一个Agent的Source。
  • 补充说明 Flume可靠性保障措施。 Source与Channel、Channel与Sink之间支持事务机制。 Sink Processor支持配置failover、load_balance机制。 例如load_balance示例如下: server.sinkgroups=g1 server.sinkgroups.g1.sinks=k1 k2 server.sinkgroups.g1.processor.type=load_balance server.sinkgroups.g1.processor.backoff=true server.sinkgroups.g1.processor.selector=random Flume多客户端聚合级联时的注意事项。 级联时需要走Avro或者Thrift协议进行级联。 聚合端存在多个节点时,连接配置尽量配置均衡,不要聚合到单节点上。 Flume客户端可以包含多个独立的数据流,即在一个配置文件properties.properties中配置多个Source、Channel、Sink。这些组件可以链接以形成多个流。 例如在一个配置中配置两个数据流,示例如下: server.sources = source1 source2 server.sinks = sink1 sink2 server.channels = channel1 channel2 #dataflow1 server.sources.source1.channels = channel1 server.sinks.sink1.channel = channel1 #dataflow2 server.sources.source2.channels = channel2 server.sinks.sink2.channel = channel2
  • 问题 HDFS调用FileInputFormat的getSplit方法的时候,出现ArrayIndexOutOfBoundsException: 0,日志如下: java.lang.ArrayIndexOutOfBoundsException: 0 at org.apache.hadoop.mapred.FileInputFormat.identifyHosts(FileInputFormat.java:708) at org.apache.hadoop.mapred.FileInputFormat.getSplitHostsAndCachedHosts(FileInputFormat.java:675) at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:359) at org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:210) at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:239) at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:237) at scala.Option.getOrElse(Option.scala:120) at org.apache.spark.rdd.RDD.partitions(RDD.scala:237) at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:35)
  • 快速配置常用参数 其他参数在安装集群时已进行了适配,以下参数需要根据使用场景进行调整。以下参数除特别指出外,一般在Spark2x客户端的“spark-defaults.conf”文件中配置。 表1 快速配置常用参数 配置项 说明 默认值 spark.sql.parquet.compression.codec 对于非分区parquet表,设置其存储文件的压缩格式。 在JD BCS erver服务端的“spark-defaults.conf”配置文件中进行设置。 snappy spark.dynamicAllocation.enabled 是否使用动态资源调度,用于根据规模调整注册于该应用的executor的数量。目前仅在YARN模式下有效。 JDBCServer默认值为true,client默认值为false。 false spark.executor.memory 每个Executor进程使用的内存数量,与JVM内存设置字符串的格式相同(例如:512m,2g)。 4G spark.sql.autoBroadcastJoinThreshold 当进行join操作时,配置广播的最大值。 当SQL语句中涉及的表中相应字段的大小小于该值时,进行广播。 配置为-1时,将不进行广播。 10485760 spark.yarn.queue JDBCServer服务所在的Yarn队列。 在JDBCServer服务端的“spark-defaults.conf”配置文件中进行设置。 default spark.driver.memory 大集群下推荐配置32~64g驱动程序进程使用的内存数量,即SparkContext初始化的进程(例如:512m, 2g)。 4G spark.yarn.security.credentials.hbase.enabled 是否打开获取HBase token的功能。如果需要Spark-on-HBase功能,并且配置了安全集群,参数值设置为“true”。否则设置为“false”。 false spark.serializer 用于串行化将通过网络发送或需要缓存的对象的类以序列化形式展现。 Java序列化的默认值适用于任何Serializable Java对象,但运行速度相当慢,所以建议使用org.apache.spark.serializer.KryoSerializer并配置Kryo序列化。可以是org.apache.spark.serializer.Serializer的任何子类。 org.apache.spark.serializer.JavaSerializer spark.executor.cores 每个执行者使用的内核个数。 在独立模式和Mesos粗粒度模式下设置此参数。当有足够多的内核时,允许应用程序在同样的worker上执行多个执行程序;否则,在每个worker上,每个应用程序只能运行一个执行程序。 1 spark.shuffle.service.enabled NodeManager中一个长期运行的辅助服务,用于提升Shuffle计算性能。 fasle spark.sql.adaptive.enabled 是否开启自适应执行框架。 false spark.executor.memoryOverhead 每个执行器要分配的堆内存量(单位为兆字节)。 这是占用虚拟机开销的内存,类似于内部字符串,其他内置开销等等。会随着执行器大小(通常为6-10%)而增长。 1GB spark.streaming.kafka.direct.lifo 配置是否开启Kafka后进先出功能。 false
  • HDFS文件系统目录简介 HDFS是Hadoop的分布式文件系统(Hadoop Distributed File System),实现大规模数据可靠的分布式读写。HDFS针对的使用场景是数据读写具有“一次写,多次读”的特征,而数据“写”操作是顺序写,也就是在文件创建时的写入或者在现有文件之后的添加操作。HDFS保证一个文件在一个时刻只被一个调用者执行写操作,而可以被多个调用者执行读操作。 HDFS文件系统中目录结构如下表所示。 表1 HDFS文件系统目录结构 路径 类型 简略功能 是否可以删除 删除的后果 /tmp/spark2x/sparkhive-scratch 固定目录 存放Spark2x JDBCServer中metastore session临时文件 否 任务运行失败 /tmp/sparkhive-scratch 固定目录 存放Spark2x cli方式运行metastore session临时文件 否 任务运行失败 /tmp/logs/ 固定目录 存放container日志文件 是 container日志不可查看 /tmp/carbon/ 固定目录 数据导入过程中,如果存在异常CarbonData数据,则将异常数据放在此目录下 是 错误数据丢失 /tmp/Loader-${作业名}_${MR作业id} 临时目录 存放Loader Hbase bulkload作业的region信息,作业完成后自动删除 否 Loader Hbase Bulkload作业失败 /tmp/hadoop-omm/yarn/system/rmstore 固定目录 ResourceManager运行状态信息 是 ResourceManager重启后状态信息丢失 /tmp/archived 固定目录 MR任务日志在HDFS上的归档路径 是 MR任务日志丢失 /tmp/hadoop-yarn/staging 固定目录 保存AM运行作业运行日志、作业概要信息和作业配置属性 否 任务运行异常 /tmp/hadoop-yarn/staging/history/done_intermediate 固定目录 所有任务运行完成后,临时存放/tmp/hadoop-yarn/staging目录下文件 否 MR任务日志丢失 /tmp/hadoop-yarn/staging/history/done 固定目录 周期性扫描线程定期将done_intermediate的日志文件转移到done目录 否 MR任务日志丢失 /tmp/mr-history 固定目录 存储预加载历史记录文件的路径 否 MR历史任务日志数据丢失 /tmp/hive-scratch 固定目录 Hive运行时生成的临时数据,如会话信息等 否 当前执行的任务会失败 /user/{user}/.sparkStaging 固定目录 存储SparkJDBCServer应用临时文件 否 executor启动失败 /user/spark2x/jars 固定目录 存放Spark2x executor运行依赖包 否 executor启动失败 /user/loader 固定目录 存放loader的作业脏数据以及HBase作业数据的临时存储目录 否 HBase作业失败或者脏数据丢失 /user/loader/etl_dirty_data_dir /user/loader/etl_hbase_putlist_tmp /user/loader/etl_hbase_tmp /user/oozie 固定目录 存放oozie运行时需要的依赖库,需用户手动上传 否 oozie调度失败 /user/mapred/hadoop-mapreduce-xxx.tar.gz 固定文件 MR分布式缓存功能使用的各jar包 否 MR分布式缓存功能无法使用 /user/hive 固定目录 Hive相关数据存储的默认路径,包含依赖的spark lib包和用户默认表数据存储位置等 否 用户数据丢失 /user/omm-bulkload 临时目录 HBase批量导入工具临时目录 否 HBase批量导入任务失败 /user/hbase 临时目录 HBase批量导入工具临时目录 否 HBase批量导入任务失败 /spark2xJobHistory2x 固定目录 Spark2x eventlog数据存储目录 否 HistoryServer服务不可用,任务运行失败 /flume 固定目录 Flume采集到HDFS文件系统中的数据存储目录 否 Flume工作异常 /mr-history/tmp 固定目录 MapReduce作业产生的日志存放位置 是 日志信息丢失 /mr-history/done 固定目录 MR JobHistory Server管理的日志的存放位置 是 日志信息丢失 /tenant 添加租户时创建 配置租户在HDFS中的存储目录,系统默认将自动在“/tenant”目录中以租户名称创建文件夹。例如租户“ta1”,默认HDFS存储目录为“tenant/ta1”。第一次创建租户时,系统自动在HDFS根目录创建“/tenant”目录。支持自定义存储路径。 否 租户不可用 /apps{1~5}/ 固定目录 WebHCat使用到Hive的包的路径 否 执行WebHCat任务会失败 /hbase 固定目录 HBase数据存储目录 否 HBase用户数据丢失 /hbaseFileStream 固定目录 HFS文件存储目录 否 HFS文件丢失,且无法恢复 父主题: 使用HDFS
  • 操作步骤 创建工作流,请参考使用Hue创建工作流。 在工作流编辑页面,选择“Java 程序”按钮,将其拖到操作区中。 在弹出的“Java program”窗口中配置“Jar name”的值,例如“/user/admin/examples/apps/java-main/lib/oozie-examples-5.1.0.jar”。配置“Main class”的值,例如“org.apache.oozie.example.DemoJavaMain”。然后单击“添加”。 单击Oozie编辑器右上角的。 保存前如果需要修改作业名称(默认为“My Workflow”),可以直接单击该名称进行修改,例如“Java-Workflow”。 保存完成后,单击,提交该作业。 作业提交后,可通过Hue界面查看作业的详细信息、日志、进度等相关内容。
  • Loader算子数据处理规则 在Loader导入或导出数据的任务中,每个算子对于原始数据中NULL值、空字符串定义了不同的处理规则;在算子中无法正确处理的数据,将成为脏数据,无法导入或导出。 在转换步骤中,算子数据处理规则请参见下表。 表1 数据处理规则一览表 转换步骤 规则描述 CSV文件输入 分隔符在原始数据中连续出现两次,将生成空字符串字段。 配置输入字段列数,大于原始数据实际包含的字段列数,全部数据成为脏数据。 遇到类型转换错误,当前数据保存为脏数据。 固定宽度文件输入 原始数据包含NULL值,不做转换处理。 配置输入字段列数,大于原始数据实际包含的字段列数,全部数据成为脏数据。 配置转换字段类型,与原始数据实际类型不同,全部数据成为脏数据。例如将字符串类型转换为数值类型。 配置字段分割长度,大于原字段值的长度,则数据分割失败,当前行成为脏数据 表输入 原始数据包含NULL值,不做转换处理。 配置输入字段列数,大于原始数据实际包含的字段列数,全部数据成为脏数据。 配置转换字段类型,与原始数据实际类型不同,全部数据成为脏数据。例如将字符串类型转换为数值类型。 HBase输入 原始数据包含NULL值,不做转换处理。 配置HBase表名错误,全部数据成为脏数据。 “主键”没有配置主键列,全部数据成为脏数据。 配置输入字段列数,大于原始数据实际包含的字段列数,全部数据成为脏数据。 配置转换字段类型,与原始数据实际类型不同,全部数据成为脏数据。例如将字符串类型转换为数值类型。 长整型时间转换 原始数据包含NULL值,不做转换处理。 配置输入字段列数,大于原始数据实际包含的字段列数,全部数据成为脏数据。 遇到类型转换错误,当前数据保存为脏数据。 空值转换 原始数据包含NULL值,转换为用户指定的值。 配置输入字段列数,大于原始数据实际包含的字段列数,全部数据成为脏数据。 随机值转换 不涉及处理NULL值、空字符串,不生成脏数据。 增加常量字段 不涉及处理NULL值、空字符串,不生成脏数据。 拼接转换 原始数据包含NULL值,将转换为空字符串。 配置输入字段列数,大于原始数据实际包含的字段列数,全部数据成为脏数据。 分隔转换 原始数据包含NULL值,当前行成为脏数据。 配置分割后字段列数,大于原始数据实际可分割出来的字段列数,当前行成为脏数据。 取模转换 原始数据包含NULL值,当前行成为脏数据。 配置输入字段列数,大于原始数据实际包含的字段列数,全部数据成为脏数据。 数据类型转换失败,当前行成为脏数据。 剪切字符串 传入数据为NULL值,不做转换处理。 配置输入字段列数,大于原始数据实际包含的字段列数,全部数据成为脏数据。 字符截取的起点位置或终点位置,大于输入字段的长度时,当前行成为脏数据。 EL操作转换 传入数据为NULL值,不做转换处理。 输入一个或多个字段的值,输出计算结果。 输入类型和算子不兼容时,当前行为脏数据。 字符串大小写转换 传入数据为NULL值,不做转换处理。 配置输入字段列数,大于原始数据实际包含的字段列数,全部数据成为脏数据。 字符串逆序转换 传入数据为NULL值,不做转换处理。 配置输入字段列数,大于原始数据实际包含的字段列数,全部数据成为脏数据。 字符串空格清除转换 传入数据为NULL值,不做转换处理。 配置输入字段列数,大于原始数据实际包含的字段列数,全部数据成为脏数据。 过滤行转换 条件逻辑为“AND”,如果未添加过滤条件,全部数据成为脏数据;或者原始数据满足添加的全部过滤条件,当前行成为脏数据。 条件逻辑为“OR”,如果未添加过滤条件,全部数据成为脏数据;或者原始数据满足任意添加的过滤条件,当前行成为脏数据。 文件输出 传入数据为NULL值,不做转换处理。 配置输入字段列数,大于原始数据实际包含的字段列数,全部数据成为脏数据。 数据类型转换失败,当前行成为脏数据。 表输出 HBase输出 原始数据包含NULL值,如果“NULL值处理方式”设置为“true”,将转换为空字符串并保存。如果“NULL值处理方式”设置为“false”,不保存数据。 配置输入字段列数,大于原始数据实际包含的字段列数,全部数据成为脏数据。 数据类型转换失败,当前行成为脏数据。 Hive输出 如果指定了一个或多个列为分区列,则在“到”页面上,会显示“分割程序”属性,该属性表示使用多少个处理器去对分区数据进行处理。 如果没有指定任何列为分区列,则表示不需要对输入数据进行分区处理,“分割程序”属性默认隐藏。 配置输入字段列数,大于原始数据实际包含的字段列数,全部数据成为脏数据。 数据类型转换失败,当前行成为脏数据。 父主题: Loader算子帮助
  • 配置描述 请参考修改集群服务配置参数,进入HDFS的“全部配置”页面,在搜索框中输入参数名称。 表1 参数说明 参数 描述 默认值 ha.health-monitor.rpc-timeout.ms zkfc对NameNode健康状态检查的超时时间。增大该参数值,可以防止出现双Active NameNode,降低客户端应用运行异常的概率。 单位:毫秒。取值范围:30000~3600000 180000 ipc.client.connect.max.retries.on.timeouts 客户端与服务端建立Socket连接超时时,客户端的重试次数。 取值范围:1~256 45 ipc.client.connect.timeout 客户端与服务端建立socket连接的超时时间。增大该参数值,可以增加建立连接的超时时间。 单位:毫秒。取值范围:1~3600000 20000
  • 配置描述 请参考修改集群服务配置参数,进入HDFS的“全部配置”页面,在搜索框中输入参数名称。 表1 NameNode blacklisting的相关参数 参数 描述 默认值 dfs.client.failover.proxy.provider.[nameservice ID] 利用已通过的协议创建namenode代理的Client Failover proxy provider类。 将参数值设置为“org.apache.hadoop.hdfs.server.namenode.ha.BlackListingFailoverProxyProvider”, 可使用从NameNode支持读的特性。 org.apache.hadoop.hdfs.server.namenode.ha.AdaptiveFailoverProxyProvider
  • 配置场景 本章节适用于MRS 3.x及后续版本。 在现有的缺省DFSclient failover proxy provider中,一旦某进程中的一个NameNode发生故障,在同一进程中的所有HDFS client实例都会尝试再次连接NameNode,导致应用长时间等待超时。 当位于同一JVM进程中的客户端对无法访问的NameNode进行连接时,会对系统造成负担。为了避免这种负担,MRS集群搭载了NameNode blacklist功能。 在新的Blacklisting DFSClient failover provider中,故障的NameNode将被记录至一个列表中。DFSClient会利用这些信息,防止客户端再次连接这些NameNode。该功能被称为NameNode blacklisting。 例如,如下集群配置: NameNode:nn1、nn2 dfs.client.failover.connection.retries:20 单JVM中的进程:10个客户端 在上述集群中,如果当前处于active状态的nn1无法访问,client1将会对nn1进行20次重新连接,之后发生故障转移,client1将会连接至nn2。与此相同,client2至client10也会在对nn1进行20次重新连接后连接至nn2。这样会延长NameNode的整体故障恢复时间。 针对该情况,当client1试图连接当前处于active状态的nn1,但其已经发生故障时,nn1将会被添加至blacklist。这样其余client就不会连接已被添加至blacklist的nn1,而是会选择连接nn2。 若在任一时刻,所有NameNode都被添加至blacklist,则其内容会被清空,client会按照初始的NameNode list重新尝试连接。若再次出现任何故障,NameNode仍会被添加至blacklist。 图1 NameNode blacklisting状态图
  • 已安装Flume客户端场景 在客户端flume-check.properties文件中配置client.per-check.shell,指向plugin.sh的绝对路径。 例如Flume客户端安装路径为“/opt/FlumeClient”,则flume-check.properties文件所在目录为/opt/FlumeClient/fusioninsight-flume-1.9.0/conf, 配置如下: client.per-check.shell=/opt/FlumeClient/fusioninsight-flume-1.9.0/plugins.s/plugin.sh plugins = com.huawei.flume.services.FlumePreTransmitService flume.check.default.interval = 15 配置plugin.conf,定义具体调用的脚本、相关参数。 例如Flume客户端安装路径为“/opt/FlumeClient”,则plugin.conf配置文件所在目录为/opt/FlumeClient/fusioninsight-flume-1.9.0/conf, 配置如下: RUN_PLUGIN="PLUGIN_LIST_1" LOG _TO_HDFS_PATH="/yxs" LOG_TO_HDFS_ENCODE_PATH="${LOG_TO_HDFS_PATH}/Flume_Encoded/" PLUGIN_LINK_DIR="/tmp/yxs1" PLUGIN_MV_TARGET_DIR="/tmp/yxs2" PLUGIN_SUFFIX="COMPLETED" PLUGIN_LIST_1="mv_complete.sh --linkdir ${PLUGIN_LINK_DIR} --mvtargetdir ${PLUGIN_MV_TARGET_DIR} --suffix ${PLUGIN_SUFFIX}" 在客户端安装路径bin目录执行以下命令,重启Flume客户端,例如“/opt/FlumeClient/fusioninsight-flume-1.9.0/bin”。 ./flume-manage.sh restart
共100000条