华为云用户手册

  • 回答 在HMaster主备倒换或启动期间,HMaster为先前失败/停用的RegionServer执行WAL splitting及region恢复。 在后台运行有多个监控HMaster启动进程的线程: TableNamespaceManager 这是一个帮助类,用于在HMaster主备倒换或启动期间,管理namespace表及监控表region的分配。如果namespace表在规定时间(hbase.master.namespace.init.timeout,默认为3600000ms)内没有上线,那么它就会异常中断HMaster进程。 InitializationMonitor 这是一个主HMaster初始化线程监控类,用于监控主Master的初始化。如果在规定时间(hbase.master.initializationmonitor.timeout,默认为3600000ms)内初始化线程失败,该线程会异常终止HMaster(如果该hbase.master.initializationmonitor.haltontimeout被启动,默认为false)。 在HMaster主备倒换或启动期间,如果WAL hlog文件存在,它会初始化WAL splitting任务。如果WAL hlog splitting任务完成,它将初始化表region分配任务。 HMaster通过ZooKeeper协调log splitting任务和有效的RegionServer,并追踪任务的发展。如果主HMaster在log splitting任务期间退出,新的主HMaster会尝试重发没有完成的任务,RegionServer从头启动log splitting任务。 HMaster初始化工作完成情况会由于很多原因被延迟: 间歇性的网络故障。 磁盘瓶颈。 log split任务工作负荷较大,RegionServer运行缓慢。 RegionServer(region openning)响应缓慢。 在以上场景中,为使HMaster更早完成恢复任务,建议增加以下配置参数,否则Master将退出导致整个恢复进程被更大程度地延迟。 增加namespace表在线等待超时周期,保证Master有足够的时间协调RegionServer workers split任务,避免一次次重复相同的任务。 “hbase.master.namespace.init.timeout”(默认为3600000ms) 通过RegionServer worker增加并行split任务执行数,保证RegionServer worker能并行处理split work(RegionServer需要有更多的核心)。在“客户端安装路径/HBase/hbase/conf/hbase-site.xml”中添加参数: “hbase.regionserver.wal.max.splitters”(默认为2) 如果所有的恢复过程都需要时间,增加初始化监控线程超时时间。 “hbase.master.initializationmonitor.timeout”(默认为3600000ms)
  • 回答 当Standby NameNode存储元数据(命名空间)时,出现断电的情况,Standby NameNode启动失败,MD5文件会损坏。通过移除损坏的fsimage,然后启动Standby NameNode,可以修复此问题。Standby NameNode会加载先前的fsimage并重现所有的edits。 修复步骤: 移除损坏的fsimage。 rm -rf ${BIGDATA_DATA_HOME}/namenode/current/fsimage_0000000000000096 启动Standby NameNode。
  • 通过加载数据的时间删除 用户可基于特定的加载时间删除数据。 命令: DELETE FROM TABLE db_name.table_name WHERE SEGMENT.STARTTIME BEFORE date_value; 示例: DELETE FROM TABLE carbonTable WHERE SEGMENT.STARTTIME BEFORE '2017-07-01 12:07:20'; 上述命令可删除'2017-07-01 12:07:20'之前的所有segment。 有关详细信息,请参阅DELETE SEGMENT by DATE。
  • 删除结果 数据对应的segment被删除,数据将不能再被访问。可通过SHOW SEGMENTS命令显示segment状态,查看是否成功删除。 调用DELETE SEGMENT命令时,物理上而言,Segment并没有从文件系统中被删除。使用命令SHOW SEGMENTS查看Segment信息,可看见被删除的Segment的状态被标识为"Marked for Delete"。但使用SELECT * FROM tablename命令查询时,不会显示被删除的Segment的内容。 下一次加载数据且达到最大查询执行时间(由“max.query.execution.time”配置,默认为“60分钟”)后,Segment才会从文件系统中真正删除。 如果用户想要强制删除物理Segment文件,那么可以使用CLEAN FILES命令。 示例: CLEAN FILES FOR TABLE table1; 该命令将从物理上删除状态为“Marked for delete”的Segment文件。 如果在“max.query.execution.time”规定的时间到达之前使用该命令,可能会导致查询失败。“max.query.execution.time”可在“carbon.properties”文件中设置,表示一次查询允许花费的最长时间。
  • 通过Segment ID删除 每个Segment都有与其关联的唯一Segment ID。使用这个Segment ID可以删除该Segment。 运行如下命令获取Segment ID。 命令: SHOW SEGMENTS FOR Table dbname.tablename LIMIT number_of_loads; 示例: SHOW SEGMENTS FOR TABLE carbonTable; 上述命令可显示tablename为carbonTable的表的所有Segment信息。 SHOW SEGMENTS FOR TABLE carbonTable LIMIT 2; 上述命令可显示number_of_loads规定条数的Segment信息。 输出结果如下: +-----+----------+--------------------------+------------------+------------+------------+-------------+--------------+--+ | ID | Status | Load Start Time | Load Time Taken | Partition | Data Size | Index Size | File Format | +-----+----------+--------------------------+------------------+------------+------------+-------------+--------------+--+ | 3 | Success | 2020-09-28 22:53:26.336 | 3.726S | {} | 6.47KB | 3.30KB | columnar_v3 | | 2 | Success | 2020-09-28 22:53:01.702 | 6.688S | {} | 6.47KB | 3.30KB | columnar_v3 | +-----+----------+--------------------------+------------------+------------+------------+-------------+--------------+--+ SHOW SEGMENTS命令输出包括ID、Status、Load Start Time、Load Time Taken、Partition、Data Size、Index Size、File Format。最新的加载信息在输出中第一行显示。 获取到需要删除的Segment的Segment ID后,执行如下命令删除对应Segment: 命令: DELETE FROM TABLE tableName WHERE SEGMENT.ID IN (load_sequence_id1, load_sequence_id2, ....); 示例: DELETE FROM TABLE carbonTable WHERE SEGMENT.ID IN (1,2,3); 详细信息,请参阅DELETE SEGMENT by ID。
  • 问题 Hive创建超过3.2万分区的表,执行带有WHERE分区的条件查询时出现异常,且“metastore.log”中打印的异常信息包含以下信息: Caused by: java.io.IOException: Tried to send an out-of-range integer as a 2-byte value: 32970 at org.postgresql.core.PGStream.SendInteger2(PGStream.java:199) at org.postgresql.core.v3.QueryExecutorImpl.sendParse(QueryExecutorImpl.java:1330) at org.postgresql.core.v3.QueryExecutorImpl.sendOneQuery(QueryExecutorImpl.java:1601) at org.postgresql.core.v3.QueryExecutorImpl.sendParse(QueryExecutorImpl.java:1191) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:346)
  • 参数说明 Hue常用参数请参见表1。 表1 Hue常用参数 配置参数 说明 缺省值 范围 HANDLER_AC CES S LOG _LEVEL Hue的访问日志级别。 DEBUG ERROR WARN INFO DEBUG HANDLER_AUDITSLOG_LEVEL Hue的审计日志级别。 DEBUG ERROR WARN INFO DEBUG HANDLER_ERRORLOG_LEVEL Hue的错误日志级别。 ERROR ERROR WARN INFO DEBUG HANDLER_LOGFILE_LEVEL Hue的运行日志级别。 INFO ERROR WARN INFO DEBUG HANDLER_LOGFILE_MAXBACKUPINDEX Hue日志文件最大个数。 20 1~999 HANDLER_LOGFILE_SIZE Hue日志文件最大大小。 5MB - Hue自定义参数请参见表2。以下自定义参数仅 MRS 3.1.2及之后版本适用。
  • 操作步骤 可对INSERT...SELECT操作做如下的调优操作。 如果建的是Hive表,将存储类型设为Parquet,从而减少执行INSERT...SELECT语句的时间。 建议使用spark-sql或者在Beeline/JD BCS erver模式下使用spark用户来执行INSERT...SELECT操作,避免执行更改文件owner的操作,从而减少执行INSERT...SELECT语句的时间。 在Beeline/JDB CS erver模式下,executor的用户跟driver是一致的,driver是JDBCServer服务的一部分,是由spark用户启动的,因此其用户也是spark用户,且当前无法实现在运行时将Beeline端的用户透传到executor,因此使用非spark用户时需要对文件进行更改owner为Beeline端的用户,即实际用户。 如果查询的数据是大量的小文件将会产生大量map操作,从而导致输出存在大量的小文件,在执行重命名文件操作时将会耗费较多时间,此时可以通过设置“spark.sql.files.maxPartitionBytes”与“spark.files.openCostInBytes”来设置一个partiton读取的最大字节,在一个partition中合并多个小文件来减少输出文件数及执行重命名文件操作的时间,从而减少执行INSERT...SELECT语句的时间。 上述优化操作并不能解决全部的性能问题,对于以下场景仍然需要较多时间: 对于动态分区表,如果其分区数非常多,那么也需要执行较长的时间。
  • 操作场景 HBase可以通过对HFile中的data block编码,减少keyvalue中key的重复部分,从而减少空间的使用。目前对data block的编码方式有:NONE、PREFIX、DIFF、FAST_DIFF和ROW_INDEX_V1,其中NONE表示不使用编码。另外,HBase还支持使用压缩算法对HFile文件进行压缩,默认支持的压缩算法有:NONE、GZ、SNAPPY和ZSTD,其中NONE表示HFile不压缩。 这两种方式都是作用在HBase的列簇上,可以同时使用,也可以单独使用。
  • 操作步骤 访问Hue WebUI,请参考访问Hue WebUI界面。 在界面左侧导航栏单击,选择“Bundle”,打开Bundle编辑器。 在作业编辑界面中单击“My Bundle”修改作业的名称。 单击“+添加Coordinator”选择需要编排的Coordinator作业。 根据界面提示设置Coordinator任务调度的开始、结束时间,然后单击右上角的保存作业。 单击编辑器右上角的,在弹出菜单选择,设置Bundle任务的启动时间,根据实际需求单击“+添加参数”设置提交参数,然后关闭对话框保存设置。 因时区转化的原因,此处时间有可能会与当地系统实际时间差异数个小时。比如在中国,此处的时间则会比当地时间晚8个小时。 单击编辑器右上角的,在弹出的确认界面中单击“提交”提交作业。
  • 问题 当集群重启后会进行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)
  • 回答 在splitWAL的过程中,参数“hbase.splitlog.manager.timeout”控制splitWAL的超时时间,若该时间内splitWAL无法完成,则会再次提交相同的任务,在一定时间内多次提交了相同的任务,当其中某次任务执行完毕时会删除这个temp文件,所以在后来的任务执行时无法找到这个文件,故出现FileNotFoudException。需做如下调整: 当前“hbase.splitlog.manager.timeout”的默认时间为“600000ms”,集群规格为每个regionserver上有2000~3000个region,在集群正常情况下(HBase无异常,HDFS无大量的读写操作等),建议此参数依据集群的规格进行调整,若实际规格(实际平均每个regonserver上region的个数)大于默认规格(默认平均每个regionserver上region的个数,即2000),则调整方案为(实际规格 / 默认规格)* 默认时间。 在服务端的“hbase-site.xml”文件中配置splitlog参数,如表1所示。 表1 splitlog参数说明 参数 描述 默认值 hbase.splitlog.manager.timeout 分布式日志分裂管理程序接收worker回应的超时时间 600000
  • 回答 在YARN中,当一个APP的节点被AM(ApplicationMaster)加入黑名单的数量达到一定比例(默认值为节点总数的33%)时,该AM会自动释放黑名单,从而不会出现由于所有可用节点都被加入黑名单而任务无法获取节点资源的现象。 在资源池场景下,假设该集群上有8个节点,通过NodeLabel特性将集群划分为两个资源池,pool A和pool B,其中pool B包含两个节点。用户提交了一个任务App1到pool B,由于HDFS空间不足,App1运行失败,导致pool B的两个节点都被App1的AM加入了黑名单,根据上述原则,2个节点小于8个节点的33%,所以YARN不会释放黑名单,使得App1一直无法得到资源而保持运行状态,后续即使被加入黑名单的节点恢复,App1也无法得到资源。 由于上述原则不适用于资源池场景,所以目前可通过调整客户端参数(路径为“客户端安装路径/Yarn/config/yarn-site.xml”)“yarn.resourcemanager.am-scheduling.node-blacklisting-disable-threshold”为:(nodes number of pool / total nodes )* 33%解决该问题。
  • CarbonData表操作并发语法说明 DDL和DML中的操作,执行前,需要获取对应的锁,各操作需要获取锁的情况见表1 操作获取锁一览表,√表示需要获取该锁,一个操作仅在获取到所有需要获取的锁后,才能继续执行。 任意两个操作是否可以并发执行,可以通过如下方法确定:表1两行代表两个操作,这两行没有任意一列都标记√,即不存在某一列两行全为√。 表1 操作获取锁一览表 操作 METADATA_LOCK COMPACTION_LOCK DROP_TABLE_LOCK DELETE_SEGMENT_LOCK CLEAN_FILES_LOCK ALTER_PARTITION_LOCK UPDATE_LOCK STREAMING_LOCK CONCURRENT_LOAD_LOCK SEGMENT_LOCK CREATE TABLE - - - - - - - - - - CREATE TABLE As SELECT - - - - - - - - - - DROP TABLE √ - √ - - - - √ - - ALTER TABLE COMPACTION - √ - - - - √ - - - TABLE RENAME - - - - - - - - - - ADD COLUMNS √ √ - - - - - - - - DROP COLUMNS √ √ - - - - - - - - CHANGE DATA TYPE √ √ - - - - - - - - REFRESH TABLE - - - - - - - - - - REGISTER INDEX TABLE √ - - - - - - - - - REFRESH INDEX - √ - - - - - - - - LOAD DATA/INSERT INTO - - - - - - - - √ √ UPDATE CARBON TABLE √ √ - - - - √ - - - DELETE RECORDS from CARBON TABLE √ √ - - - - √ - - - DELETE SEGMENT by ID - - - √ √ - - - - - DELETE SEGMENT by DATE - - - √ √ - - - - - SHOW SEGMENTS - - - - - - - - - - CREATE SECONDARY INDEX √ √ - √ - - - - - - SHOW SECONDARY INDEXES - - - - - - - - - - DROP SECONDARY INDEX √ - √ - - - - - - - CLEAN FILES - - - - - - - - - - SET/RESET - - - - - - - - - - Add Hive Partition - - - - - - - - - - Drop Hive Partition √ √ √ √ √ √ - - - - Drop Partition √ √ √ √ √ √ - - - - Alter table set √ √ - - - - - - - - 父主题: CarbonData语法参考
  • 回答 由于已备份Hive表对应的HDFS目录创建了快照,导致HDFS目录无法删除,造成Hive表删除失败。 Hive表在执行备份操作时,会创建表对应的HDFS数据目录快照。而HDFS的快照机制有一个约束:如果一个HDFS目录已创建快照,则在快照完全删除之前,该目录无法删除或修改名称。Hive表(除EXTERNAL表外)执行drop操作时,会尝试删除该表对应的HDFS数据目录,如果目录删除失败,系统会提示表删除失败。 如果确实需要删除该表,可手动删除涉及到该表的所有备份任务。
  • 操作场景 该操作指导用户对ZooKeeper的znode设置权限。 ZooKeeper通过访问控制列表(ACL)来对znode进行访问控制。ZooKeeper客户端为znode指定ACL,ZooKeeper服务器根据ACL列表判定某个请求znode的客户端是否有对应操作的权限。ACL设置涉及如下四个方面。 查看ZooKeeper中znode的ACL。 增加ZooKeeper中znode的ACL。 修改ZooKeeper中znode的ACL。 删除ZooKeeper中znode的ACL。 ZooKeeper的ACL权限说明: ZooKeeper目前支持create,delete,read,write,admin五种权限,且ZooKeeper对权限的控制是znode级别的,而且不继承,即对父znode设置权限,其子znode不继承父znode的权限。ZooKeeper中znode的默认权限为world:anyone:cdrwa,即任何用户都有所有权限。 ACL有三部分: 第一部分是认证类型,如world指所有认证类型,sasl是kerberos认证类型; 第二部分是账号,如anyone指的是任何人; 第三部分是权限,如cdrwa指的是拥有所有权限。 特别的,由于普通模式启动客户端不需要认证,sasl认证类型的ACL在普通模式下将不能使用。本文所有涉及sasl方式的鉴权操作均是在安全集群中进行。 表1 Zookeeper的五种ACL 权限说明 权限简称 权限详情 创建权限 create(c) 可以在当前znode下创建子znode 删除权限 delete(d) 删除当前的znode 读权限 read(r) 获取当前znode的数据,可以列出当前znode所有的子znodes 写权限 write(w) 向当前znode写数据,写入子znode 管理权限 admin(a) 设置当前znode的权限
  • Hudi Cleaning操作说明 Cleaning用于清理不再需要的版本数据。 Hudi使用Cleaner后台作业,不断清除不需要的旧得版本的数据。通过配置hoodie.cleaner.policy和hoodie.cleaner.commits.retained可以使用不同的清理策略和保存的commit数量。 执行cleaning有两种方式: 同步clean由参数hoodie.clean.automatic控制,默认自动开启。 关闭同步clean: datasource写入时可以通过.option("hoodie.clean.automatic", "false")来关闭自动clean。 spark-sql写入时可以通过set hoodie.clean.automatic=false;来关闭自动clean。 异步clean可以使用spark-sql来执行。 更多clean相关参数请参考compaction&cleaning配置章节。 父主题: 数据管理维护
  • Grouping 语法简介: 当Group by语句带with rollup/cube选项时,Grouping才有意义。 CUBE生成的结果集显示了所选列中值的所有组合的聚合。 ROLLUP生成的结果集显示了所选列中值的某一层次结构的聚合。 Grouping:当用CUBE或ROLLUP运算符添加行时,附加的列输出值为1;当所添加的行不是由CUBE或ROLLUP产生时,附加列值为0。 例如,Hive中有一张表“table_test”,表结构如下所示: +----------------+-------------------+--+ | table_test.id | table_test.value | +----------------+-------------------+--+ | 1 | 10 | | 1 | 15 | | 2 | 20 | | 2 | 5 | | 2 | 13 | +----------------+-------------------+--+ 执行如下语句: select id,grouping(id),sum(value) from table_test group by id with rollup; 得到如下结果: +-------+-----------------+------+--+ | id | groupingresult | sum | +-------+-----------------+------+--+ | 1 | 0 | 25 | | NULL | 1 | 63 | | 2 | 0 | 38 | +-------+-----------------+------+--+
  • EXCEPT、INTERSECT 语法简介 EXCEPT返回两个结果集的差(即从左查询中返回右查询没有找到的所有非重复值)。 INTERSECT返回两个结果集的交集(即两个查询都返回的所有非重复值)。 例如,Hive中有两张表“test_table1”、“test_table2”。 “test_table1”表结构如下所示: +-----------------+--+ | test_table1.id | +-----------------+--+ | 1 | | 2 | | 3 | | 4 | +-----------------+--+ “test_table2”表结构如下所示: +-----------------+--+ | test_table2.id | +-----------------+--+ | 2 | | 3 | | 4 | | 5 | +-----------------+--+ 执行如下的EXCEPT语句: select id from test_table1 except select id from test_table2; 显示如下结果: +--------------+--+ | _alias_0.id | +--------------+--+ | 1 | +--------------+--+ 执行INTERSECT语句: select id from test_table1 intersect select id from test_table2; 显示如下结果: +--------------+--+ | _alias_0.id | +--------------+--+ | 2 | | 3 | | 4 | +--------------+--+
  • 注意事项 Flume可靠性保障措施有哪些? Source&Channel、Channel&Sink之间的事务机制。 Sink Processor支持配置failover、load_blance机制,例如负载均衡示例如下,详细参考http://flume.apache.org/releases/1.9.0.html。 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多agent聚合级联时的注意事项? 级联时需要使用Avro或者Thrift协议进行级联。 聚合端存在多个节点时,连接配置尽量配置均衡,不要聚合到单节点上。
  • 常用Sink配置 HDFS Sink HDFS Sink将数据写入Hadoop分布式文件系统(HDFS)。常用配置如下表所示: 表10 HDFS Sink常用配置 参数 默认值 描述 channel - 与之相连的channel。 type hdfs hdfs sink的类型,必须设置为hdfs。 hdfs.path - HDFS上数据存储路径,必须以“hdfs://hacluster/”开头。 monTime 0(不开启) 线程监控阈值,更新时间超过阈值后,重新启动该Sink,单位:秒。 hdfs.inUseSuffix .tmp 正在写入的hdfs文件后缀。 hdfs.rollInterval 30 按时间滚动文件,单位:秒,同时需将“hdfs.fileCloseByEndEvent”设置为“false”。 hdfs.rollSize 1024 按大小滚动文件,单位:bytes,同时需将“hdfs.fileCloseByEndEvent”设置为“false”。 hdfs.rollCount 10 按Event个数滚动文件,同时需将“hdfs.fileCloseByEndEvent”设置为“false”。 说明: 参数“rollInterval”、“rollSize”和“rollCount”可同时配置,三个参数采取优先原则,哪个参数值先满足,优先按照哪个参数进行压缩。 hdfs.idleTimeout 0 自动关闭空闲文件超时时间,单位:秒。 hdfs.batchSize 1000 批次写入HDFS的Event个数。 hdfs.kerberosPrincipal - 认证HDFS的Kerberos principal,普通模式集群不配置,安全模式集群必须配置。 hdfs.kerberosKeytab - 认证HDFS的Kerberos keytab,普通模式集群不配置,安全模式集群中,用户必须对jaas.cof文件中的keyTab路径有访问权限。 hdfs.fileCloseByEndEvent true 收到源文件的最后一个Event时是否关闭hdfs文件。 hdfs.batchCallTimeout - 批次写入HDFS超时控制时间,单位:毫秒。 当不配置此参数时,对每个Event写入HDFS进行超时控制。当“hdfs.batchSize”大于0时,配置此参数可以提升写入HDFS性能。 说明: “hdfs.batchCallTimeout”设置多长时间需要考虑“hdfs.batchSize”的大小,“hdfs.batchSize”越大,“hdfs.batchCallTimeout”也要调整更长时间,设置过短时间容易导致写HDFS失败。 serializer.appendNewline true 将一个Event写入HDFS后是否追加换行符('\n'),如果追加该换行符,该换行符所占用的数据量指标不会被HDFS Sink统计。 hdfs.filePrefix over_%{basename} 数据写入hdfs后文件名的前缀。 hdfs.fileSuffix - 数据写入hdfs后文件名的后缀。 hdfs.inUsePrefix - 正在写入的hdfs文件前缀。 hdfs.fileType DataStream hdfs文件格式,包括“SequenceFile”、“DataStream”以及“CompressedStream”。 说明: “SequenceFile”和“DataStream”不压缩输出文件,不能设置参数“codeC”,“CompressedStream”压缩输出文件,必须设置“codeC”参数值配合使用。 hdfs.codeC - 文件压缩格式,包括gzip、bzip2、lzo、lzop、snappy。 hdfs.maxOpenFiles 5000 最大允许打开的hdfs文件数,当打开的文件数达到该值时,最早打开的文件将会被关闭。 hdfs.writeFormat Writable 文件写入格式,“Writable”或者“Text”。 hdfs.callTimeout 10000 写入HDFS超时控制时间,单位:毫秒。 hdfs.threadsPoolSize - 每个HDFS sink用于HDFS io操作的线程数。 hdfs.rollTimerPoolSize - 每个HDFS sink用于调度定时文件滚动的线程数。 hdfs.round false 时间戳是否四舍五入。若设置为true,则会影响所有基于时间的转义序列(%t除外)。 hdfs.roundUnit second 时间戳四舍五入单位,可选为“second”、“minute”或“hour”,分别对应为秒、分钟和小时。 hdfs.useLocalTimeStamp true 是否启用本地时间戳,建议设置为“true”。 hdfs.closeTries 0 hdfs sink尝试关闭重命名文件的最大次数。默认为0表示sink会一直尝试重命名,直至重命名成功。 hdfs.retryInterval 180 尝试关闭hdfs文件的时间间隔,单位:秒。 说明: 每个关闭请求都会有多个RPC往返Namenode,因此设置的太低可能导致Namenode超负荷。如果设置0,如果第一次尝试失败的话,该Sink将不会尝试关闭文件,并且把文件打开,或者用“.tmp”作为扩展名。 hdfs.failcount 10 数据写入hdfs失败的次数。该参数作为sink写入hdfs失败次数的阈值,当超过该阈值后上报数据传输异常告警。 Avro Sink Avro Sink把events转化为Avro events并发送到配置的主机的监测端口。常用配置如下表所示: 表11 Avro Sink常用配置 参数 默认值 描述 channel - 与之相连的channel。 type - avro sink的类型,必须设置为avro。 hostname - 绑定的主机名/IP。 port - 监测端口,该端口需未被占用。 batch-size 1000 批次发送的Event个数。 client.type DEFAULT 客户端实例类型,根据所配置的模型实际使用到的通信协议设置。该值可选值包括: DEFAULT,返回AvroRPC类型的客户端实例。 OTHER,返回NULL。 THRIFT,返回Thrift RPC类型的客户端实例。 DEFAULT_LOADBALANCING, 返回LoadBalancing RPC 客户端实例。 DEFAULT_FAILOVER, 返回Failover RPC 客户端实例。 ssl false 是否使用SSL加密。设置为true时还必须指定“密钥(keystore)”和“密钥存储密码(keystore-password)”。 truststore-type JKS Java信任库类型,“JKS”或“PKCS12”。 说明: JKS的密钥库和私钥采用不同的密码进行保护,而PKCS12的密钥库和私钥采用相同密码进行保护。 truststore - Java信任库文件。 truststore-password - Java信任库密码。 keystore-type JKS ssl启用后密钥存储类型。 keystore - ssl启用后密钥存储文件路径,开启ssl后,该参数必填。 keystore-password - ssl启用后密钥存储密码,开启ssl后,该参数必填。 connect-timeout 20000 第一次连接的超时时间,单位:毫秒。 request-timeout 20000 第一次请求后一次请求的最大超时时间,单位:毫秒。 reset-connection-interval 0 一次断开连接后,等待多少时间后进行重新连接,单位:秒。默认为0表示不断尝试。 compression-type none 批数据压缩类型,“none”或“deflate”,“none”表示不压缩,“deflate”表示压缩。该值必须与AvroSource的compression-type匹配。 compression-level 6 批数据压缩级别(1-9),数值越高,压缩率越高。 exclude-protocols SSLv3 排除的协议列表,用空格分开。默认排除SSLv3协议。 HBase Sink HBase Sink将数据写入到HBase中。常用配置如下表所示: 表12 HBase Sink常用配置 参数 默认值 描述 channel - 与之相连的channel。 type - hbase sink的类型,必须设置为hbase。 table - HBase表名称。 columnFamily - HBase列族。 monTime 0(不开启) 线程监控阈值,更新时间超过阈值后,重新启动该Sink,单位:秒。 batchSize 1000 批次写入HBase的Event个数。 kerberosPrincipal - 认证HBase的Kerberos principal,普通模式集群不配置,安全模式集群必须配置。 kerberosKeytab - 认证HBase的Kerberos keytab,普通模式集群不配置,安全模式集群中,flume运行用户必须对jaas.cof文件中的keyTab路径有访问权限。 coalesceIncrements true 是否在同一个处理批次中,合并对同一个hbase cell多个操作。设置为true有利于提高性能。 Kafka Sink Kafka Sink将数据写入到Kafka中。常用配置如下表所示: 表13 Kafka Sink常用配置 参数 默认值 描述 channel - 与之相连的channel。 type - kafka sink的类型,必须设置为org.apache.flume.sink.kafka.KafkaSink。 kafka.bootstrap.servers - Kafka 的bootstrap 地址端口列表。如果集群安装有kafka并且配置已经同步,服务端可以不配置此项,默认值为Kafka集群中所有的broker列表,客户端必须配置该项,多个用逗号分隔。端口和安全协议的匹配规则必须为:21007匹配安全模式(SASL_PLAINTEXT),9092匹配普通模式(PLAINTEXT)。 monTime 0(不开启) 线程监控阈值,更新时间超过阈值后,重新启动该Sink,单位:秒。 kafka.producer.acks 1 必须收到多少个replicas的确认信息才认为写入成功。0表示不需要接收确认信息,1表示只等待leader的确认信息。-1表示等待所有的relicas的确认信息。设置为-1,在某些leader失败的场景中可以避免数据丢失。 kafka.topic - 数据写入的topic,必须填写。 flumeBatchSize 1000 批次写入Kafka的Event个数。 kafka.security.protocol SASL_PLAINTEXT Kafka安全协议,普通模式集群下须配置为“PLAINTEXT”。端口和安全协议的匹配规则必须为:21007匹配安全模式(SASL_PLAINTEXT),9092匹配普通模式(PLAINTEXT)。 ignoreLongMessage false 是否丢弃超大消息的开关。 messageMaxLength 1000012 Flume写入Kafka的消息的最大长度。 defaultPartitionId - 用于指定channel中的events被传输到哪一个Kafka partition ID ,此值会被partitionIdHeader覆盖。默认情况下,如果此参数不设置,会由Kafka Producer's partitioner 进行events分发(可以通过指定key或者kafka.partitioner.class自定义的partitioner)。 partitionIdHeader - 设置时,对应的Sink 将从Event 的Header中获取使用此属性的值命名的字段的值,并将消息发送到主题的指定分区。 如果该值无对应的有效分区,则会发生EventDeliveryException。 如果Header 值已经存在,则此设置将覆盖参数defaultPartitionId。 Other Kafka Producer Properties - 其他Kafka配置,可以接受任意Kafka支持的生产配置,配置需要加前缀 .kafka。 Thrift Sink Thrift Sink把events转化为Thrift events并发送到配置的主机的监测端口。常用配置如下表所示: 表14 Thrift Sink常用配置 参数 默认值 描述 channel - 与之相连的channel。 type thrift thrift sink的类型,必须设置为thrift。 hostname - 绑定的主机名/IP。 port - 监测端口,该端口需未被占用。 batch-size 1000 批次发送的Event个数。 connect-timeout 20000 第一次连接的超时时间,单位:毫秒。 request-timeout 20000 第一次请求后一次请求的最大超时时间,单位:毫秒。 kerberos false 是否启用Kerberos认证。 client-keytab - 客户端使用的keytab文件地址,flume运行用户必须对认证文件具有访问权限。 client-principal - 客户端使用的安全用户的Principal。 server-principal - 服务端使用的安全用户的Principal。 compression-type none Flume发送数据的压缩类型,“none”或“deflate”,“none”表示不压缩,“deflate”表示压缩。 maxConnections 5 Flume发送数据时的最大连接池大小。 ssl false 是否使用SSL加密。 truststore-type JKS Java信任库类型。 truststore - Java信任库文件。 truststore-password - Java信任库密码。 reset-connection-interval 0 一次断开连接后,等待多少时间后进行重新连接,单位:秒。默认为0表示不断尝试。
  • 常用Channel配置 Memory Channel Memory Channel使用内存作为缓存区,Events存放在内存队列中。常用配置如下表所示: 表6 Memory Channel常用配置 参数 默认值 描述 type - memory channel的类型,必须设置为memory。 capacity 10000 缓存在channel中的最大Event数。 transactionCapacity 1000 每次存取的最大Event数。 说明: 此参数值需要大于source和sink的batchSize。 事务缓存容量必须小于或等于Channel缓存容量。 channelfullcount 10 channel full次数,达到该次数后发送告警。 keep-alive 3 当事务缓存或Channel缓存满时,Put、Take线程等待时间。单位:秒。 byteCapacity JVM最大内存的80% channel中最多能容纳所有event body的总字节数,默认是 JVM最大可用内存(-Xmx )的80%,单位:bytes。 byteCapacityBufferPercentage 20 channel中字节容量百分比(%)。 File Channel File Channel使用本地磁盘作为缓存区,Events存放在设置的dataDirs配置项文件夹中。常用配置如下表所示: 表7 File Channel常用配置 参数 默认值 描述 type - file channel的类型,必须设置为file。 checkpointDir ${BIGDATA_DATA_HOME}/hadoop/data1~N/flume/checkpoint 说明: 此路径随自定义数据路径变更。 检查点存放路径。 dataDirs ${BIGDATA_DATA_HOME}/hadoop/data1~N/flume/data 说明: 此路径随自定义数据路径变更。 数据缓存路径,设置多个路径可提升性能,中间用逗号分开。 maxFileSize 2146435071 单个缓存文件的最大值,单位:bytes。 minimumRequiredSpace 524288000 缓冲区空闲空间最小值,单位:bytes。 capacity 1000000 缓存在channel中的最大Event数。 transactionCapacity 10000 每次存取的最大Event数。 说明: 此参数值需要大于source和sink的batchSize。 事务缓存容量必须小于或等于Channel缓存容量。 channelfullcount 10 channel full次数,达到该次数后发送告警。 useDualCheckpoints false 是否备份检查点。设置为“true”时,必须设置backupCheckpointDir的参数值。 backupCheckpointDir - 备份检查点路径。 checkpointInterval 30000 检查点间隔时间,单位:秒。 keep-alive 3 当事务缓存或Channel缓存满时,Put、Take线程等待时间。单位:秒。 use-log-replay-v1 false 是否启用旧的回复逻辑。 use-fast-replay false 是否使用队列回复。 checkpointOnClose true channel关闭时是否创建检查点。 Memory File Channel Memory File Channel同时使用内存和本地磁盘作为缓存区,消息可持久化,性能优于File Channel,接近Memory Channel的性能。此Channel目前处于试验阶段,可靠性不够高,不建议在生产环境使用。常用配置如下表所示: 表8 Memory File Channel常用配置 参数 默认值 描述 type org.apache.flume.channel.MemoryFileChannel memory file channel的类型,必须设置为“org.apache.flume.channel.MemoryFileChannel”。 capacity 50000 Channel缓存容量:缓存在Channel中的最大Event数。 transactionCapacity 5000 事务缓存容量:一次事务能处理的最大Event数。 说明: 此参数值需要大于source和sink的batchSize。 事务缓存容量必须小于或等于Channel缓存容量。 subqueueByteCapacity 20971520 每个subqueue最多保存多少byte的Event,单位:byte。 Memory File Channel采用queue和subqueue两级缓存,event保存在subqueue,subqueue保存在queue。 subqueue能保存多少event,由“subqueueCapacity”和“subqueueInterval”两个参数决定,“subqueueCapacity”限制subqueue内的Event总容量,“subqueueInterval”限制subqueue保存Event的时长,只有subqueue达到“subqueueCapacity”或“subqueueInterval”上限时,subqueue内的Event才会发往目的地。 说明: “subqueueByteCapacity”必须大于一个batchsize内的Event总容量。 subqueueInterval 2000 每个subqueue最多保存一段多长时间的Event,单位:毫秒。 keep-alive 3 当事务缓存或Channel缓存满时,Put、Take线程等待时间。 单位:秒。 dataDir - 缓存本地文件存储目录。 byteCapacity JVM最大内存的80% Channel缓存容量。 单位:bytes。 compression-type None 消息压缩格式:“none”或“deflate”。“none”表示不压缩,“deflate”表示压缩。 channelfullcount 10 channel full次数,达到该次数后发送告警。 Memory File Channel配置样例: server.channels.c1.type = org.apache.flume.channel.MemoryFileChannel server.channels.c1.dataDir = /opt/flume/mfdata server.channels.c1.subqueueByteCapacity = 20971520 server.channels.c1.subqueueInterval=2000 server.channels.c1.capacity = 500000 server.channels.c1.transactionCapacity = 40000 Kafka Channel Kafka Channel使用Kafka集群缓存数据,Kafka提供高可用、多副本,以防Flume或Kafka Broker崩溃,Channel中的数据会立即被Sink消费。 表9 Kafka channel 常用配置 Parameter Default Value Description type - kafka channel的类型,必须设置为 “org.apache.flume.channel.kafka.KafkaChannel”。 kafka.bootstrap.servers - Kafka的bootstrap地址端口列表。 如果集群已安装Kafka并且配置已经同步,则服务端可以不配置此项,默认值为Kafka集群中所有的broker列表。客户端必须配置该项,多个值用逗号分隔。端口和安全协议的匹配规则必须为:21007匹配安全模式(SASL_PLAINTEXT),9092匹配普通模式(PLAINTEXT)。 kafka.topic flume-channel channel用来缓存数据的topic。 kafka.consumer.group.id flume 从kafka中获取数据的组标识,此参数不能为空。 parseAsFlumeEvent true 是否解析为Flume event。 migrateZookeeperOffsets true 当Kafka没有存储offset时,是否从ZooKeeper中查找,并提交到Kafka。 kafka.consumer.auto.offset.reset latest 当没有offset记录时从什么位置消费,可选为“earliest”、“latest”或“none”。“earliest”表示将offset重置为初始点,“latest”表示将offset置为最新位置点,“none”表示若没有offset则发生异常。 kafka.producer.security.protocol SASL_PLAINTEXT Kafka生产安全协议。端口和安全协议的匹配规则必须为:21007匹配安全模式(SASL_PLAINTEXT),9092匹配普通模式(PLAINTEXT)。 说明: 若该参数没有显示,请单击弹窗左下角的"+"显示全部参数。 kafka.consumer.security.protocol SASL_PLAINTEXT 同上,但用于消费。端口和安全协议的匹配规则必须为:21007匹配安全模式(SASL_PLAINTEXT),9092匹配普通模式(PLAINTEXT)。 pollTimeout 500 consumer调用poll()函数能接受的最大超时时间,单位:毫秒。 ignoreLongMessage false 是否丢弃超大消息。 messageMaxLength 1000012 Flume写入Kafka的消息的最大长度。
  • 操作步骤 创建工作流,请参考使用Hue创建工作流。 在工作流编辑页面,选择“Shell”按钮,将其拖到操作区中。 在弹出的“Shell”窗口中配置“Shell command”的值,例如“oozie_shell.sh”,然后单击“添加”。 单击“文件+”,添加Shell命令执行文件或Oozie样例执行文件,可以选择存储在HDFS的文件或本地文件。 若文件存储在HDFS上,选择“.sh”文件所在路径即可,例如“user/hueuser/shell/oozie_shell.sh”。 若选择本地文件,则需在“选择文件”界面,单击“上传文件”,上传本地文件,文件上传成功后,选择该文件即可。 如果执行的Shell文件需要传递参数,可单击“参数+”设置参数。 传递参数的顺序需要和Shell脚本中保持一致。 单击Oozie编辑器右上角的。 保存前如果需要修改作业名称(默认为“My Workflow”),可以直接单击该名称进行修改,例如“Shell-Workflow”。 保存完成后,单击,提交该作业。 作业提交后,可通过Hue界面查看作业的详细信息、日志、进度等相关内容。 配置Shell命令为Linux指令时,请指定为原始指令,不要使用快捷键指令。例如:ls -l ,不要配置成ll。可配置成Shell命令ls ,参数添加一个 “-l”。 Windows上传Shell脚本到HDFS时,请保证Shell脚本的格式为Unix,格式不正确会导致Shell作业提交失败。
  • 操作步骤 进入Flume客户端日志目录,默认为“/var/log/Bigdata”。 执行如下命令查看日志文件列表。 ls -lR flume-client-* 日志文件示例如下: flume-client-1/flume: total 7672 -rw-------. 1 root root 0 Sep 8 19:43 Flume-audit.log -rw-------. 1 root root 1562037 Sep 11 06:05 FlumeClient.2017-09-11_04-05-09.[1].log.zip -rw-------. 1 root root 6127274 Sep 11 14:47 FlumeClient.log -rw-------. 1 root root 2935 Sep 8 22:20 flume-root-20170908202009-pid72456-gc.log.0.current -rw-------. 1 root root 2935 Sep 8 22:27 flume-root-20170908202634-pid78789-gc.log.0.current -rw-------. 1 root root 4382 Sep 8 22:47 flume-root-20170908203137-pid84925-gc.log.0.current -rw-------. 1 root root 4390 Sep 8 23:46 flume-root-20170908204918-pid103920-gc.log.0.current -rw-------. 1 root root 3196 Sep 9 10:12 flume-root-20170908215351-pid44372-gc.log.0.current -rw-------. 1 root root 2935 Sep 9 10:13 flume-root-20170909101233-pid55119-gc.log.0.current -rw-------. 1 root root 6441 Sep 9 11:10 flume-root-20170909101631-pid59301-gc.log.0.current -rw-------. 1 root root 0 Sep 9 11:10 flume-root-20170909111009-pid119477-gc.log.0.current -rw-------. 1 root root 92896 Sep 11 13:24 flume-root-20170909111126-pid120689-gc.log.0.current -rw-------. 1 root root 5588 Sep 11 14:46 flume-root-20170911132445-pid42259-gc.log.0.current -rw-------. 1 root root 2576 Sep 11 13:24 prestartDetail.log -rw-------. 1 root root 3303 Sep 11 13:24 startDetail.log -rw-------. 1 root root 1253 Sep 11 13:24 stopDetail.log flume-client-1/monitor: total 8 -rw-------. 1 root root 141 Sep 8 19:43 flumeMonitorChecker.log -rw-------. 1 root root 2946 Sep 11 13:24 flumeMonitor.log 其中FlumeClient.log即为Flume客户端的运行日志。
  • 配置描述 在Spark Driver端的“spark-defaults.conf”配置文件中添加如下表格中的参数。 表1 参数说明 参数 描述 默认值 spark.sql.adaptive.enabled 自适应执行特性的总开关。 注意:AQE特性与DPP(动态分区裁剪)特性同时开启时,SparkSQL任务执行中会优先执行DPP特性,从而使得AQE特性不生效。集群中DPP特性是默认开启的,因此开启AQE特性的同时,需要将DPP特性关闭。 false spark.sql.optimizer.dynamicPartitionPruning.enabled 动态分区裁剪功能的开关。 true spark.sql.adaptive.skewJoin.enabled 当此配置为true且spark.sql.adaptive.enabled设置为true时,启用运行时自动处理join运算中的数据倾斜功能。 true spark.sql.adaptive.skewJoin.skewedPartitionFactor 此配置为一个倍数因子,用于判定分区是否为数据倾斜分区。单个分区被判定为数据倾斜分区的条件为:当一个分区的数据大小超过除此分区外其他所有分区大小的中值与该配置的乘积,并且大小超过spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes配置值时,此分区被判定为数据倾斜分区 5 spark.sql.adaptive.skewjoin.skewedPartitionThresholdInBytes 分区大小(单位:字节)大于该阈值且大于spark.sql.adaptive.skewJoin.skewedPartitionFactor与分区中值的乘积,则认为该分区存在倾斜。理想情况下,此配置应大于spark.sql.adaptive.advisoryPartitionSizeInBytes. 256MB spark.sql.adaptive.shuffle.targetPostShuffleInputSize 每个task处理的shuffle数据的最小数据量。单位:Byte。 67108864
  • 配置场景 在Spark SQL多表Join的场景下,会存在关联键严重倾斜的情况,导致Hash分桶后,部分桶中的数据远高于其它分桶。最终导致部分Task过重,跑得很慢;其它Task过轻,跑得很快。一方面,数据量大Task运行慢,使得计算性能低;另一方面,数据量少的Task在运行完成后,导致很多CPU空闲,造成CPU资源浪费。 通过如下配置项可开启自动进行数据倾斜处理功能,通过将Hash分桶后数据量很大的、且超过数据倾斜阈值的分桶拆散,变成多个task处理一个桶的数据机制,提高CPU资源利用率,提高系统性能。 未产生倾斜的数据,将采用原有方式进行分桶并运行。 使用约束: 只支持两表Join的场景。 不支持FULL OUTER JOIN的数据倾斜处理。 示例:执行下面SQL语句,a表倾斜或b表倾斜都无法触发该优化。 select aid FROM a FULL OUTER JOIN b ON aid=bid; 不支持LEFT OUTER JOIN的右表倾斜处理。 示例:执行下面SQL语句,b表倾斜无法触发该优化。 select aid FROM a LEFT OUTER JOIN b ON aid=bid; 不支持RIGHT OUTER JOIN的左表倾斜处理。 示例:执行下面SQL语句,a表倾斜无法触发该优化。 select aid FROM a RIGHT OUTER JOIN b ON aid=bid;
  • 回答 在Spark配置中,“spark.yarn.executor.memoryOverhead”参数的值应大于CarbonData配置参数“sort.inmemory.size.inmb” 与“Netty offheapmemory required”参数值的总和,或者“carbon.unsafe.working.memory.in.mb” 、 “carbon.sort.inememory.storage.size.in.mb” 与 “Netty offheapmemory required”参数值的总和。否则,如果堆外(off heap)访问超出配置的executor内存,则YARN可能会停止executor。 “Netty offheapmemory required”说明:当“spark.shuffle.io.preferDirectBufs”设为true时,Spark中netty 传输服务从"spark.yarn.executor.memoryOverhead"中拿掉部分堆内存[~ 384 MB or 0.1 x 执行器内存]。 详细信息请参考常见配置Spark Executor堆内存参数。
  • 操作步骤 访问Hue WebUI,请参考访问Hue WebUI界面。 在左侧导航栏单击编辑器,然后选择“Hive”。 在“Database”右侧下拉列表选择一个Hive中的数据库,默认数据库为“default”。 系统将自动显示数据库中的所有表。可以输入表名关键字,系统会自动搜索包含此关键字的全部表。 单击指定的表名,可以显示表中所有的列。 在HiveQL语句编辑区输入HiveQL语句。 create table hue_table(id int,name string,company string) row format delimited fields terminated by ',' stored as textfile; 单击 开始执行HiveQL语句。 图1 执行语句 在命令输入框内输入show tables;,单击按钮,查看“结果”中有5创建的表hue_table。
  • 使用自定义列创建表 可通过指定各列及其数据类型来创建表。 命令示例: 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格式化命令查看表数据大小和表索引大小。
  • 操作步骤 配置JobManager内存。 JobManager负责任务的调度,以及TaskManager、RM之间的消息通信。当任务数变多,任务平行度增大时,JobManager内存都需要相应增大。 您可以根据实际任务数量的多少,为JobManager设置一个合适的内存。 在使用yarn-session命令时,添加“-jm MEM”参数设置内存。 在使用yarn-cluster命令时,添加“-yjm MEM”参数设置内存。 配置TaskManager个数。 每个TaskManager每个核同时能跑一个task,所以增加了TaskManager的个数相当于增大了任务的并发度。在资源充足的情况下,可以相应增加TaskManager的个数,以提高运行效率。 配置TaskManager Slot数。 每个TaskManager多个核同时能跑多个task,相当于增大了任务的并发度。但是由于所有核共用TaskManager的内存,所以要在内存和核数之间做好平衡。 在使用yarn-session命令时,添加“-s NUM”参数设置SLOT数。 在使用yarn-cluster命令时,添加“-ys NUM”参数设置SLOT数。 配置TaskManager内存。 TaskManager的内存主要用于任务执行、通信等。当一个任务很大的时候,可能需要较多资源,因而内存也可以做相应的增加。 将在使用yarn-session命令时,添加“-tm MEM”参数设置内存。 将在使用yarn-cluster命令时,添加“-ytm MEM”参数设置内存。
共100000条