华为云用户手册
-
操作步骤 配置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”参数设置内存。
-
示例 data.csv源文件数据如下所示: ID,date,country,name,phonetype,serialname,salary4,2014-01-21 00:00:00,xxx,aaa4,phone2435,ASD66902,150035,2014-01-22 00:00:00,xxx,aaa5,phone2441,ASD90633,150046,2014-03-07 00:00:00,xxx,aaa6,phone294,ASD59961,15005 CREATE TABLE carbontable(ID int, date Timestamp, country String, name String, phonetype String, serialname String,salary int) STORED AS carbondata; LOAD DATA inpath 'hdfs://hacluster/tmp/data.csv' INTO table carbontable options('DELIMITER'=',');
-
注意事项 以下是可以在加载数据时使用的配置选项: DELIMITER:可以在加载命令中提供分隔符和引号字符。默认值为,。 OPTIONS('DELIMITER'=',' , 'QUOTECHAR'='"') 可使用'DELIMITER'='\t'来表示用制表符tab对 CS V数据进行分隔。 OPTIONS('DELIMITER'='\t') CarbonData也支持\001和\017作为分隔符。 对于CSV数据,分隔符为单引号(')时,单引号必须在双引号(" ")内。例如:'DELIMITER'= "'"。 QUOTECHAR:可以在加载命令中提供分隔符和引号字符。默认值为"。 OPTIONS('DELIMITER'=',' , 'QUOTECHAR'='"') COMMENTCHAR:可以在加载命令中提供注释字符。在加载操作期间,如果在行的开头遇到注释字符,那么该行将被视为注释,并且不会被加载。默认值为#。 OPTIONS('COMMENTCHAR'='#') FILEHEADER:如果源文件中没有表头,可在LOAD DATA命令中提供表头。 OPTIONS('FILEHEADER'='column1,column2') ESCAPECHAR:如果用户想在CSV上对Escape字符进行严格验证,可以提供Escape字符。默认值为\。 OPTIONS('ESCAPECHAR'='\') 如果在CSV数据中输入ESCAPECHAR,该ESCAPECHAR必须在双引号(" ")内。例如:"a\b"。 Bad Records处理: 为了使数据处理应用程序为用户增值,不可避免地需要对数据进行某种程度的集成。在大多数情况下,数据质量问题源于生成源数据的上游(主要)系统。 有两种完全不同的方式处理Bad Data: 按照原始数据加载所有数据,之后进行除错处理。 在进入数据源的过程中,可以清理或擦除Bad Data,或者在发现Bad Data时让数据加载失败。 有多个选项可用于在CarbonData数据加载过程中清除源数据。对于CarbonData数据中的Bad Records管理,请参见表2。 表2 Bad Records Logger 配置项 默认值 描述 BAD_RECORDS_ LOG GER_ENABLE false 如果设置为true,则将创建Bad Records日志文件,其中包含Bad Records的详细信息。 BAD_RECORDS_ACTION FAIL 以下为Bad Records的四种操作类型: FORCE:通过将Bad Records存储为NULL来自动校正数据。 REDIRECT:无法加载Bad Records,并将其写入BAD_RECORD_PATH下的CSV文件中,默认不开启该类型,如需使用该类型,需要设置参数carbon.enable.badrecord.action.redirect为true。 IGNORE:既不加载Bad Records也不将其写入CSV文件。 FAIL:如果发现存在Bad Records,数据加载将会失败。 说明: 在加载数据时,如果所有记录都是Bad Records,则参数BAD_RECORDS_ACTION将不起作用,加载数据操作将会失败。 IS_EMPTY_DATA_BAD_RECORD false 如果设置为“false”,则空(""或''或,,)数据将不被视为Bad Records,如果设置为“true”,则空数据将被视为Bad Records。 BAD_RECORD_PATH - 指定存储Bad Records的HDFS路径。默认值为Null。 如果启用了Bad Records日志记录或者Bad Records操作重定向,则该路径必须由用户进行配置。 示例: LOAD DATA INPATH 'filepath.csv' INTO TABLE tablename OPTIONS('BAD_RECORDS_LOGGER_ENABLE'='true', 'BAD_RECORD_PATH'='hdfs://hacluster/tmp/carbon', 'BAD_RECORDS_ACTION'='REDIRECT', 'IS_EMPTY_DATA_BAD_RECORD'='false'); 使用“REDIRECT”选项,CarbonData会将所有的Bad Records添加到单独的CSV文件中,但是该文件内容不能用于后续的数据加载,因为其内容可能无法与源记录完全匹配。用户必须清理原始源记录以便于进一步的数据提取。该选项的目的只是让用户知道哪些记录被视为Bad Records。 MAXCOLUMNS:该可选参数指定了在一行中,由CSV解析器解析的最大列数。 OPTIONS('MAXCOLUMNS'='400') 表3 MAXCOLUMNS 可选参数名称 默认值 最大值 MAXCOLUMNS 2000 20000 表4 MAXCOLUMNS可选参数的行为图 MAXCOLUMNS值 在文件Header选项中的列数 考虑的最终值 在加载项中未指定 5 2000 在加载项中未指定 6000 6000 40 7 文件header列数与MAXCOLUMNS值,两者中的最大值 22000 40 20000 60 在加载项中未指定 CSV文件第一行的列数与MAXCOLUMNS值,两者中的最大值 对于设置MAXCOLUMNS Option的最大值,要求executor具有足够的内存,否则,数据加载会由于内存不足的错误而失败。
-
前提条件 创建或获取该任务中创建Loader作业的业务用户和密码。 确保用户已授权访问作业中指定的Hive表的权限。 获取SFTP服务器使用的用户和密码,且该用户具备SFTP服务器上源文件的读取权限。如果源文件在导入后文件名要增加后缀,则该用户还需具备源文件的写入权限。 检查磁盘空间,确保没有出现告警且余量满足导入、导出数据的大小。 使用Loader从SFTP服务器导入数据时,确保SFTP服务器输入路径目录名、输入路径的子目录名及子文件名不能包含特殊字符/\"':;,中的任意字符。 如果设置的作业需要使用指定YARN队列功能,该用户需要已授权有相关YARN队列的权限。 设置任务的用户需要获取该任务的执行权限,并获取该任务对应的连接的使用权限。
-
操作场景 本章节根据超过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
-
参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 被截取的字段 配置被截取字段相关信息: 输入字段名:配置输入字段名,需填写上一个转换步骤生成的字段名。 输出字段名:配置输出字段名。 开始位置:截取开始位置,从序号1开始。 结束位置:截取结束位置,不确定字符串长度时,可指定为-1表示被截取字段的末尾。 输出字段类型:输出字段的类型。 输出字段长度:配置字段长度,字段值实际长度太长则按配置的长度截取,“输出字段类型”为“CHAR”时实际长度不足则空格补齐,“输出字段类型”为“VARCHAR”时实际长度不足则不补齐。 map 是 无
-
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算子帮助
-
日志级别 Loader中提供了如表2所示的日志级别,日志级别优先级从高到低分别是ERROR、WARN、INFO、DEBUG,程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。 表2 日志级别 级别 描述 ERROR ERROR表示错误日志输出。 WARN WARN表示当前事件处理存在异常信息。 INFO INFO表示系统及各事件正常运行状态信息。 DEBUG DEBUG表示系统及系统调试信息。 如果您需要修改日志级别,请执行如下操作: 请参考修改集群服务配置参数,进入Loader的“全部配置”页面。 左边菜单栏中选择所需修改的角色所对应的日志菜单。 选择所需修改的日志级别。 保存配置,在弹出窗口中单击“确定”,完成后重启服务使配置生效。
-
操作步骤 用于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,那么CSV文件读取性能可以增加大约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。
-
参数描述 表1 ALTER TABLE COMPACTION参数描述 Parameter Description db_name 数据库名。如果未指定,则选择当前数据库。 table_name 表名。 MINOR Minor合并,详见合并Segments。 MAJOR Major合并,详见合并Segments。 SEGMENT_INDEX 这会将一个segment内的所有Carbon索引文件(.carbonindex)合并为一个Carbon索引合并文件(.carbonindexmerge)。 这增强了首次查询性能。详见表1。 CUSTOM Custom合并,详见合并Segments。
-
示例 ALTER TABLE ProductDatabase COMPACT 'MINOR'; ALTER TABLE ProductDatabase COMPACT 'MAJOR'; ALTER TABLE ProductDatabase COMPACT 'SEGMENT_INDEX'; ALTER TABLE ProductDatabase COMPACT 'CUSTOM' WHERE SEGMENT.ID IN (0, 1);
-
系统响应 由于为后台运行,ALTER TABLE COMPACTION命令不会显示压缩响应。 如果想要查看MINOR合并和MAJOR合并的响应结果,用户可以检查日志或运行SHOW SEGMENTS命令查看。 示例: +------+------------+--------------------------+------------------+------------+------------+-------------+--------------+--+| 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 || 1 | Compacted | 2020-09-28 22:51:15.242 | 5.82S | {} | 6.50KB | 3.43KB | columnar_v3 || 0.1 | Success | 2020-10-30 20:49:24.561 | 16.66S | {} | 12.87KB | 6.91KB | columnar_v3 || 0 | Compacted | 2020-09-28 22:51:02.6 | 6.819S | {} | 6.50KB | 3.43KB | columnar_v3 |+------+------------+--------------------------+------------------+------------+------------+-------------+--------------+--+ 其中, Compacted表示该数据已被合并。 0.1表示segment0与segment1合并之后的结果。 数据合并前后的其他操作没有差别。 被合并的segments(例如segment0和segment1)即成为无用的segments,会占用空间,因此建议合并之后使用CLEAN FILES命令进行彻底删除,再进行其他操作。CLEAN FILES命令的使用方法可参考CLEAN FILES。
-
回答 在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堆内存参数。
-
系统响应 +-----+----------+--------------------------+------------------+------------+------------+-------------+--------------+--+| 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 |+-----+----------+--------------------------+------------------+------------+------------+-------------+--------------+--+
-
示例 create table carbon01(a int,b string,c string) stored as carbondata; insert into table carbon01 select 1,'a','aa'; insert into table carbon01 select 2,'b','bb'; insert into table carbon01 select 3,'c','cc'; SHOW SEGMENTS FOR TABLE carbon01 LIMIT 2;
-
样例 以HBase导出到sqlserver2014数据库为例。 在sqlserver2014上创建一张空表test_1用于存储HBase数据。执行以下语句: create table test_1 (id int, name text, value text); 配置“HBase输入”算子,生成三个字段A、B和C: 设置了数据连接器后,可以单击“自动识别”,系统将自动读取数据库中的字段,可根据需要选择添加,然后根据业务场景手动进行完善或者修正即可,无需逐一手动添加。 此操作会覆盖表格内已有数据。 通过“表输出”算子,将A、B和C输出到test_1表中: select * from test_1;
-
参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 HBase表类型 配置HBase表类型,可选项为normal(普通表)和phoenix表。 enum 是 normal HBase表名 配置HBase表名。仅支持一个HBase表。 string 是 无 HBase输入字段 配置HBase输入信息: 列族:配置HBase列族名。 列名:配置HBase列名。 字段名:配置输入字段名。 类型:配置字段类型。 长度:配置字段长度,字段值实际长度太长则按配置的长度截取,“类型”为“CHAR”时实际长度不足则空格补齐,“类型”为“VARCHAR”时实际长度不足则不补齐。 主键:配置是否为主键列。普通HBase表主键只能指定一个;phoenix表主键可以指定多个,配置多个列为主键时,会按照配置列的先后顺序对其进行拼接。必须配置一个主键列。 map 是 无
-
参数说明 表1 算子参数说明 参数 含义 类型 是否必填 默认值 输出分隔符 配置分隔符。 string 是 无 换行符 用户根据数据实际情况,填写字符串作为换行符。支持任何字符串。默认使用操作系统的换行符。 string 否 \n 输出字段 配置输出信息: 位置:配置输出字段的位置。 字段名:配置输出字段的字段名。 类型:配置字段类型,字段类型为“DATE”或“TIME”或“TimeStamp”时,需指定特定时间格式,其他类型指定无效。时间格式如:“yyyyMMdd HH:mm:ss”。 长度:配置字段长度,字段值实际长度太长则按配置的长度截取,“类型”为“CHAR”时实际长度不足则空格补齐,“类型”为“VARCHAR”时实际长度不足则不补齐。 map 否 无
-
空间索引介绍 空间数据包括多维点、线、矩形、立方体、多边形和其他几何对象。空间数据对象占据空间的某一区域,称为空间范围,通过其位置和边界描述。空间数据可以是点数据,也可以是区域数据。 点数据:一个点具有一个空间范围,仅通过其位置描述。它不占用空间,没有相关的边界。点数据由二维空间中的点的集合组成。点可以存储为一对经纬度。 区域数据:一个区域有空间范围,有位置和边界。位置可以看作是一个定点在区域内的位置,例如它的质心。在二维中,边界可以可视化为一条线(有限区域,闭环)。区域数据包含一系列区域。 目前仅限于支持点数据,存储点数据。 经纬度可以编码为唯一的GeoID。Geohash是Gustavo Niemeyer发明的公共域地理编码系统,它将地理位置编码为一串由字母和数字组成的短字符串。它是一种分层的空间数据结构,把空间细分为网格形状的桶,是被称为Z阶曲线和通常称为空间填充曲线的许多应用之一。 点在多维中的Z值是简单地通过交织其坐标值的二进制表示来计算的,如下图所示。使用Geohash创建GeoID时,数据按照GeoID排序,而不是按照经纬度排序,数据按照空间就近性排序存储。
-
建表 GeoHash编码: create table IF NOT EXISTS carbonTable(...`LONGITUDE` BIGINT,`LATITUDE` BIGINT,...)STORED AS carbondataTBLPROPERTIES ('SPATIAL_INDEX.mygeohash.type'='geohash','SPATIAL_INDEX.mygeohash.sourcecolumns'='longitude, latitude','SPATIAL_INDEX.mygeohash.originLatitude'='xx.xxxxxx','SPATIAL_INDEX.mygeohash.gridSize'='xx','SPATIAL_INDEX.mygeohash.minLongitude'='xxx.xxxxxx','SPATIAL_INDEX.mygeohash.maxLongitude'='xxx.xxxxxx','SPATIAL_INDEX.mygeohash.minLatitude'='xx.xxxxxx','SPATIAL_INDEX.mygeohash.maxLatitude'='xxx.xxxxxx','SPATIAL_INDEX'='mygeohash','SPATIAL_INDEX.mygeohash.conversionRatio'='1000000','SORT_COLUMNS'='column1,column2,column3,latitude,longitude'); SPATIAL_INDEX:自定义索引处理器。此处理程序允许用户从表结构列集合中创建新的列。新创建的列名与处理程序名相同。处理程序的type和sourcecolumns属性是必须的属性。目前,type属性只支持“geohash”。Carbon提供一个简单的默认实现类。用户可以通过扩展默认实现类来挂载geohash的自定义实现类。该默认处理程序还需提供以下的表属性: SPATIAL_INDEX.xxx.originLatitude:Double类型,坐标原点纬度 SPATIAL_INDEX.xxx.gridSize:Int类型,栅格长度(米) SPATIAL_INDEX.xxx.minLongitude:Double类型,最小经度 SPATIAL_INDEX.xxx.maxLongitude:Double类型,最大经度 SPATIAL_INDEX.xxx.minLatitude:Double类型,最小纬度 SPATIAL_INDEX.xxx.maxLatitude:Double类型,最大纬度 SPATIAL_INDEX.xxx.conversionRatio:Int类型,将经纬度小数值转换为整型值 用户可以按照上述格式为处理程序添加自己的表属性,并在自定义实现类中访问它们。originLatitude,gridSize及conversionRatio是必选参数,其余属性在Carbon中都是可选的。可以使用“SPATIAL_INDEX.xxx.class”属性指定它们的实现类。 默认实现类可以为每一行的sourcecolumns生成handler列值,并且支持基于sourcecolumns的过滤条件查询。生成的handler列对用户不可见。除SORT_COLUMNS表属性外,任何DDL命令和属性都不允许包含handler列。 生成的handler列默认被视为排序列。如果SORT_COLUMNS不包含任何sourcecolumns,则将handler列追加到现有的SORT_COLUMNS最后。如果在SORT_COLUMNS中已经指定了该handler列,则它在SORT_COLUMNS的顺序将保持不变。 如果SORT_COLUMNS包含任意的sourcecolumns,但是没有包含handler列,则handler列将自动插入到SORT_COLUMNS中的sourcecolumns之前。 如果SORT_COLUMNS需要包含任意的sourcecolumns,那么需要保证handler列出现在sourcecolumns之前,这样handler列才能在排序中生效。
-
准备数据 准备数据文件1:geosotdata.csv timevalue,longitude,latitude1575428400000,116.285807,40.0840871575428400000,116.372142,40.1295031575428400000,116.187332,39.9793161575428400000,116.337069,39.9518871575428400000,116.359102,40.1546841575428400000,116.736367,39.9703231575428400000,116.720179,40.0098931575428400000,116.346961,40.133551575428400000,116.302895,39.9307531575428400000,116.288955,39.9991011575428400000,116.17609,40.1299531575428400000,116.725575,39.9811151575428400000,116.266922,40.1794151575428400000,116.353706,40.1564831575428400000,116.362699,39.9424441575428400000,116.325378,39.963129 准备数据文件2:geosotdata2.csv timevalue,longitude,latitude1575428400000,120.17708,30.3268821575428400000,120.180685,30.3263271575428400000,120.184976,30.3271051575428400000,120.189311,30.3275491575428400000,120.19446,30.3296981575428400000,120.186965,30.3291331575428400000,120.177481,30.3289111575428400000,120.169713,30.3256141575428400000,120.164563,30.3222431575428400000,120.171558,30.3196131575428400000,120.176365,30.3206871575428400000,120.179669,30.3236881575428400000,120.181001,30.3207611575428400000,120.187094,30.323541575428400000,120.193574,30.3236511575428400000,120.186192,30.3201321575428400000,120.190055,30.3174641575428400000,120.195376,30.3180941575428400000,120.160786,30.3170941575428400000,120.168211,30.3180571575428400000,120.173618,30.3166121575428400000,120.181001,30.3173161575428400000,120.185162,30.3159081575428400000,120.192415,30.3158711575428400000,120.161902,30.3256141575428400000,120.164306,30.3280961575428400000,120.197093,30.3259851575428400000,120.19602,30.3216511575428400000,120.198638,30.323541575428400000,120.165421,30.314834
-
不规则空间集合的聚合查询 查询语句及Filter UDF 根据polygon过滤数据 IN_POLYGON(pointList) UDF输入参数: 参数 类型 说明 pointList String 将多个点输入为一个字符串,每个点以longitude latitude表示。经纬度间用空格分隔,每对经纬度用逗号分隔,字符串首尾经纬度一致。 UDF输出参数: 参数 类型 说明 inOrNot Boolean 判断数据是否在指定的polygon_list之内。 使用示例: select longitude, latitude from geosot where IN_POLYGON('116.321011 40.123503, 116.137676 39.947911, 116.560993 39.935276, 116.321011 40.123503'); 根据polygon列表过滤数据。 IN_POLYGON_LIST(polygonList, opType) UDF输入参数: 参数 类型 说明 polygonList String 将多个polygon输入为一个字符串,每个polygon以POLYGON ((longitude1 latitude1, longitude2 latitude2, …))表示。注意“POLYGON”后有空格,经纬度间用空格分隔,每对经纬度用逗号分隔,一个polygon的首尾经纬度一致。IN_POLYGON_LIST必须输入2个以上polygon。 一个polygon示例: POLYGON ((116.137676 40.163503, 116.137676 39.935276, 116.560993 39.935276, 116.137676 40.163503)) opType String 对多个polygon进行并交差操作。 目前支持的操作类型: OR:A U B U C (假设输入了三个POLYGON,A、B、C) AND:A ∩ B ∩ C UDF输出参数: 参数 类型 说明 inOrNot Boolean 判断数据是否在指定的polygon_list之内。 使用示例: select longitude, latitude from geosot where IN_POLYGON_LIST('POLYGON ((120.176433 30.327431,120.171283 30.322245,120.181411 30.314540, 120.190509 30.321653,120.185188 30.329358,120.176433 30.327431)), POLYGON ((120.191603 30.328946,120.184179 30.327465,120.181819 30.321464, 120.190359 30.315388,120.199242 30.324464,120.191603 30.328946))', 'OR'); 根据polyline列表过滤数据。 IN_POLYLINE_LIST(polylineList, bufferInMeter) UDF输入参数: 参数 类型 说明 polylineList String 将多个polyline输入为一个字符串,每个polyline以LINESTRING (longitude1 latitude1, longitude2 latitude2, …)表示。注意“LINESTRING”后有空格,经纬度间用空格分隔,每组经纬度用逗号分隔。 对多个polyline区域内的数据会输出并集结果。 一个polyline示例: LINESTRING (116.137676 40.163503, 116.137676 39.935276, 116.260993 39.935276) bufferInMeter Float polyline的buffer距离,单位为米。末端使用直角创建缓冲区。 UDF输出参数: 参数 类型 说明 inOrNot Boolean 判断数据是否在指定的polyline_list之内。 使用示例: select longitude, latitude from geosot where IN_POLYLINE_LIST('LINESTRING (120.184179 30.327465, 120.191603 30.328946, 120.199242 30.324464, 120.190359 30.315388)', 65); 根据GeoId区间列表过滤数据。 IN_POLYGON_RANGE_LIST(polygonRangeList, opType) UDF输入参数: 参数 类型 说明 polygonRangeList String 将多个rangeList输入为一个字符串,每个rangeList以RANGELIST (startGeoId1 endGeoId1, startGeoId2 endGeoId2, …)表示。注意“RANGELIST”后有空格,首尾GeoId间用空格分隔,每组GeoId range用逗号分隔。 一个rangeList示例: RANGELIST (855279368848 855279368850, 855280799610 855280799612, 855282156300 855282157400) opType String 对多个rangeList进行并交差操作。 目前支持的操作类型: OR:A U B U C (假设输入了三个RANGELIST,A、B、C) AND:A ∩ B ∩ C UDF输出参数: 参数 类型 说明 inOrNot Boolean 判断数据是否在指定的polyRange_list之内。 使用示例: select mygeosot, longitude, latitude from geosot where IN_POLYGON_RANGE_LIST('RANGELIST (526549722865860608 526549722865860618, 532555655580483584 532555655580483594)', 'OR'); polygon连接查询 IN_POLYGON_JOIN(GEO_HASH_INDEX_COLUMN, POLYGON_COLUMN) 两张表做join查询,一张表为空间数据表(有经纬度列和GeoHashIndex列),另一张表为维度表,保存polygon数据。 查询使用IN_POLYGON_JOIN UDF,参数GEO_HASH_INDEX_COLUMN和polygon表的POLYGON_COLUMN。Polygon_column列是一系列的点(经纬度列)。Polygon表的每一行的第一个点和最后一个点必须是相同的。Polygon表的每一行的所有点连接起来形成一个封闭的几何对象。 UDF输入参数: 参数 类型 说明 GEO_HASH_INDEX_COLUMN Long 空间数据表的GeoHashIndex列。 POLYGON_COLUMN String Polygon表的polygon列,数据为polygon的字符串表示。例如,一个polygon是POLYGON ((longitude1 latitude1, longitude2 latitude2, …)) 使用示例: CREATE TABLE polygonTable(polygon string,poiType string,poiId String)STORED AS carbondata;insert into polygonTable select 'POLYGON ((120.176433 30.327431,120.171283 30.322245, 120.181411 30.314540,120.190509 30.321653,120.185188 30.329358,120.176433 30.327431))','abc','1';insert into polygonTable select 'POLYGON ((120.191603 30.328946,120.184179 30.327465, 120.181819 30.321464,120.190359 30.315388,120.199242 30.324464,120.191603 30.328946))','abc','2';select t1.longitude,t1.latitude from geosot t1 inner join (select polygon,poiId from polygonTable where poitype='abc') t2 on in_polygon_join(t1.mygeosot,t2.polygon) group by t1.longitude,t1.latitude; range_list连接查询 IN_POLYGON_JOIN_RANGE_LIST(GEO_HASH_INDEX_COLUMN, POLYGON_COLUMN) 同IN_POLYGON_JOIN,使用IN_POLYGON_JOIN_RANGE_LIST UDF关联空间数据表和polygon维度表,关联基于Polygon_RangeList。直接使用range list可以避免polygon到range list的转换。 UDF输入参数: 参数 类型 说明 GEO_HASH_INDEX_COLUMN Long 空间数据表的GeoHashIndex列。 POLYGON_COLUMN String Polygon表的rangelist列,数据为rangeList的字符串。例如,一个rangelist是RANGELIST (startGeoId1 endGeoId1, startGeoId2 endGeoId2, …) 使用示例: CREATE TABLE polygonTable(polygon string,poiType string,poiId String)STORED AS carbondata;insert into polygonTable select 'RANGELIST (526546455897309184 526546455897309284, 526549831217315840 526549831217315850, 532555655580483534 532555655580483584)','xyz','2';select t1.*from geosot t1inner join(select polygon,poiId from polygonTable where poitype='xyz') t2on in_polygon_join_range_list(t1.mygeosot,t2.polygon); 空间索引工具类UDF GeoID转栅格行列号。 GeoIdToGridXy(geoId) UDF输入参数: 参数 类型 说明 geoId Long 根据GeoId计算栅格行列号。 UDF输出参数: 参数 类型 说明 gridArray Array[Int] 返回该geoid所包含的栅格行列号,以数组的方式返回,第一位为行,第二位为列。 使用示例: select longitude, latitude, mygeohash, GeoIdToGridXy(mygeohash) as GridXY from geoTable; 经纬度转GeoID。 LatLngToGeoId(latitude, longitude oriLatitude, gridSize) UDF输入参数: 参数 类型 说明 longitude Long 经度,注:转换后的整数类型。 latitude Long 纬度,注:转换后的整数类型。 oriLatitude Double 原点纬度,计算GeoId需要参数。 gridSize Int 栅格大小,计算GeoId需要参数。 UDF输出参数: 参数 类型 说明 geoId Long 通过编码获得一个表示经纬度的数。 使用示例: select longitude, latitude, mygeohash, LatLngToGeoId(latitude, longitude, 39.832277, 50) as geoId from geoTable; GeoID转经纬度。 GeoIdToLatLng(geoId, oriLatitude, gridSize) UDF输入参数: 参数 类型 说明 geoId Long 根据GeoId计算经纬度。 oriLatitude Double 原点纬度,计算经纬度需要参数。 gridSize Int 栅格大小,计算经纬度需要参数。 由于GeoId由栅格坐标生成,坐标为栅格中心点,则计算出的经纬度是栅格中心点经纬度,与生成该GeoId的经纬度可能有[0度~半个栅格度数]的误差。 UDF输出参数: 参数 类型 说明 latitudeAndLongitude Array[Double] 返回该geoid所表示的栅格的中心点的经纬度坐标,以数组的方式返回,第一位为latitude,第二位为longitude。 使用示例: select longitude, latitude, mygeohash, GeoIdToLatLng(mygeohash, 39.832277, 50) as LatitudeAndLongitude from geoTable; 计算金字塔模型向上汇聚一层的GeoID。 ToUpperLayerGeoId(geoId) UDF输入参数: 参数 类型 说明 geoId Long 根据输入GeoId计算金字塔模型上一层GeoId。 UDF输出参数: 参数 类型 说明 geoId Long 金字塔模型上一层GeoId。 使用示例: select longitude, latitude, mygeohash, ToUpperLayerGeoId(mygeohash) as upperLayerGeoId from geoTable; 输入polygon获得GeoID范围列表。 ToRangeList(polygon, oriLatitude, gridSize) UDF输入参数: 参数 类型 说明 polygon String 输入polygon字符串,用一组经纬度表示。 经纬度间用空格分隔,每对经纬度间用逗号分隔,首尾经纬度一致。 oriLatitude Double 原点纬度,计算GeoId需要参数。 gridSize Int 栅格大小,计算GeoId需要参数。 UDF输出参数: 参数 类型 说明 geoIdList Buffer[Array[Long]] 将polygon转换为一串geoid的范围列表。 使用示例: select ToRangeList('116.321011 40.123503, 116.137676 39.947911, 116.560993 39.935276, 116.321011 40.123503', 39.832277, 50) as rangeList from geoTable; 计算金字塔模型向上汇聚一层的longitude。 ToUpperLongitude (longitude, gridSize, oriLat) UDF输入参数: 参数 类型 说明 longitude Long 输入longitude,用一个长整型表示。 gridSize Int 栅格大小,计算longitude需要参数。 oriLatitude Double 原点纬度,计算longitude需要参数。 UDF输出参数: 参数 类型 说明 longitude Long 返回上一层的longitude。 使用示例: select ToUpperLongitude (-23575161504L, 50, 39.832277) as upperLongitude from geoTable; 计算金字塔模型向上汇聚一层的Latitude。 ToUpperLatitude(Latitude, gridSize, oriLat) UDF输入参数: 参数 类型 说明 latitude Long 输入latitude,用一个长整型表示。 gridSize Int 栅格大小,计算latitude需要参数。 oriLatitude Double 原点纬度,计算latitude需要参数。 UDF输出参数: 参数 类型 说明 Latitude Long 返回上一层的latitude。 使用示例: select ToUpperLatitude (-23575161504L, 50, 39.832277) as upperLatitude from geoTable; 经纬度转GeoSOT LatLngToGridCode(latitude, longitude, level) UDF输入参数: 参数 类型 说明 latitude Double 输入latitude。 longitude Double 输入longitude。 level Int 输入level,值区间[0-32]。 UDF输出参数: 参数 类型 说明 geoId Long 通过GeoSOT编码获得一个表示经纬度的数。 使用示例: select LatLngToGridCode(39.930753, 116.302895, 21) as geoId;
-
导入数据 GeoHash默认实现类扩展自定义索引抽象类。如果没有配置handler属性为自定义的实现类,则使用默认的实现类。用户可以通过扩展默认实现类来挂载geohash的自定义实现类。自定义索引抽象类方法包括: Init方法,用来提取、验证和存储handler属性。在失败时发生异常,并显示错误信息。 Generate方法,用来生成索引。它为每行数据生成一个索引数据。 Query方法,用来对给定输入生成索引值范围列表。 导入命令同普通Carbon表: LOAD DATA inpath '/tmp/geosotdata.csv' INTO TABLE geosot OPTIONS ('DELIMITER'= ','); LOAD DATA inpath '/tmp/geosotdata2.csv' INTO TABLE geosot OPTIONS ('DELIMITER'= ','); geosotdata.csv和geosotdata2.csv表请参考准备数据。
-
快速示例 create table IF NOT EXISTS carbonTable(COLUMN1 BIGINT,LONGITUDE BIGINT,LATITUDE BIGINT,COLUMN2 BIGINT,COLUMN3 BIGINT)STORED AS carbondataTBLPROPERTIES ('SPATIAL_INDEX.mygeohash.type'='geohash','SPATIAL_INDEX.mygeohash.sourcecolumns'='longitude, latitude','SPATIAL_INDEX.mygeohash.originLatitude'='39.850713','SPATIAL_INDEX.mygeohash.gridSize'='50','SPATIAL_INDEX.mygeohash.minLongitude'='115.828503','SPATIAL_INDEX.mygeohash.maxLongitude'='720.000000','SPATIAL_INDEX.mygeohash.minLatitude'='39.850713','SPATIAL_INDEX.mygeohash.maxLatitude'='720.000000','SPATIAL_INDEX'='mygeohash','SPATIAL_INDEX.mygeohash.conversionRatio'='1000000','SORT_COLUMNS'='column1,column2,column3,latitude,longitude');
-
概述 loader-tool工具是Loader客户端工具之一,包括“lt-ucc”、“lt-ucj”、“lt-ctl”三个工具。 Loader支持通过参数选项或作业模板这两种方式,对连接器进行创建、更新、查询和删除,以及对Loader作业进行创建、更新、查询、删除、启动和停止等操作。 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”。 作业模板中包含了连接器的配置信息。创建、更新连接器时,实际上仅调用到作业模板中的连接器的信息。
-
注意事项 仅在没有数据丢失的情况下支持将Decimal数据类型从较低精度更改为较高精度 例如: 无效场景:将Decimal数据精度从(10,2)更改为(10,5)无效,因为在这种情况下,只有scale增加,但总位数保持不变。 有效场景:将Decimal数据精度从(10,2)更改为(12,3)有效,因为总位数增加2,但是scale仅增加1,这不会导致任何数据丢失。 将Decimal数据类型从较低精度更改为较高精度,其允许的最大精度(precision, scale)范围为(38,38),并且只适用于不会导致数据丢失的有效提升精度的场景。
-
回答 转义字符以反斜线"\"开头,后跟一个或几个字符。如果输入记录包含类似\t,\b,\n,\r,\f,\',\",\\的转义字符,Java将把转义符'\'和它后面的字符一起处理得到转义后的值。 例如:如果CSV数据类似“2010\\10,test”,将这两列插入“String,int”类型时,因为“test”无法转换为int类型,表会将这条记录重定向到Bad Records中。但记录到Bad Records中的值为“2010\10”,Java会将原始数据中的“\\”转义为“\”。
-
已安装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
-
前提条件 创建或获取该任务中创建Loader作业的业务用户和密码。 确保用户已授权访问作业执行时操作的目录、HBase表和数据。 获取外部数据源(SFTP服务器或关系型数据库)使用的用户和密码。 检查磁盘空间,确保没有出现告警且余量满足导入、导出数据的大小。 使用Loader从HDFS/OBS导出数据时,确保HDFS/OBS数据源的输入路径目录名、输入路径的子目录名及子文件名不能包含特殊字符/\"':;,中的任意字符。 如果设置的任务需要使用指定Yarn队列功能,该用户需要已授权有相关Yarn队列的权限。 设置任务的用户需要获取该任务的执行权限,并获取该任务对应的连接的使用权限。
-
前提条件 创建或获取该任务中创建Loader作业的业务用户和密码。 确保用户已授权访问作业执行时操作的HDFS/OBS目录和数据。 确保用户已授权访问作业执行时操作的HBase表或phoenix表。 检查磁盘空间,确保没有出现告警且余量满足导入、导出数据的大小。 如果设置的作业需要使用指定YARN队列功能,该用户需要已授权有相关YARN队列的权限。 设置任务的用户需要获取该任务的执行权限,并获取该任务对应的连接的使用权限。
共100000条
- 1
- ...
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 513
- 514
- 515
- 516
- 517
- 518
- 519
- 520
- 521
- 522
- 523
- 524
- 525
- 526
- 527
- 528
- 529
- 530
- 531
- 532
- 533
- 534
- 535
- 536
- 537
- 538
- 539
- 540
- 541
- 542
- 543
- 544
- 545
- 546
- 547
- 548
- 549
- 550
- 551
- 552
- 553
- 554
- 555
- 556
- 557
- 558
- 559
- 560
- 561
- 562
- 563
- 564
- 565
- 566
- 567
- 568
- 569
- 570
- 571
- 572
- 573
- 574
- 575
- 576
- 577
- 578
- 579
- 580
- 581
- 582
- 583
- 584
- 585
- 586
- 587
- 588
- 589
- 590
- 591
- 592
- 593
- 594
- 595
- 596
- 597
- 598
- 599
- 600
- 601
- 602
- 603
- 604
- 605
- 606
- 607
- 608
- 609
- 610
- 611
- 612
- 613
- 614
- 615
- 616
- 617
- 618
- 619
- 620
- 621
- 622
- 623
- 624
- 625
- 626
- 627
- 628
- 629
- 630
- 631
- 632
- 633
- 634
- 635
- 636
- 637
- 638
- 639
- 640
- 641
- 642
- 643
- 644
- 645
- 646
- 647
- 648
- 649
- 650
- 651
- 652
- 653
- 654
- 655
- 656
- 657
- 658
- 659
- 660
- 661
- 662
- 663
- 664
- 665
- 666
- 667
- 668
- 669
- 670
- 671
- 672
- 673
- 674
- 675
- 676
- 677
- 678
- 679
- 680
- 681
- 682
- 683
- 684
- 685
- 686
- 687
- 688
- 689
- 690
- 691
- 692
- 693
- 694
- 695
- 696
- 697
- 698
- 699
- 700
- 701
- 702
- 703
- 704
- 705
- 706
- 707
- 708
- 709
- 710
- 711
- 712
- 713
- 714
- 715
- 716
- 717
- 718
- 719
- 720
- 721
- 722
- 723
- 724
- 725
- 726
- 727
- 728
- 729
- 730
- 731
- 732
- 733
- 734
- 735
- 736
- 737
- 738
- 739
- 740
- 741
- 742
- 743
- 744
- 745
- 746
- 747
- 748
- 749
- 750
- 751
- 752
- 753
- 754
- 755
- 756
- 757
- 758
- 759
- 760
- 761
- 762
- 763
- 764
- 765
- 766
- 767
- 768
- 769
- 770
- 771
- 772
- 773
- 774
- 775
- 776
- 777
- 778
- 779
- 780
- 781
- 782
- 783
- 784
- 785
- 786
- 787
- 788
- 789
- 790
- 791
- 792
- 793
- 794
- 795
- 796
- 797
- 798
- 799
- 800
- 801
- 802
- 803
- 804
- 805
- 806
- 807
- 808
- 809
- 810
- 811
- 812
- 813
- 814
- 815
- 816
- 817
- 818
- 819
- 820
- 821
- 822
- 823
- 824
- 825
- 826
- 827
- 828
- 829
- 830
- 831
- 832
- 833
- 834
- 835
- 836
- 837
- 838
- 839
- 840
- 841
- 842
- 843
- 844
- 845
- 846
- 847
- 848
- 849
- 850
- 851
- 852
- 853
- 854
- 855
- 856
- 857
- 858
- 859
- 860
- 861
- 862
- 863
- 864
- 865
- 866
- 867
- 868
- 869
- 870
- 871
- 872
- 873
- 874
- 875
- 876
- 877
- 878
- 879
- 880
- 881
- 882
- 883
- 884
- 885
- 886
- 887
- 888
- 889
- 890
- 891
- 892
- 893
- 894
- 895
- 896
- 897
- 898
- 899
- 900
- 901
- 902
- 903
- 904
- 905
- 906
- 907
- 908
- 909
- 910
- 911
- 912
- 913
- 914
- 915
- 916
- 917
- 918
- 919
- 920
- 921
- 922
- 923
- 924
- 925
- 926
- 927
- 928
- 929
- 930
- 931
- 932
- 933
- 934
- 935
- 936
- 937
- 938
- 939
- 940
- 941
- 942
- 943
- 944
- 945
- 946
- 947
- 948
- 949
- 950
- 951
- 952
- 953
- 954
- 955
- 956
- 957
- 958
- 959
- 960
- 961
- 962
- 963
- 964
- 965
- 966
- 967
- 968
- 969
- 970
- 971
- 972
- 973
- 974
- 975
- 976
- 977
- 978
- 979
- 980
- 981
- 982
- 983
- 984
- 985
- 986
- 987
- 988
- 989
- 990
- 991
- 992
- 993
- 994
- 995
- 996
- 997
- 998
- 999
- 1000
- 1001
- 1002
- 1003
- 1004
- 1005
- 1006
- 1007
- 1008
- 1009
- 1010
- 1011
- 1012
- 1013
- 1014
- 1015
- 1016
- 1017
- 1018
- 1019
- 1020
- 1021
- 1022
- 1023
- 1024
- 1025
- 1026
- 1027
- 1028
- 1029
- 1030
- 1031
- 1032
- 1033
- 1034
- 1035
- 1036
- 1037
- 1038
- 1039
- 1040
- 1041
- 1042
- 1043
- 1044
- 1045
- 1046
- 1047
- 1048
- 1049
- 1050
- 1051
- 1052
- 1053
- 1054
- 1055
- 1056
- 1057
- 1058
- 1059
- 1060
- 1061
- 1062
- 1063
- 1064
- 1065
- 1066
- 1067
- 1068
- 1069
- 1070
- 1071
- 1072
- 1073
- 1074
- 1075
- 1076
- 1077
- 1078
- 1079
- 1080
- 1081
- 1082
- 1083
- 1084
- 1085
- 1086
- 1087
- 1088
- 1089
- 1090
- 1091
- 1092
- 1093
- 1094
- 1095
- 1096
- 1097
- 1098
- 1099
- 1100
- 1101
- 1102
- 1103
- 1104
- 1105
- 1106
- 1107
- 1108
- 1109
- 1110
- 1111
- 1112
- 1113
- 1114
- 1115
- 1116
- 1117
- 1118
- 1119
- 1120
- 1121
- 1122
- 1123
- 1124
- 1125
- 1126
- 1127
- 1128
- 1129
- 1130
- 1131
- 1132
- 1133
- 1134
- 1135
- 1136
- 1137
- 1138
- 1139
- 1140
- 1141
- 1142
- 1143
- 1144
- 1145
- 1146
- 1147
- 1148
- 1149
- 1150
- 1151
- 1152
- 1153
- 1154
- 1155
- 1156
- 1157
- 1158
- 1159
- 1160
- 1161
- 1162
- 1163
- 1164
- 1165
- 1166
- 1167
- 1168
- 1169
- 1170
- 1171
- 1172
- 1173
- 1174
- 1175
- 1176
- 1177
- 1178
- 1179
- 1180
- 1181
- 1182
- 1183
- 1184
- 1185
- 1186
- 1187
- 1188
- 1189
- 1190
- 1191
- 1192
- 1193
- 1194
- 1195
- 1196
- 1197
- 1198
- 1199
- 1200
- 1201
- 1202
- 1203
- 1204
- 1205
- 1206
- 1207
- 1208
- 1209
- 1210
- 1211
- 1212
- 1213
- 1214
- 1215
- 1216
- 1217
- 1218
- 1219
- 1220
- 1221
- 1222
- 1223
- 1224
- 1225
- 1226
- 1227
- 1228
- 1229
- 1230
- 1231
- 1232
- 1233
- 1234
- 1235
- 1236
- 1237
- 1238
- 1239
- 1240
- 1241
- 1242
- 1243
- 1244
- 1245
- 1246
- 1247
- 1248
- 1249
- 1250
- 1251
- 1252
- 1253
- 1254
- 1255
- 1256
- 1257
- 1258
- 1259
- 1260
- 1261
- 1262
- 1263
- 1264
- 1265
- 1266
- 1267
- 1268
- 1269
- 1270
- 1271
- 1272
- 1273
- 1274
- 1275
- 1276
- 1277
- 1278
- 1279
- 1280
- 1281
- 1282
- 1283
- 1284
- 1285
- 1286
- 1287
- 1288
- 1289
- 1290
- 1291
- 1292
- 1293
- 1294
- 1295
- 1296
- 1297
- 1298
- 1299
- 1300
- 1301
- 1302
- 1303
- 1304
- 1305
- 1306
- 1307
- 1308
- 1309
- 1310
- 1311
- 1312
- 1313
- 1314
- 1315
- 1316
- 1317
- 1318
- 1319
- 1320
- 1321
- 1322
- 1323
- 1324
- 1325
- 1326
- 1327
- 1328
- 1329
- 1330
- 1331
- 1332
- 1333
- 1334
- 1335
- 1336
- 1337
- 1338
- 1339
- 1340
- 1341
- 1342
- 1343
- 1344
- 1345
- 1346
- 1347
- 1348
- 1349
- 1350
- 1351
- 1352
- 1353
- 1354
- 1355
- 1356
- 1357
- 1358
- 1359
- 1360
- 1361
- 1362
- 1363
- 1364
- 1365
- 1366
- 1367
- 1368
- 1369
- 1370
- 1371
- 1372
- 1373
- 1374
- 1375
- 1376
- 1377
- 1378
- 1379
- 1380
- 1381
- 1382
- 1383
- 1384
- 1385
- 1386
- 1387
- 1388
- 1389
- 1390
- 1391
- 1392
- 1393
- 1394
- 1395
- 1396
- 1397
- 1398
- 1399
- 1400
- 1401
- 1402
- 1403
- 1404
- 1405
- 1406
- 1407
- 1408
- 1409
- 1410
- 1411
- 1412
- 1413
- 1414
- 1415
- 1416
- 1417
- 1418
- 1419
- 1420
- 1421
- 1422
- 1423
- 1424
- 1425
- 1426
- 1427
- 1428
- 1429
- 1430
- 1431
- 1432
- 1433
- 1434
- 1435
- 1436
- 1437
- 1438
- 1439
- 1440
- 1441
- 1442
- 1443
- 1444
- 1445
- 1446
- 1447
- 1448
- 1449
- 1450
- 1451
- 1452
- 1453
- 1454
- 1455
- 1456
- 1457
- 1458
- 1459
- 1460
- 1461
- 1462
- 1463
- 1464
- 1465
- 1466
- 1467
- 1468
- 1469
- 1470
- 1471
- 1472
- 1473
- 1474
- 1475
- 1476
- 1477
- 1478
- 1479
- 1480
- 1481
- 1482
- 1483
- 1484
- 1485
- 1486
- 1487
- 1488
- 1489
- 1490
- 1491
- 1492
- 1493
- 1494
- 1495
- 1496
- 1497
- 1498
- 1499
- 1500
- 1501
- 1502
- 1503
- 1504
- 1505
- 1506
- 1507
- 1508
- 1509
- 1510
- 1511
- 1512
- 1513
- 1514
- 1515
- 1516
- 1517
- 1518
- 1519
- 1520
- 1521
- 1522
- 1523
- 1524
- 1525
- 1526
- 1527
- 1528
- 1529
- 1530
- 1531
- 1532
- 1533
- 1534
- 1535
- 1536
- 1537
- 1538
- 1539
- 1540
- 1541
- 1542
- 1543
- 1544
- 1545
- 1546
- 1547
- 1548
- 1549
- 1550
- 1551
- 1552
- 1553
- 1554
- 1555
- 1556
- 1557
- 1558
- 1559
- 1560
- 1561
- 1562
- 1563
- 1564
- 1565
- 1566
- 1567
- 1568
- 1569
- 1570
- 1571
- 1572
- 1573
- 1574
- 1575
- 1576
- 1577
- 1578
- 1579
- 1580
- 1581
- 1582
- 1583
- 1584
- 1585
- 1586
- 1587
- 1588
- 1589
- 1590
- 1591
- 1592
- 1593
- 1594
- 1595
- 1596
- 1597
- 1598
- 1599
- 1600
- 1601
- 1602
- 1603
- 1604
- 1605
- 1606
- 1607
- 1608
- 1609
- 1610
- 1611
- 1612
- 1613
- 1614
- 1615
- 1616
- 1617
- 1618
- 1619
- 1620
- 1621
- 1622
- 1623
- 1624
- 1625
- 1626
- 1627
- 1628
- 1629
- 1630
- 1631
- 1632
- 1633
- 1634
- 1635
- 1636
- 1637
- 1638
- 1639
- 1640
- 1641
- 1642
- 1643
- 1644
- 1645
- 1646
- 1647
- 1648
- 1649
- 1650
- 1651
- 1652
- 1653
- 1654
- 1655
- 1656
- 1657
- 1658
- 1659
- 1660
- 1661
- 1662
- 1663
- 1664
- 1665
- 1666
- 1667
- 1668
- 1669
- 1670
- 1671
- 1672
- 1673
- 1674
- 1675
- 1676
- 1677
- 1678
- 1679
- 1680
- 1681
- 1682
- 1683
- 1684
- 1685
- 1686
- 1687
- 1688
- 1689
- 1690
- 1691
- 1692
- 1693
- 1694
- 1695
- 1696
- 1697
- 1698
- 1699
- 1700
- 1701
- 1702
- 1703
- 1704
- 1705
- 1706
- 1707
- 1708
- 1709
- 1710
- 1711
- 1712
- 1713
- 1714
- 1715
- 1716
- 1717
- 1718
- 1719
- 1720
- 1721
- 1722
- 1723
- 1724
- 1725
- 1726
- 1727
- 1728
- 1729
- 1730
- 1731
- 1732
- 1733
- 1734
- 1735
- 1736
- 1737
- 1738
- 1739
- 1740
- 1741
- 1742
- 1743
- 1744
- 1745
- 1746
- 1747
- 1748
- 1749
- 1750
- 1751
- 1752
- 1753
- 1754
- 1755
- 1756
- 1757
- 1758
- 1759
- 1760
- 1761
- 1762
- 1763
- 1764
- 1765
- 1766
- 1767
- 1768
- 1769
- 1770
- 1771
- 1772
- 1773
- 1774
- 1775
- 1776
- 1777
- 1778
- 1779
- 1780
- 1781
- 1782
- 1783
- 1784
- 1785
- 1786
- 1787
- 1788
- 1789
- 1790
- 1791
- 1792
- 1793
- 1794
- 1795
- 1796
- 1797
- 1798
- 1799
- 1800
- 1801
- 1802
- 1803
- 1804
- 1805
- 1806
- 1807
- 1808
- 1809
- 1810
- 1811
- 1812
- 1813
- 1814
- 1815
- 1816
- 1817
- 1818
- 1819
- 1820
- 1821
- 1822
- 1823
- 1824
- 1825
- 1826
- 1827
- 1828
- 1829
- 1830
- 1831
- 1832
- 1833
- 1834
- 1835
- 1836
- 1837
- 1838
- 1839
- 1840
- 1841
- 1842
- 1843
- 1844
- 1845
- 1846
- 1847
- 1848
- 1849
- 1850
- 1851
- 1852
- 1853
- 1854
- 1855
- 1856
- 1857
- 1858
- 1859
- 1860
- 1861
- 1862
- 1863
- 1864
- 1865
- 1866
- 1867
- 1868
- 1869
- 1870
- 1871
- 1872
- 1873
- 1874
- 1875
- 1876
- 1877
- 1878
- 1879
- 1880
- 1881
- 1882
- 1883
- 1884
- 1885
- 1886
- 1887
- 1888
- 1889
- 1890
- 1891
- 1892
- 1893
- 1894
- 1895
- 1896
- 1897
- 1898
- 1899
- 1900
- 1901
- 1902
- 1903
- 1904
- 1905
- 1906
- 1907
- 1908
- 1909
- 1910
- 1911
- 1912
- 1913
- 1914
- 1915
- 1916
- 1917
- 1918
- 1919
- 1920
- 1921
- 1922
- 1923
- 1924
- 1925
- 1926
- 1927
- 1928
- 1929
- 1930
- 1931
- 1932
- 1933
- 1934
- 1935
- 1936
- 1937
- 1938
- 1939
- 1940
- 1941
- 1942
- 1943
- 1944
- 1945
- 1946
- 1947
- 1948
- 1949
- 1950
- 1951
- 1952
- 1953
- 1954
- 1955
- 1956
- 1957
- 1958
- 1959
- 1960
- 1961
- 1962
- 1963
- 1964
- 1965
- 1966
- 1967
- 1968
- 1969
- 1970
- 1971
- 1972
- 1973
- 1974
- 1975
- 1976
- 1977
- 1978
- 1979
- 1980
- 1981
- 1982
- 1983
- 1984
- 1985
- 1986
- 1987
- 1988
- 1989
- 1990
- 1991
- 1992
- 1993
- 1994
- 1995
- 1996
- 1997
- 1998
- 1999
- 2000
- 2001
- 2002
- 2003
- 2004
- 2005
- 2006
- 2007
- 2008
- 2009
- 2010
- 2011
- 2012
- 2013
- 2014
- 2015
- 2016
- 2017
- 2018
- 2019
- 2020
- 2021
- 2022
- 2023
- 2024
- 2025
- 2026
- 2027
- 2028
- 2029
- 2030
- 2031
- 2032
- 2033
- 2034
- 2035
- 2036
- 2037
- 2038
- 2039
- 2040
- 2041
- 2042
- 2043
- 2044
- 2045
- 2046
- 2047
- 2048
- 2049
- 2050
- 2051
- 2052
- 2053
- 2054
- 2055
- 2056
- 2057
- 2058
- 2059
- 2060
- 2061
- 2062
- 2063
- 2064
- 2065
- 2066
- 2067
- 2068
- 2069
- 2070
- 2071
- 2072
- 2073
- 2074
- 2075
- 2076
- 2077
- 2078
- 2079
- 2080
- 2081
- 2082
- 2083
- 2084
- 2085
- 2086
- 2087
- 2088
- 2089
- 2090
- 2091
- 2092
- 2093
- 2094
- 2095
- 2096
- 2097
- 2098
- 2099
- 2100
- 2101
- 2102
- 2103
- 2104
- 2105
- 2106
- 2107
- 2108
- 2109
- 2110
- 2111
- 2112
- 2113
- 2114
- 2115
- 2116
- 2117
- 2118
- 2119
- 2120
- 2121
- 2122
- 2123
- 2124
- 2125
- 2126
- 2127
- 2128
- 2129
- 2130
- 2131
- 2132
- 2133
- 2134
- 2135
- 2136
- 2137
- 2138
- 2139
- 2140
- 2141
- 2142
- 2143
- 2144
- 2145
- 2146
- 2147
- 2148
- 2149
- 2150
- 2151
- 2152
- 2153
- 2154
- 2155
- 2156
- 2157
- 2158
- 2159
- 2160
- 2161
- 2162
- 2163
- 2164
- 2165
- 2166
- 2167
- 2168
- 2169
- 2170
- 2171
- 2172
- 2173
- 2174
- 2175
- 2176
- 2177
- 2178
- 2179
- 2180
- 2181
- 2182
- 2183
- 2184
- 2185
- 2186
- 2187
- 2188
- 2189
- 2190
- 2191
- 2192
- 2193
- 2194
- 2195
- 2196
- 2197
- 2198
- 2199
- 2200
- 2201
- 2202
- 2203
- 2204
- 2205
- 2206
- 2207
- 2208
- 2209
- 2210
- 2211
- 2212
- 2213
- 2214
- 2215
- 2216
- 2217
- 2218
- 2219
- 2220
- 2221
- 2222
- 2223
- 2224
- 2225
- 2226
- 2227
- 2228
- 2229
- 2230
- 2231
- 2232
- 2233
- 2234
- 2235
- 2236
- 2237
- 2238
- 2239
- 2240
- 2241
- 2242
- 2243
- 2244
- 2245
- 2246
- 2247
- 2248
- 2249
- 2250
- 2251
- 2252
- 2253
- 2254
- 2255
- 2256
- 2257
- 2258
- 2259
- 2260
- 2261
- 2262
- 2263
- 2264
- 2265
- 2266
- 2267
- 2268
- 2269
- 2270
- 2271
- 2272
- 2273
- 2274
- 2275
- 2276
- 2277
- 2278
- 2279
- 2280
- 2281
- 2282
- 2283
- 2284
- 2285
- 2286
- 2287
- 2288
- 2289
- 2290
- 2291
- 2292
- 2293
- 2294
- 2295
- 2296
- 2297
- 2298
- 2299
- 2300
- 2301
- 2302
- 2303
- 2304
- 2305
- 2306
- 2307
- 2308
- 2309
- 2310
- 2311
- 2312
- 2313
- 2314
- 2315
- 2316
- 2317
- 2318
- 2319
- 2320
- 2321
- 2322
- 2323
- 2324
- 2325
- 2326
- 2327
- 2328
- 2329
- 2330
- 2331
- 2332
- 2333
- 2334
- 2335
- 2336
- 2337
- 2338
- 2339
- 2340
- 2341
- 2342
- 2343
- 2344
- 2345
- 2346
- 2347
- 2348
- 2349
- 2350
- 2351
- 2352
- 2353
- 2354
- 2355
- 2356
- 2357
- 2358
- 2359
- 2360
- 2361
- 2362
- 2363
- 2364
- 2365
- 2366
- 2367
- 2368
- 2369
- 2370
- 2371
- 2372
- 2373
- 2374
- 2375
- 2376
- 2377
- 2378
- 2379
- 2380
- 2381
- 2382
- 2383
- 2384
- 2385
- 2386
- 2387
- 2388
- 2389
- 2390
- 2391
- 2392
- 2393
- 2394
- 2395
- 2396
- 2397
- 2398
- 2399
- 2400
- 2401
- 2402
- 2403
- 2404
- 2405
- 2406
- 2407
- 2408
- 2409
- 2410
- 2411
- 2412
- 2413
- 2414
- 2415
- 2416
- 2417
- 2418
- 2419
- 2420
- 2421
- 2422
- 2423
- 2424
- 2425
- 2426
- 2427
- 2428
- 2429
- 2430
- 2431
- 2432
- 2433
- 2434
- 2435
- 2436
- 2437
- 2438
- 2439
- 2440
- 2441
- 2442
- 2443
- 2444
- 2445
- 2446
- 2447
- 2448
- 2449
- 2450
- 2451
- 2452
- 2453
- 2454
- 2455
- 2456
- 2457
- 2458
- 2459
- 2460
- 2461
- 2462
- 2463
- 2464
- 2465
- 2466
- 2467
- 2468
- 2469
- 2470
- 2471
- 2472
- 2473
- 2474
- 2475
- 2476
- 2477
- 2478
- 2479
- 2480
- 2481
- 2482
- 2483
- 2484
- 2485
- 2486
- 2487
- 2488
- 2489
- 2490
- 2491
- 2492
- 2493
- 2494
- 2495
- 2496
- 2497
- 2498
- 2499
- 2500
- 2501
- 2502
- 2503
- 2504
- 2505
- 2506
- 2507
- 2508
- 2509
- 2510
- 2511
- 2512
- 2513
- 2514
- 2515
- 2516
- 2517
- 2518
- 2519
- 2520
- 2521
- 2522
- 2523
- 2524
- 2525
- 2526
- 2527
- 2528
- 2529
- 2530
- 2531
- 2532
- 2533
- 2534
- 2535
- 2536
- 2537
- 2538
- 2539
- 2540
- 2541
- 2542
- 2543
- 2544
- 2545
- 2546
- 2547
- 2548
- 2549
- 2550
- 2551
- 2552
- ...
- 2553
- 2554
- 2555
- 2556
- 2557
- 2558
- 2559
- 2560
- 2561
- 2562
- 2563
- 2564
- 2565
- 2566
- 2567
- 2568
- 2569
- 2570
- 2571
- 2572
- 2573
- 2574
- 2575
- 2576
- 2577
- 2578
- 2579
- 2580
- 2581
- 2582
- 2583
- 2584
- 2585
- 2586
- 2587
- 2588
- 2589
- 2590
- 2591
- 2592
- 2593
- 2594
- 2595
- 2596
- 2597
- 2598
- 2599
- 2600
- 2601
- 2602
- 2603
- 2604
- 2605
- 2606
- 2607
- 2608
- 2609
- 2610
- 2611
- 2612
- 2613
- 2614
- 2615
- 2616
- 2617
- 2618
- 2619
- 2620
- 2621
- 2622
- 2623
- 2624
- 2625
- 2626
- 2627
- 2628
- 2629
- 2630
- 2631
- 2632
- 2633
- 2634
- 2635
- 2636
- 2637
- 2638
- 2639
- 2640
- 2641
- 2642
- 2643
- 2644
- 2645
- 2646
- 2647
- 2648
- 2649
- 2650
- 2651
- 2652
- 2653
- 2654
- 2655
- 2656
- 2657
- 2658
- 2659
- 2660
- 2661
- 2662
- 2663
- 2664
- 2665
- 2666
- 2667
- 2668
- 2669
- 2670
- 2671
- 2672
- 2673
- 2674
- 2675
- 2676
- 2677
- 2678
- 2679
- 2680
- 2681
- 2682
- 2683
- 2684
- 2685
- 2686
- 2687
- 2688
- 2689
- 2690
- 2691
- 2692
- 2693
- 2694
- 2695
- 2696
- 2697
- 2698
- 2699
- 2700
- 2701
- 2702
- 2703
- 2704
- 2705
- 2706
- 2707
- 2708
- 2709
- 2710
- 2711
- 2712
- 2713
- 2714
- 2715
- 2716
- 2717
- 2718
- 2719
- 2720
- 2721
- 2722
- 2723
- 2724
- 2725
- 2726
- 2727
- 2728
- 2729
- 2730
- 2731
- 2732
- 2733
- 2734
- 2735
- 2736
- 2737
- 2738
- 2739
- 2740
- 2741
- 2742
- 2743
- 2744
- 2745
- 2746
- 2747
- 2748
- 2749
- 2750
- 2751
- 2752
- 2753
- 2754
- 2755
- 2756
- 2757
- 2758
- 2759
- 2760
- 2761
- 2762
- 2763
- 2764
- 2765
- 2766
- 2767
- 2768
- 2769
- 2770
- 2771
- 2772
- 2773
- 2774
- 2775
- 2776
- 2777
- 2778
- 2779
- 2780
- 2781
- 2782
- 2783
- 2784
- 2785
- 2786
- 2787
- 2788
- 2789
- 2790
- 2791
- 2792
- 2793
- 2794
- 2795
- 2796
- 2797
- 2798
- 2799
- 2800
- 2801
- 2802
- 2803
- 2804
- 2805
- 2806
- 2807
- 2808
- 2809
- 2810
- 2811
- 2812
- 2813
- 2814
- 2815
- 2816
- 2817
- 2818
- 2819
- 2820
- 2821
- 2822
- 2823
- 2824
- 2825
- 2826
- 2827
- 2828
- 2829
- 2830
- 2831
- 2832
- 2833
- 2834
- 2835
- 2836
- 2837
- 2838
- 2839
- 2840
- 2841
- 2842
- 2843
- 2844
- 2845
- 2846
- 2847
- 2848
- 2849
- 2850
- 2851
- 2852
- 2853
- 2854
- 2855
- 2856
- 2857
- 2858
- 2859
- 2860
- 2861
- 2862
- 2863
- 2864
- 2865
- 2866
- 2867
- 2868
- 2869
- 2870
- 2871
- 2872
- 2873
- 2874
- 2875
- 2876
- 2877
- 2878
- 2879
- 2880
- 2881
- 2882
- 2883
- 2884
- 2885
- 2886
- 2887
- 2888
- 2889
- 2890
- 2891
- 2892
- 2893
- 2894
- 2895
- 2896
- 2897
- 2898
- 2899
- 2900
- 2901
- 2902
- 2903
- 2904
- 2905
- 2906
- 2907
- 2908
- 2909
- 2910
- 2911
- 2912
- 2913
- 2914
- 2915
- 2916
- 2917
- 2918
- 2919
- 2920
- 2921
- 2922
- 2923
- 2924
- 2925
- 2926
- 2927
- 2928
- 2929
- 2930
- 2931
- 2932
- 2933
- 2934
- 2935
- 2936
- 2937
- 2938
- 2939
- 2940
- 2941
- 2942
- 2943
- 2944
- 2945
- 2946
- 2947
- 2948
- 2949
- 2950
- 2951
- 2952
- 2953
- 2954
- 2955
- 2956
- 2957
- 2958
- 2959
- 2960
- 2961
- 2962
- 2963
- 2964
- 2965
- 2966
- 2967
- 2968
- 2969
- 2970
- 2971
- 2972
- 2973
- 2974
- 2975
- 2976
- 2977
- 2978
- 2979
- 2980
- 2981
- 2982
- 2983
- 2984
- 2985
- 2986
- 2987
- 2988
- 2989
- 2990
- 2991
- 2992
- 2993
- 2994
- 2995
- 2996
- 2997
- 2998
- 2999
- 3000
- 3001
- 3002
- 3003
- 3004
- 3005
- 3006
- 3007
- 3008
- 3009
- 3010
- 3011
- 3012
- 3013
- 3014
- 3015
- 3016
- 3017
- 3018
- 3019
- 3020
- 3021
- 3022
- 3023
- 3024
- 3025
- 3026
- 3027
- 3028
- 3029
- 3030
- 3031
- 3032
- 3033
- 3034
- 3035
- 3036
- 3037
- 3038
- 3039
- 3040
- 3041
- 3042
- 3043
- 3044
- 3045
- 3046
- 3047
- 3048
- 3049
- 3050
- 3051
- 3052
- 3053
- 3054
- 3055
- 3056
- 3057
- 3058
- 3059
- 3060
- 3061
- 3062
- 3063
- 3064
- 3065
- 3066
- 3067
- 3068
- 3069
- 3070
- 3071
- 3072
- 3073
- 3074
- 3075
- 3076
- 3077
- 3078
- 3079
- 3080
- 3081
- 3082
- 3083
- 3084
- 3085
- 3086
- 3087
- 3088
- 3089
- 3090
- 3091
- 3092
- 3093
- 3094
- 3095
- 3096
- 3097
- 3098
- 3099
- 3100
- 3101
- 3102
- 3103
- 3104
- 3105
- 3106
- 3107
- 3108
- 3109
- 3110
- 3111
- 3112
- 3113
- 3114
- 3115
- 3116
- 3117
- 3118
- 3119
- 3120
- 3121
- 3122
- 3123
- 3124
- 3125
- 3126
- 3127
- 3128
- 3129
- 3130
- 3131
- 3132
- 3133
- 3134
- 3135
- 3136
- 3137
- 3138
- 3139
- 3140
- 3141
- 3142
- 3143
- 3144
- 3145
- 3146
- 3147
- 3148
- 3149
- 3150
- 3151
- 3152
- 3153
- 3154
- 3155
- 3156
- 3157
- 3158
- 3159
- 3160
- 3161
- 3162
- 3163
- 3164
- 3165
- 3166
- 3167
- 3168
- 3169
- 3170
- 3171
- 3172
- 3173
- 3174
- 3175
- 3176
- 3177
- 3178
- 3179
- 3180
- 3181
- 3182
- 3183
- 3184
- 3185
- 3186
- 3187
- 3188
- 3189
- 3190
- 3191
- 3192
- 3193
- 3194
- 3195
- 3196
- 3197
- 3198
- 3199
- 3200
- 3201
- 3202
- 3203
- 3204
- 3205
- 3206
- 3207
- 3208
- 3209
- 3210
- 3211
- 3212
- 3213
- 3214
- 3215
- 3216
- 3217
- 3218
- 3219
- 3220
- 3221
- 3222
- 3223
- 3224
- 3225
- 3226
- 3227
- 3228
- 3229
- 3230
- 3231
- 3232
- 3233
- 3234
- 3235
- 3236
- 3237
- 3238
- 3239
- 3240
- 3241
- 3242
- 3243
- 3244
- 3245
- 3246
- 3247
- 3248
- 3249
- 3250
- 3251
- 3252
- 3253
- 3254
- 3255
- 3256
- 3257
- 3258
- 3259
- 3260
- 3261
- 3262
- 3263
- 3264
- 3265
- 3266
- 3267
- 3268
- 3269
- 3270
- 3271
- 3272
- 3273
- 3274
- 3275
- 3276
- 3277
- 3278
- 3279
- 3280
- 3281
- 3282
- 3283
- 3284
- 3285
- 3286
- 3287
- 3288
- 3289
- 3290
- 3291
- 3292
- 3293
- 3294
- 3295
- 3296
- 3297
- 3298
- 3299
- 3300
- 3301
- 3302
- 3303
- 3304
- 3305
- 3306
- 3307
- 3308
- 3309
- 3310
- 3311
- 3312
- 3313
- 3314
- 3315
- 3316
- 3317
- 3318
- 3319
- 3320
- 3321
- 3322
- 3323
- 3324
- 3325
- 3326
- 3327
- 3328
- 3329
- 3330
- 3331
- 3332
- 3333
- 3333