云服务器内容精选

  • spark-defaults.conf相关参数 登录客户端节点,在“{客户端安装目录}/Spark/spark/conf/spark-defaults.conf”文件中配置表4相关参数。 表4 spark-defaults.conf中的Spark配置参考 参数 默认值 描述 spark.driver.memory 4G 指定用于driver端进程的内存,其中SparkContext已初始化。 说明: 在客户端模式下,不要使用SparkConf在应用程序中设置该参数,因为驱动程序JVM已经启动。要配置该参数,请在--driver-memory命令行选项或默认属性文件中进行配置。 spark.executor.memory 4GB 指定每个执行程序进程使用的内存。 spark.sql.crossJoin.enabled true 如果查询包含交叉连接,请启用此属性,以便不会发生错误,此时使用交叉连接而不是连接,可实现更好的性能。
  • Hive ACL权限 表1 CarbonData表级操作所需的Hive ACL权限 场景 所需权限 DESCRIBE TABLE SELECT (of table) SELECT SELECT (of table) EXPLAIN SELECT (of table) CREATE TABLE CREATE (of database) CREATE TABLE As SELECT CREATE (on database), INSERT (on table), RW on data file, and SELECT (on table) LOAD INSERT (of table) RW on data file DROP TABLE OWNER (of table) DELETE SEGMENTS DELETE (of table) SHOW SEGMENTS SELECT (of table) CLEAN FILES DELETE (of table) INSERT OVERWRITE / INSERT INTO INSERT (of table) RW on data file and SELECT (of table) CREATE INDEX OWNER (of table) DROP INDEX OWNER (of table) SHOW INDEXES SELECT (of table) ALTER TABLE ADD COLUMN OWNER (of table) ALTER TABLE DROP COLUMN OWNER (of table) ALTER TABLE CHANGE DATATYPE OWNER (of table) ALTER TABLE RENAME OWNER (of table) ALTER TABLE COMPACTION INSERT (on table) FINISH STREAMING OWNER (of table) ALTER TABLE SET STREAMING PROPERTIES OWNER (of table) ALTER TABLE SET TABLE PROPERTIES OWNER (of table) UPDATE CARBON TABLE UPDATE (of table) DELETE RECORDS DELETE (of table) REFRESH TABLE OWNER (of main table) REGISTER INDEX TABLE OWNER (of table) SHOW PARTITIONS SELECT (on table) ALTER TABLE ADD PARTITION OWNER (of table) ALTER TABLE DROP PARTITION OWNER (of table) 如果数据库下的表由多个用户创建,那么执行Drop database命令会失败,即使执行的用户是数据库的拥有者。 在二级索引中,当父表(parent table)触发时,insert和compaction将在索引表上触发。 如果选择具有过滤条件匹配索引表列的查询,用户应该为父表和索引表提供选择权限。 LockFiles文件夹和LockFiles文件夹中创建的锁定文件将具有完全权限,因为LockFiles文件夹不包含任何敏感数据。 如果使用ACL,确保不要为DDL或DML配置任何被其他进程使用中的路径,建议创建新路径。 以下配置项需要配置路径: 1) carbon.badRecords.location 2) 创建数据库时Db_Path及其他。 对于非安全集群中的Carbon ACL权限,hive-site.xml中的参数hive.server2.enable.doAs必须设置为false。 将此属性设置为false,查询将以hiveserver2进程运行的用户身份运行。
  • 在CarbonData中查询数据 创建CarbonData table并加载数据之后,可以执行所需的数据查询操作。以下为一些查询操作举例。 获取记录数 为了获取在CarbonData table中的记录数,可以运行以下命令。 select count(*) from x1; 使用Groupby查询 为了获取不重复的deviceinformationid记录数,可以运行以下命令。 select deviceinformationid,count (distinct deviceinformationid) from x1 group by deviceinformationid; 用Filter查询 为了获取特定deviceinformationid的记录,可以运行以下命令。 select * from x1 where deviceinformationid='1010'; 在执行数据查询操作后,如果查询结果中某一列的结果含有中文字等非英文字符,会导致查询结果中的列不能对齐,这是由于不同语言的字符在显示时所占的字宽不尽相同。
  • 在Spark-shell上使用CarbonData 用户如果需要在Spark-shell上使用CarbonData,需通过如下方式创建CarbonData Table,加载数据到CarbonData Table和在CarbonData中查询数据的操作。 spark.sql("CREATE TABLE x2(imei string, deviceInformationId int, mac string, productdate timestamp, updatetime timestamp, gamePointId double, contractNumber double) STORED AS carbondata") spark.sql("LOAD DATA inpath 'hdfs://hacluster/data/x1_without_header.csv' into table x2 options('DELIMITER'=',', 'QUOTECHAR'='\"','FILEHEADER'='imei, deviceinformationid,mac, productdate,updatetime, gamepointid,contractnumber')") spark.sql("SELECT * FROM x2").show()
  • 加载数据到CarbonData Table 创建CarbonData table之后,可以从 CS V文件加载数据到所创建的表中。 用所要求的参数运行以下命令从CSV文件加载数据。该表的列名需要与CSV文件的列名匹配。 LOAD DATA inpath 'hdfs://hacluster/data/test.csv' into table x1 options('DELIMITER'=',', 'QUOTECHAR'='"','FILEHEADER'='imei, deviceinformationid,mac, productdate,updatetime, gamepointid,contractnumber'); 其中,“test.csv”为准备CSV文件的CSV文件,“x1”为示例的表名。 CSV样例内容如下: 13418592122,1001,MAC地址,2017-10-23 15:32:30,2017-10-24 15:32:30,62.50,74.56 13418592123,1002,MAC地址,2017-10-23 16:32:30,2017-10-24 16:32:30,17.80,76.28 13418592124,1003,MAC地址,2017-10-23 17:32:30,2017-10-24 17:32:30,20.40,92.94 13418592125,1004,MAC地址,2017-10-23 18:32:30,2017-10-24 18:32:30,73.84,8.58 13418592126,1005,MAC地址,2017-10-23 19:32:30,2017-10-24 19:32:30,80.50,88.02 13418592127,1006,MAC地址,2017-10-23 20:32:30,2017-10-24 20:32:30,65.77,71.24 13418592128,1007,MAC地址,2017-10-23 21:32:30,2017-10-24 21:32:30,75.21,76.04 13418592129,1008,MAC地址,2017-10-23 22:32:30,2017-10-24 22:32:30,63.30,94.40 13418592130,1009,MAC地址,2017-10-23 23:32:30,2017-10-24 23:32:30,95.51,50.17 13418592131,1010,MAC地址,2017-10-24 00:32:30,2017-10-25 00:32:30,39.62,99.13 命令执行结果如下: +------------+ |Segment ID | +------------+ |0 | +------------+ No rows selected (3.039 seconds)
  • 创建CarbonData Table 在Spark Beeline被连接到JD BCS erver之后,需要创建一个CarbonData table用于加载数据和执行查询操作。下面是创建一个简单的表的命令。 create table x1 (imei string, deviceInformationId int, mac string, productdate timestamp, updatetime timestamp, gamePointId double, contractNumber double) STORED AS carbondata TBLPROPERTIES ('SORT_COLUMNS'='imei,mac'); 命令执行结果如下: +---------+ | Result | +---------+ +---------+ No rows selected (1.093 seconds)
  • 二级索引表规格 表3 二级索引表规格 实体 测试值 二级索引表数量 10 二级索引表中的组合列的列数 5 二级索引表中的列名长度(单位:字符) 120 二级索引表名长度(单位:字符) 120 表中所有二级索引表的表名+列名的累积长度*(单位:字符) 3800** * Hive允许的上限值或可用资源的上限值。 ** 二级索引表使用hive注册,并以json格式的值存储在HiveSERDEPROPERTIES中。由hive支持的SERDEPROPERTIES的最大字符数为4000个字符,无法更改。
  • CarbonData主要规格 表2 CarbonData主要规格 实体 测试值 测试环境 表数 10000 3个节点,每个executor 4个CPU核,20GB。Driver内存5GB,3个Executor。 总列数:107 String:75 Int:13 BigInt:7 Timestamp:6 Double:6 表的列数 2000 3个节点,每个executor4个CPU核,20GB。Driver内存5GB,3个Executor。 原始CSV文件大小的最大值 200GB 17个cluster节点,每个executor 150GB,25个CPU核。Driver内存10 GB,17个Executor。 每个文件夹的CSV文件数 100个文件夹,每个文件夹10个文件,每个文件大小50MB。 3个节点,每个executor4个CPU核,20GB。Driver内存5GB,3个Executor。 加载文件夹数 10000 3个节点,每个executor4个CPU核,20GB。Driver内存5GB,3个Executor。
  • spark-defaults.conf相关参数 登录客户端节点,在“{客户端安装目录}/Spark/spark/conf/spark-defaults.conf”文件中配置表4相关参数。 表4 spark-defaults.conf中的Spark配置参考 参数 默认值 描述 spark.driver.memory 4G 指定用于driver端进程的内存,其中SparkContext已初始化。 说明: 在客户端模式下,不要使用SparkConf在应用程序中设置该参数,因为驱动程序JVM已经启动。要配置该参数,请在--driver-memory命令行选项或默认属性文件中进行配置。 spark.executor.memory 4GB 指定每个执行程序进程使用的内存。 spark.sql.crossJoin.enabled true 如果查询包含交叉连接,请启用此属性,以便不会发生错误,此时使用交叉连接而不是连接,可实现更好的性能。
  • 加载数据到CarbonData Table 创建CarbonData table之后,可以从CSV文件加载数据到所创建的表中。 用所要求的参数运行以下命令从CSV文件加载数据。该表的列名需要与CSV文件的列名匹配。 LOAD DATA inpath 'hdfs://hacluster/data/test.csv' into table x1 options('DELIMITER'=',', 'QUOTECHAR'='"','FILEHEADER'='imei, deviceinformationid,mac, productdate,updatetime, gamepointid,contractnumber'); 其中,“test.csv”为准备CSV文件的CSV文件,“x1”为示例的表名。 CSV样例内容如下: 13418592122,1001,MAC地址,2017-10-23 15:32:30,2017-10-24 15:32:30,62.50,74.56 13418592123,1002,MAC地址,2017-10-23 16:32:30,2017-10-24 16:32:30,17.80,76.28 13418592124,1003,MAC地址,2017-10-23 17:32:30,2017-10-24 17:32:30,20.40,92.94 13418592125,1004,MAC地址,2017-10-23 18:32:30,2017-10-24 18:32:30,73.84,8.58 13418592126,1005,MAC地址,2017-10-23 19:32:30,2017-10-24 19:32:30,80.50,88.02 13418592127,1006,MAC地址,2017-10-23 20:32:30,2017-10-24 20:32:30,65.77,71.24 13418592128,1007,MAC地址,2017-10-23 21:32:30,2017-10-24 21:32:30,75.21,76.04 13418592129,1008,MAC地址,2017-10-23 22:32:30,2017-10-24 22:32:30,63.30,94.40 13418592130,1009,MAC地址,2017-10-23 23:32:30,2017-10-24 23:32:30,95.51,50.17 13418592131,1010,MAC地址,2017-10-24 00:32:30,2017-10-25 00:32:30,39.62,99.13 命令执行结果如下: +------------+ |Segment ID | +------------+ |0 | +------------+ No rows selected (3.039 seconds)
  • 在Spark-shell上使用CarbonData 用户若需要在Spark-shell上使用CarbonData,需通过如下方式创建CarbonData Table,加载数据到CarbonData Table和在CarbonData中查询数据的操作。 spark.sql("CREATE TABLE x2(imei string, deviceInformationId int, mac string, productdate timestamp, updatetime timestamp, gamePointId double, contractNumber double) STORED AS carbondata") spark.sql("LOAD DATA inpath 'hdfs://hacluster/data/x1_without_header.csv' into table x2 options('DELIMITER'=',', 'QUOTECHAR'='\"','FILEHEADER'='imei, deviceinformationid,mac, productdate,updatetime, gamepointid,contractnumber')") spark.sql("SELECT * FROM x2").show()
  • 在CarbonData中查询数据 创建CarbonData table并加载数据之后,可以执行所需的数据查询操作。以下为一些查询操作举例。 获取记录数 为了获取在CarbonData table中的记录数,可以运行以下命令。 select count(*) from x1; 使用Groupby查询 为了获取不重复的deviceinformationid记录数,可以运行以下命令。 select deviceinformationid,count (distinct deviceinformationid) from x1 group by deviceinformationid; 用Filter查询 为了获取特定deviceinformationid的记录,可以运行以下命令。 select * from x1 where deviceinformationid='1010'; 在执行数据查询操作后,如果查询结果中某一列的结果含有中文字等非英文字符,会导致查询结果中的列不能对齐,这是由于不同语言的字符在显示时所占的字宽不尽相同。
  • 创建CarbonData Table 在Spark Beeline被连接到JDBCServer之后,需要创建一个CarbonData table用于加载数据和执行查询操作。下面是创建一个简单的表的命令。 create table x1 (imei string, deviceInformationId int, mac string, productdate timestamp, updatetime timestamp, gamePointId double, contractNumber double) STORED AS carbondata TBLPROPERTIES ('SORT_COLUMNS'='imei,mac'); 命令执行结果如下: +---------+ | Result | +---------+ +---------+ No rows selected (1.093 seconds)
  • 二级索引表规格 表3 二级索引表规格 实体 测试值 二级索引表数量 10 二级索引表中的组合列的列数 5 二级索引表中的列名长度(单位:字符) 120 二级索引表名长度(单位:字符) 120 表中所有二级索引表的表名+列名的累积长度*(单位:字符) 3800** * Hive允许的上限值或可用资源的上限值。 ** 二级索引表使用hive注册,并以json格式的值存储在HiveSERDEPROPERTIES中。由hive支持的SERDEPROPERTIES的最大字符数为4000个字符,无法更改。
  • CarbonData主要规格 表2 CarbonData主要规格 实体 测试值 测试环境 表数 10000 3个节点,每个executor 4个CPU核,20GB。Driver内存5GB,3个Executor。 总列数:107 String:75 Int:13 BigInt:7 Timestamp:6 Double:6 表的列数 2000 3个节点,每个executor4个CPU核,20GB。Driver内存5GB,3个Executor。 原始CSV文件大小的最大值 200GB 17个cluster节点,每个executor 150GB,25个CPU核。Driver内存10 GB,17个Executor。 每个文件夹的CSV文件数 100个文件夹,每个文件夹10个文件,每个文件大小50MB。 3个节点,每个executor4个CPU核,20GB。Driver内存5GB,3个Executor。 加载文件夹数 10000 3个节点,每个executor4个CPU核,20GB。Driver内存5GB,3个Executor。 数据加载所需的内存取决于以下因素: 列数 列值大小 并发(使用“carbon.number.of.cores.while.loading”进行配置) 在内存中排序的大小(使用“carbon.sort.size”进行配置) 中间缓存(使用“carbon.graph.rowset.size”进行配置) 加载包含1000万条记录和300列的8 GB CSV文件的数据,每行大小约为0.8KB的8GB CSV文件的数据,需要约为10GB的executor执行内存,也就是说,“carbon.sort.size” 配置为“100000”,所有其他前面的配置保留默认值。