首页 文章 精选 留言 我的

精选列表

搜索[小程序·云开发],共10036篇文章
优秀的个人博客,低调大师

MS SQL巡检系列——检查外键字段是否缺少索引

原文: MS SQL巡检系列——检查外键字段是否缺少索引 前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的。一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方面,网上关于MS SQL巡检方面的资料好像也不是特别多。写这个系列只是一个分享,自己的初衷是一个知识梳理、总结提炼过程,有些知识和脚本也不是原创,文章很多地方融入了自己的一些想法和见解的,不足和肤浅之处肯定也非常多,抛砖引玉,也希望大家提意见和建议、补充,指正其中的不足之处。Stay Hungry Stay Foolish! MS SQL巡检系列——检查重复索引 MS SQL巡检系列——检查外键字段是否缺少索引 MS SQL巡检系列——检查数据库上一次DBCC CHECKDB的时间 对于绝大部分情况,外键字段都有必要建立对应的索引(注意,外键约束并不会自动建立索引),关于外键字段为什么要建立索引?下面从几个简单的例子来分析一下。我们先准备测试环境数据。 CREATETABLE PRIMARY_TB ( PRODUCT_CD VARCHAR(12) , PRODUCT_DATE DATE , PRODUCT_DESC VARCHAR(120) , CONSTRAINT PK_PRIMARY_TB PRIMARYKEYCLUSTERED (PRODUCT_CD) ); SET NOCOUNT ON; GO DECLARE @IndexINT=1; BEGINTRAN WHILE @Index <= 3000 BEGIN INSERT INTO dbo.PRIMARY_TB SELECT'Prd' + CAST(@IndexASVARCHAR(4)), GETDATE() - CEILING(RAND()*200), 'production description' + CAST(@IndexASVARCHAR(4)); SET @Index +=1; END COMMIT; CREATETABLE FK_TB ( FK_ID INTIDENTITY(1,1), SALES_REGION VARCHAR(32), SALES_CITY VARCHAR(32), PRODUCT_CD VARCHAR(12), SALIES_SUM INT, CONSTRAINT PK_FK_TB PRIMARYKEYCLUSTERED (FK_ID) ) GO ALTERTABLE [dbo].[FK_TB] WITHCHECKADD CONSTRAINT [FK_PRIMARY_TB_PRODUCT_CD] FOREIGNKEY([PRODUCT_CD]) REFERENCES [dbo].[PRIMARY_TB] ([PRODUCT_CD]) ON DELETECASCADE; GO SET NOCOUNT ON; GO DECLARE @IndexINT=1; BEGINTRAN WHILE @Index <=1000000 BEGIN INSERT INTO FK_TB SELECT'REGION'+CAST(CEILING(RAND()*20) ASVARCHAR(2)), CAST(CEILING(RAND()*300) ASVARCHAR(3)),'Prd'+ CAST(CEILING(RAND()*3000) ASVARCHAR(8)),CEILING(RAND()*100000); SET @Index +=1; END COMMIT; UPDATESTATISTICS dbo.PRIMARY_TB WITH FULLSCAN; UPDATESTATISTICS dbo.FK_TB WITH FULLSCAN; GO 1: 外键字段建立索引,在主表与子表JOIN操作时能提高性能,减少IO操作。 DBCC DROPCLEANBUFFERS; GO DBCC FREEPROCCACHE; GO SETSTATISTICS IO ON; SETSTATISTICSTIMEON; SELECT p.PRODUCT_CD , p.PRODUCT_DATE , f.SALES_REGION , f.SALES_CITY , f.SALIES_SUM FROM dbo.PRIMARY_TB p INNERJOIN dbo.FK_TB f ON p.PRODUCT_CD = f.PRODUCT_CD WHERE p.PRODUCT_CD ='Prd131'; SETSTATISTICS IO OFF; SETSTATISTICSTIMEOFF; 如下截图所示,如果外键字段缺少索引,这两个表关联查询时,子表就会走扫描(此处测试是聚集索引扫描),如果子表非常大(例如此处案例所示),IO开销就比较大。 我们对外键约束字段PRODUCT_CD建立下面非聚集索引IDX_FK_TB,然后对比两者的执行计划和IO开销 CREATEINDEX IDX_FK_TB ON dbo.FK_TB(PRODUCT_CD); DBCC DROPCLEANBUFFERS; GO DBCC FREEPROCCACHE; GO SETSTATISTICS IO ON; SETSTATISTICSTIMEON; SELECT p.PRODUCT_CD , p.PRODUCT_DATE , f.SALES_REGION , f.SALES_CITY , f.SALIES_SUM FROM dbo.PRIMARY_TB p INNERJOIN dbo.FK_TB f ON p.PRODUCT_CD = f.PRODUCT_CD WHERE p.PRODUCT_CD ='Prd131' SETSTATISTICS IO OFF; SETSTATISTICSTIMEOFF; 你会发现执行计划从原来的聚集索引扫描(Clustered Index Scan)变成了索引查找(Index Seek),IO的减少也是非常明显的。因为这里仅仅是测试数据,复杂的生产环境,性能的提升有可能比这更加明显。 2:如果外键约束为CASCADE(on update/delete)时,则当修改被引用行(referenced row)时,所有引用行(referencing rows )也必须修改(更新或级联删除)。外键列上的索引能减小锁的粒度和范围,从而提高效率和性能。如下所示: 我们先看看缺少索引的情况。 DROPINDEX IDX_FK_TB ON dbo.FK_TB; DBCC DROPCLEANBUFFERS; GO DBCC FREEPROCCACHE; GO SETSTATISTICS IO ON; SETSTATISTICSTIMEON; DELETEFROM dbo.PRIMARY_TB WHERE PRODUCT_CD IN ('Prd132','Prd133') GO SETSTATISTICS IO OFF; SETSTATISTICSTIMEOFF; CREATEINDEX IDX_FK_TB ON dbo.FK_TB(PRODUCT_CD); GO DBCC DROPCLEANBUFFERS; GO DBCC FREEPROCCACHE; GO SETSTATISTICS IO ON; SETSTATISTICSTIMEON; DELETEFROM dbo.PRIMARY_TB WHERE PRODUCT_CD IN ('Prd134','Prd135') GO SETSTATISTICS IO OFF; SETSTATISTICSTIMEOFF; 3:如果外键关系为NO ACTION(on update/delete)时,那么被引用的行不能被删除,因为这个操作会导致引用行变成“孤立”。删除之前,数据库会为了有效地查找、定位行,外键列上创建索引也非常有帮助。 上面肤浅的构造了简单案例,并对比外键约束字段拥有索引和缺少索引时,SQL的执行计划和IO的差异,那么接下来,我们进入正题,巡检的时候,我们必须通过脚本找到数据库里面外键字段没有索引的相关表和信息,并生成对应的创建索引的脚本。如下所示。 /* One or more tables found, with foreign key constraint defined but no supporting indexes created on the foreign key columns. SQL Server doesnt put an index on foreign key columns by default and indexing foreign key fields in referencing tables is not required. Foreign key columns usage must evaluated to determine whether or not indexing this column will help up increase the current workloads performance by enhancing join performance, reducing table locking (for full table scans) while cascading updates and deletes, etc. */ ; WITH FKTable AS ( SELECT SCHEMA_NAME(po.schema_id) AS'parent_schema_name' , OBJECT_NAME(fkc.parent_object_id) AS'parent_table_name' , OBJECT_NAME(constraint_object_id) AS'constraint_name' , SCHEMA_NAME(ro.schema_id) AS'referenced_schema' , OBJECT_NAME(referenced_object_id) AS'referenced_table_name' , ( SELECT '[' + COL_NAME(k.parent_object_id, parent_column_id) + ']'AS [data()] FROM sys.foreign_key_columns (NOLOCK) AS k INNERJOIN sys.foreign_keys (NOLOCK) ON k.constraint_object_id = object_id AND k.constraint_object_id = fkc.constraint_object_id ORDERBY constraint_column_id FOR XML PATH('') ) AS'parent_colums' , ( SELECT '[' + COL_NAME(k.referenced_object_id, referenced_column_id) + ']'AS [data()] FROM sys.foreign_key_columns (NOLOCK) AS k INNERJOIN sys.foreign_keys (NOLOCK) ON k.constraint_object_id = object_id AND k.constraint_object_id = fkc.constraint_object_id ORDERBY constraint_column_id FOR XML PATH('') ) AS'referenced_columns' FROM sys.foreign_key_columns fkc ( NOLOCK ) INNERJOIN sys.objects po ( NOLOCK ) ON fkc.parent_object_id = po.object_id INNERJOIN sys.objects ro ( NOLOCK ) ON fkc.referenced_object_id = ro.object_id WHERE po.type = 'U' AND ro.type = 'U' GROUPBY po.schema_id , ro.schema_id , fkc.parent_object_id , constraint_object_id , referenced_object_id ), /* Index Columns */ IndexColumnsTable AS ( SELECT SCHEMA_NAME(o.schema_id) AS'schema_name' , OBJECT_NAME(o.object_id) AS TableName , ( SELECT CASE key_ordinal WHEN 0 THENNULL ELSE'[' + COL_NAME(k.object_id, column_id) + ']' ENDAS [data()] FROM sys.index_columns (NOLOCK) AS k WHERE k.object_id = i.object_id AND k.index_id = i.index_id ORDERBY key_ordinal , column_id FOR XML PATH('') ) AS cols FROM sys.indexes (NOLOCK) AS i INNERJOIN sys.objects o ( NOLOCK ) ON i.object_id = o.object_id INNERJOIN sys.index_columns ic ( NOLOCK ) ON ic.object_id = i.object_id AND ic.index_id = i.index_id INNERJOIN sys.columns c ( NOLOCK ) ON c.object_id = ic.object_id AND c.column_id = ic.column_id WHERE o.type = 'U' AND i.index_id > 0 GROUPBY o.schema_id , o.object_id , i.object_id , i.name , i.index_id , i.type ), FKWithoutIndexTable AS ( SELECT fk.parent_schema_name AS SchemaName , fk.parent_table_name AS TableName , fk.referenced_schema AS ReferencedSchemaName , fk.referenced_table_name AS ReferencedTableName , fk.constraint_name AS ConstraintName , fk.referenced_columns AS Referenced_Columns , fk.parent_colums AS Parent_Columns FROM FKTable fk WHERE NOTEXISTS ( SELECT 1 FROM IndexColumnsTable ict WHERE fk.parent_schema_name = ict.schema_name AND fk.parent_table_name = ict.TableName AND fk.parent_colums = LEFT(ict.cols, LEN(fk.parent_colums)) ) ) SELECT @@SERVERNAME AS InstanceName , DB_NAME() AS DatabaseName , SchemaName , TableName , Parent_Columns , ReferencedSchemaName , ReferencedTableName , Referenced_Columns , ConstraintName INTO #ForeignKeyWithOutIndex FROM FKWithoutIndexTable ORDERBY DatabaseName , SchemaName , TableName; --输出临时表数据 SELECT * FROM #ForeignKeyWithOutIndex; --生成外键字段缺少的索引,请抽查、检验,确认后批量执行 SELECT 'CREATE INDEX IX_' + LTRIM(RTRIM(TableName)) + '_' + SUBSTRING(Parent_Columns, 2, LEN(Parent_Columns) - 2) + ' ON ' + LTRIM(RTRIM(SchemaName)) + '.' + LTRIM(RTRIM(TableName)) + '(' + Parent_Columns + ');' FROM #ForeignKeyWithOutIndex; --删除临时表 DROPTABLE #ForeignKeyWithOutIndex; 在创建这些索引前最好检查、确认一下,外键字段创建索引能提高性能,但是肯定也要特殊的场景和上下文不适合,所以最好根据实际情况决定。索引创建之后,通过监控工具监控一下数据库性能、等待事件的变化。 参考资料: http://stackoverflow.com/questions/3650690/should-every-sql-server-foreign-key-have-a-matching-index http://sqlblog.com/blogs/greg_low/archive/2008/07/29/indexing-foreign-keys-should-sql-server-do-that-automatically.aspx http://www.sqlskills.com/blogs/kimberly/when-did-sql-server-stop-putting-indexes-on-foreign-key-columns/

优秀的个人博客,低调大师

Chromium Viz 浅析 - SkiaRenderer &amp; SkiaOutputSurface

关于 Viz 的系列文章 Chromium Viz 浅析 - 介绍篇Chromium Viz 浅析 - 合成器架构篇 Chromium 关于光栅化和合成的一些主要性能优化项目包括 OOPD (Out of Process Display Compositor,进程外 Display 合成器), OOPR (Out of Process Rasterization,进程外光栅化) 和 SkiaRenderer。 我们在Chromium Viz 浅析 - 合成器架构篇介绍过 OOPD,它的主要目的是将 Display Compositor 从 Browser 进程迁移到 Viz 进程(也就是原来的 GPU 进程),Browser 则变成了 Viz 的一个 Client,Renderer 跟 Viz 建立链接(CompositorFrameS

优秀的个人博客,低调大师

Centos&amp;Ubuntu 安装 Impala

环境如下 linux版本:ubuntu 14.04 LTS jdk版本:jdk1.7.0_67 hadoop版本:hadoop-2.0.0-cdh4.1.0.tar.gz impala版本:impala_1.4.0-1.impala1.4.0.p0.7~precise-impala1.4.0_all.deb hadoop-cdh下载地址:http://archive.cloudera.com/cdh4/cdh/4/ ubuntu impala下载地址:http://archive.cloudera.com/impala/ubuntu/precise/amd64/impala/pool/contrib/i/impala/ 建议:hadoop的版本不要太高,还是用cdh4比较靠谱,之前我用了apache-hadoop2.7,hadoop2.6-cdh5,impala启动时都报了错误,原因为protobuf不兼容,该错误我查了几天。 为了方便,以下教程我在root用户下进行,及root作为使用用户。 1、安装hadoop # apt-get install openssh-server 设置免密码登录 # ssh-keygen -t rsa -P "" # cat .ssh/id_rsa.pub >> .ssh/authorized_keys 下载jdk-7u67-linux-x64.tar.gz,解压后配置环境变量 # tar -vzxf jdk-7u67-linux-x64.tar.gz # mkdir /usr/java # mv jdk1.7.0_67 /usr/java/ # vi /etc/profile export JAVA_HOME=/usr/java/jdk1.7.0_67 export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib # tar -xvzf hadoop-2.0.0-cdh4.1.0.tar.gz # mv hadoop-2.0.0-cdh4.1.0 /usr/local/ # vi /etc/profile export HADOOP_HOME=/usr/local/hadoop-2.0.0-cdh4.1.0 export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH export HADOOP_PREFIX=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export HADOOP_YARN_HOME=$HADOOP_HOME export HADOOP_LIB=$HADOOP_HOME/lib export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib" # source /etc/profile 2、配置hadoop,伪分布式配置 # cd /etc/local/hadoop-2.0.0-cdh4.1.0 # cd /etc/hadoop # vi hadoop-env.sh export JAVA_HOME=/usr/java/jdk1.7.0_67 # vi core-site.xml <configuration> <property> <name>hadoop.tmp.dir</name> <!-- 临时目录 --> <value>file:/root/hadoop/tmp</value> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration> # vi hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <!-- namenode目录--> <value>file:/root/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <!-- datanode目录 --> <value>file:/root/hadoop/tmp/dfs/data</value> </property> </configuration> # cd ~ # mkdir -p hadoop/tmp/dfs/name # mkdir hadoop/tmp/dfs/data 注:需要保证用户为hadoop-2.0.0-cdh4.1.0目录、namenode目录和datanode目录的拥有者 3、启动hadoop 格式化namenode # hadoop namenode -format # start-all.sh (该命令在$HADOOP_HOME/sbin) 测试 # hadoop fs -ls / #查看hdfs的/目录 # hadoop fs -mkdir /user #在hdfs创建目录user # hadoop fs -put a.out /user #在hdfs的/user下上传文件a.out # hadoop fs -get /user/a.out #下载a.out文件到本地 关闭hadoop # stop-all.sh 4、安装impala 修改源: # vi /etc/apt/sources.list.d/cloudera.list deb [arch=amd64] http://archive.cloudera.com/cm5/ubuntu/trusty/amd64/cm trusty-cm5 contrib deb-src http://archive.cloudera.com/cm5/ubuntu/trusty/amd64/cm trusty-cm5 contrib deb [arch=amd64] http://archive.cloudera.com/impala/ubuntu/precise/amd64/impala precise-impala1 contrib deb-src http://archive.cloudera.com/impala/ubuntu/precise/amd64/impala precise-impala1 contrib # apt-get update # apt-get install bigtop-utils 用apt-get下载impala太慢了,可在http://archive.cloudera.com/impala/ubuntu/precise/amd64/impala/pool/contrib/i/impala/ 下载相应安装包。 # dpkg -i impala_1.4.0-1.impala1.4.0.p0.7~precise-impala1.4.0_all.deb # dpkg -i impala-server_1.4.0-1.impala1.4.0.p0.7-precise-impala1.4.0_all.deb # dpkg -i impala-state-store_1.4.0-1.impala1.4.0.p0.7-precise-impala1.4.0_all.deb # dpkg -i impala-catalog_1.4.0-1.impala1.4.0.p0.7-precise-impala1.4.0_all.deb # apt-get install python-setuptools 出错则根据错误修改(apt-get -f install) # dpkg -i impala-shell_1.4.0-1.impala1.4.0.p0.7-precise-impala1.4.0_all.deb impala安装完毕。 5、impala配置 # vi /etc/hosts 127.0.0.1 localhost 在$HADOOP_HOME/etc/hadoop下将core-site.xml及hdfs-site.xml拷贝到/etc/impala/conf # cd /usr/local/hadoop-2.0.0-cdh4.1.0/etc/hadoop/ # cp core-site.xml hdfs-site.xml /etc/impala/conf # cd /etc/impala/conf # vi hdfs-site.xml 增加: <property> <name>dfs.client.read.shortcircuit</name> <value>true</value> </property> <property> <name>dfs.domain.socket.path</name> <value>/var/run/hadoop-hdfs/dn._PORT</value> </property> <property> <name>dfs.datanode.hdfs-blocks-metadata.enabled</name> <value>true</value> </property> <property> <name>dfs.client.use.legacy.blockreader.local</name> <value>true</value> </property> <property> <name>dfs.datanode.data.dir.perm</name> <value>750</value> </property> <property> <name>dfs.block.local-path-access.user</name> <value>impala</value> </property> <property> <name>dfs.client.file-block-storage-locations.timeout</name> <value>3000</value> </property> # mkdir /var/run/hadoop-hdfs 注:保证/var/run/hadoop-hdfs为用户所有 6、impala启动 # service impala-state-store start # service impala-catalog start # service impala-server start 查看是否启动: # ps -ef | grep impala 错误信息查看日志 启动impala-shell # impala-shell -i localhost --quiet [localhost:21000] > select version(); ... [localhost:21000] > select current_database(); ... impala-shell操作见http://www.cloudera.com/documentation/enterprise/latest/topics/impala_tutorial.html#tutorial 7、impala日志错误处理 impala日志位置为:/var/log/impala impala启动错误1: Failed on local exception: com.google.protobuf.InvalidProtocolBufferException: Message missing required fields: callId, status; Host Details : local host is: "database32/127.0.1.1"; destination host is: "localhost":9000; 原因: hadoop2.6的protobuf版本为2.5,为impala用的版本为protobuf2.4 解决: 将hadoop的版本降低时与impala的版本匹配,这里impala采用二进制方式安装,无法 重新编译,解决为将hadoop的版本与impala版本一致。我下载的hadoop为hadoop-2.0.0-cdh4.1.0,impala为impala_1.4.0 impala启动错误2: dfs.client.read.shortcircuit is not enabled because - dfs.client.use.legacy .blockreader.local is not enabled 原因: hdfs-site.xml配置出错 解决: 将dfs.datanode.hdfs-blocks-metadata.enabled选项设为true impala启动错误3: Impalad services did not start correctly, exiting. Error: Couldn't open transport for 127.0.0.1:24000(connect() failed: Connection refused) 原因: 未启动impala-state-store,impala-catalog 解决: # service impala-state-store start # service impala-catalog start # service impala start Centos部分: 安装Impala过程 摘要:与Hive类似,Impala也可以直接与HDFS和HBase库直接交互。只不过Hive和其它建立在MapReduce上的框架适合需要长时间运行的批处理任务。例如:那些批量提取,转化,加载(ETL)类型的Job,而Impala主要用于实时查询。 与Hive类似,Impala也可以直接与HDFS和HBase库直接交互。只不过Hive和其它建立在MapReduce上的框架适合需要长时间运行的批处理任务。例如:那些批量提取,转化,加载(ETL)类型的Job,而Impala主要用于实时查询。 Hadoop集群各节点的环境设置及安装过程见使用yum安装CDH Hadoop集群,参考这篇文章。 1. 环境 CentOS 6.4 x86_64 CDH 5.0.1 jdk1.6.0_31 集群规划为3个节点,每个节点的ip、主机名和部署的组件分配如下: 192.168.56.121 cdh1 NameNode、Hive、ResourceManager、HBase、impala 192.168.56.122 cdh2 DataNode、SSNameNode、NodeManager、HBase、impala 192.168.56.123 cdh3 DataNode、HBase、NodeManager、impala 2. 安装 目前,CDH 5.0.1中 impala 版本为1.4.0,下载repo文件到 /etc/yum.repos.d/: 如果你安装的是 CDH4,请下载Red Hat/CentOS 6 如果你安装的是 CDH5,请下载Red Hat/CentOS 6 然后,可以执行下面的命令安装所有的 impala 组件。 $ sudo yum install impala impala-server impala-state-store impala-catalog impala-shell -y 但是,通常只是在需要的节点上安装对应的服务: 在 hive metastore 所在节点安装impala-state-store和impala-catalog 在 DataNode 所在节点安装 impala-server 和 impala-shell 3. 配置 3.1 修改配置文件 查看安装路径: $ find / -name impala /var/run/impala /var/lib/alternatives/impala /var/log/impala /usr/lib/impala /etc/alternatives/impala /etc/default/impala /etc/impala /etc/default/impala impalad的配置文件路径由环境变量IMPALA_CONF_DIR指定,默认为/usr/lib/impala/conf,impala 的默认配置在/etc/default/impala,修改该文件中的IMPALA_CATALOG_SERVICE_HOST和IMPALA_STATE_STORE_HOST IMPALA_CATALOG_SERVICE_HOST=cdh1 IMPALA_STATE_STORE_HOST=cdh1 IMPALA_STATE_STORE_PORT=24000 IMPALA_BACKEND_PORT=22000 IMPALA_LOG_DIR=/var/log/impala IMPALA_CATALOG_ARGS=" -log_dir=${IMPALA_LOG_DIR} " IMPALA_STATE_STORE_ARGS=" -log_dir=${IMPALA_LOG_DIR} -state_store_port=${IMPALA_STATE_STORE_PORT}" IMPALA_SERVER_ARGS=" \ -log_dir=${IMPALA_LOG_DIR} \ -catalog_service_host=${IMPALA_CATALOG_SERVICE_HOST} \ -state_store_port=${IMPALA_STATE_STORE_PORT} \ -use_statestore \ -state_store_host=${IMPALA_STATE_STORE_HOST} \ -be_port=${IMPALA_BACKEND_PORT}" ENABLE_CORE_DUMPS=false # LIBHDFS_OPTS=-Djava.library.path=/usr/lib/impala/lib # MYSQL_CONNECTOR_JAR=/usr/share/java/mysql-connector-java.jar # IMPALA_BIN=/usr/lib/impala/sbin # IMPALA_HOME=/usr/lib/impala # HIVE_HOME=/usr/lib/hive # HBASE_HOME=/usr/lib/hbase # IMPALA_CONF_DIR=/etc/impala/conf # HADOOP_CONF_DIR=/etc/impala/conf # HIVE_CONF_DIR=/etc/impala/conf # HBASE_CONF_DIR=/etc/impala/conf 设置 impala 可以使用的最大内存:在上面的IMPALA_SERVER_ARGS参数值后面添加-mem_limit=70%即可。 如果需要设置 impala 中每一个队列的最大请求数,需要在上面的IMPALA_SERVER_ARGS参数值后面添加-default_pool_max_requests=-1,该参数设置每一个队列的最大请求数,如果为-1,则表示不做限制。 在节点cdh1上拷贝hive-site.xml、core-site.xml、hdfs-site.xml至/usr/lib/impala/conf目录并作下面修改在hdfs-site.xml文件中添加如下内容: <property> <name>dfs.client.read.shortcircuit</name> <value>true</value> </property> <property> <name>dfs.domain.socket.path</name> <value>/var/run/hadoop-hdfs/dn._PORT</value> </property> <property> <name>dfs.datanode.hdfs-blocks-metadata.enabled</name> <value>true</value> </property> 同步以上文件到其他节点。 3.2 创建socket path 在每个节点上创建/var/run/hadoop-hdfs: $ mkdir -p /var/run/hadoop-hdfs 拷贝postgres jdbc jar: $ ln -s /usr/share/java/postgresql-jdbc.jar /usr/lib/impala/lib/ 3.3 用户要求 impala 安装过程中会创建名为 impala 的用户和组,不要删除该用户和组。 如果想要 impala 和 YARN 和 Llama 合作,需要把 impala 用户加入 hdfs 组。 impala 在执行 DROP TABLE 操作时,需要把文件移到到 hdfs 的回收站,所以你需要创建一个 hdfs 的目录 /user/impala,并将其设置为impala 用户可写。同样的,impala 需要读取 hive 数据仓库下的数据,故需要把 impala 用户加入 hive 组。 impala 不能以 root 用户运行,因为 root 用户不允许直接读。 创建 impala 用户家目录并设置权限: sudo -u hdfs hadoop fs -mkdir /user/impala sudo -u hdfs hadoop fs -chown impala /user/impala 查看 impala 用户所属的组: $ groups impala impala : impala hadoop hdfs hive 由上可知,impala 用户是属于 imapal、hadoop、hdfs、hive 用户组的 4. 启动服务 在 cdh1节点启动: $ service impala-state-store start $ service impala-catalog start 如果impalad正常启动,可以在/tmp/ impalad.INFO查看。如果出现异常,可以查看/tmp/impalad.ERROR定位错误信息。 5. 使用shell 使用impala-shell启动Impala Shell,连接 cdh1,并刷新元数据 >impala-shell [Not connected] >connect cdh1 [cdh1:21000] >invalidate metadata [cdh2:21000] >connect cdh2 [cdh2:21000] >select * from t 当在 Hive 中创建表之后,第一次启动 impala-shell 时,请先执行INVALIDATE METADATA语句以便 Impala 识别出新创建的表(在 Impala 1.2 及以上版本,你只需要在一个节点上运行INVALIDATE METADATA,而不是在所有的 Impala 节点上运行)。 你也可以添加一些其他参数,查看有哪些参数: # impala-shell -h Usage: impala_shell.py [options] Options: -h, --help show this help message and exit -i IMPALAD, --impalad=IMPALAD <host:port> of impalad to connect to -q QUERY, --query=QUERY Execute a query without the shell -f QUERY_FILE, --query_file=QUERY_FILE Execute the queries in the query file, delimited by ; -k, --kerberos Connect to a kerberized impalad -o OUTPUT_FILE, --output_file=OUTPUT_FILE If set, query results will written to the given file. Results from multiple semicolon-terminated queries will be appended to the same file -B, --delimited Output rows in delimited mode --print_header Print column names in delimited mode, true by default when pretty-printed. --output_delimiter=OUTPUT_DELIMITER Field delimiter to use for output in delimited mode -s KERBEROS_SERVICE_NAME, --kerberos_service_name=KERBEROS_SERVICE_NAME Service name of a kerberized impalad, default is 'impala' -V, --verbose Enable verbose output -p, --show_profiles Always display query profiles after execution --quiet Disable verbose output -v, --version Print version information -c, --ignore_query_failure Continue on query failure -r, --refresh_after_connect Refresh Impala catalog after connecting -d DEFAULT_DB, --database=DEFAULT_DB Issue a use database command on startup. 例如,你可以在连接时候字段刷新: $ impala-shell -r Starting Impala Shell in unsecure mode Connected to 192.168.56.121:21000 Server version: impalad version 1.1.1 RELEASE (build 83d5868f005966883a918a819a449f636a5b3d5f) Invalidating Metadata Welcome to the Impala shell. Press TAB twice to see a list of available commands. Copyright (c) 2012 Cloudera, Inc. All rights reserved. (Shell build version: Impala Shell v1.1.1 (83d5868) built on Fri Aug 23 17:28:05 PDT 2013) Query: invalidate metadata Query finished, fetching results ... Returned 0 row(s) in 5.13s [192.168.56.121:21000] > 使用 impala 导出数据: $ impala-shell -i '192.168.56.121:21000' -r -q "select * from test" -B --output_delimiter="\t" -o result.txt 版权声明:本文内容由互联网用户自发贡献,版权归作者所有,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至: yqgroup@service.aliyun.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册