1.配置/etc/yum.repos.d

clouder-kudu.repo

[cloudera-kudu]
# Packages for Cloudera's Distribution for kudu, Version 5, on RedHat or CentOS 6 x86_64
name=Cloudera's Distribution for kudu, Version 5
baseurl=http://archive.cloudera.com/kudu/redhat/6/x86_64/kudu/5/
gpgkey = http://archive.cloudera.com/kudu/redhat/6/x86_64/kudu/RPM-GPG-KEY-cloudera
gpgcheck = 1

cloudera-impala.repo 

[cloudera-impala]
name=Impala
baseurl= http://archive.cloudera.com/impala/redhat/6/x86_64/impala/2.0.0/
gpgkey = http://archive.cloudera.com/impala/redhat/6/x86_64/impala/2.0.0/RPM-GPG-KEY-cloudera
gpgcheck = 1

2.安装kudu

yum install kudu #Kudu的基本包 
yum install kudu-master # KuduMaster 
yum install kudu-tserver # KuduTserver 
yum install kudu-client0 #Kudu C ++客户端共享库 
yum install kudu-client-devel # Kudu C ++客户端共享库 SDK

yum install ntpd -y

yum install cyrus-sasl*

3.安装impala

yum install impala

yum install impala-server

yum install impala-catalog

yum install impala-shell

yum install impala-state-store

yum install impala-udf-devel

配置protobuf2.5:https://github.com/google/protobuf/releases/

4.启动kudu

安装完成之后,在/etc/kudu/conf目录下有两个文件:master.gflagfile和tserver.gflagfile
 
master.gflagfile的配置修改为(目录可以根据自己的习惯来制定,但在启动kudu之前一定要事先创建好,否则master无法正常启动)
 
--fromenv=rpc_bind_addresses
--fromenv=log_dir
 
--fs_wal_dir=/home/data/kudu/master
--fs_data_dirs=/home/data/kudu/master
 
tserver.gflagfile修改为:
 
--fromenv=rpc_bind_addresses
--fromenv=log_dir
 
--fs_wal_dir=/home/data/kudu/tserver
--fs_data_dirs=/home/data/kudu/tserver
--tserver_master_addrs=hadoop1:7051
 
注意,这里的--tserver_master_addrs指明了集群中master的地址,指向同一个master的tserver形成了一个kudu集群
 
可能遇到的问题:
 
根据官网的介绍,配置完成之后就可以启动kudu了,启动master和tserver的命令分别为:
 
sudo service kudu-master start
sudo service kudu-tserver start
sudo service ntpd start
再次启动kudu,还是报错,查看日志,发现是对/home/data/kudu没有操作权限。这个目录是我用root账号创建的,但kudu的启动默认会使用一个叫kudu的用户。执行下列命令来改变目录的所有者:
cd /home/data/kudu
chown -R kudu:kudu ./*
 
再次执行启动master(在hadoop1这台服务器上启动)和tserver(在hadoop1,hadoop2,hadoop3这三台服务器上都启动)的命令,终于成功了。
 
在浏览器上通过http://<_host_name_>:8051 和 http://<_host_name_>:8050 可以分别查看master和tserver的详情

5.启动impala

# service impala-state-store start
# service impala-catalog start
# service impala start

impalad - Impala的守护进程. 计划执行数据查询在HDFS和HBase上。 在集群中的每个数据节点上运行一个守护进程

statestored - 跟踪集群中的所有impala实例的状态,在集群中的一个节点上运行该程序。

catalogd - Metadata协调服务 impala-shell - 命令行接口

配置环境
  1.修改/etc/default/bigtop-utils文件
    export JAVA_HOME=/usr/java/jdk1.8 //设置java home
  2.修改/etc/default/impala文件
    IMPALA_CATALOG_SERVICE_HOST=10.1.6.69 //为catalog主机Ip 也可以主机名 注意配置hosts
    IMPALA_STATE_STORE_HOST=10.1.6.69  //为state-store主机Ip
    IMPALA_LOG_DIR=/data/log/impala //配置日志路径 默认为/var/log/impala
  3.在/etc/impala/conf.dist目录下 添加core-site.xml和hdfs-site.xml文件(建议从hadoop配置文件中拷贝)
    其中core-site.xml添加内容如下:
      <!-- impala -->
      <property>
        <name>dfs.client.read.shortcircuit</name> 
        <value>true</value>
      </property>
      <property>
        <name>dfs.client.read.shortcircuit.skip.checksum</name>
        <value>false</value>
      </property>
      <property> 
        <name>dfs.datanode.hdfs-blocks-metadata.enabled</name> 
        <value>true</value>
      </property>

    hdfs-site.xml添加内容如下:
      <!--impala-->
      <property>
        <name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
        <value>true</value>
      </property>
      <property>
        <name>dfs.block.local-path-access.user</name>
        <value>impala</value>
      </property>
      <property>
        <name>dfs.client.file-block-storage-locations.timeout.millis</name>
        <value>60000</value>
      </property>

5.1.启动服务
  service impala-catalog start
  service impala-state-store start
  service impala-server start
5.2.验证
  第一种方式:
    ps -aux|grep impala-catalog
    ps -aux|grep impala-state
    ps -aux|grep impalad
  第二种方式:
    impala-shell(默认连接本机的server)
    impala-shell -i 172.16.104.120 //连接指定ip的server impala-shell 如果是no connect状态 可以输入connect 172.16.104.120进行连接
   第三种方式(webUI):
    172.16.104.120:25000
    172.16.104.120:25010
    172.16.104.120:25020
5.3.其他
  Impala Daemon(Impala 守护进程前端端口):21000 >> impala-shell, Beeswax, Cloudera ODBC 1.2 驱动 用于传递命令和接收结果
  Impala Daemon(Impala 守护进程前端端口):21050 >> 被使用 JDBC 或 Cloudera ODBC 2.0 及以上驱动的诸如 BI 工具之类的应用用来传递命令和接收结果
  Impala Daemon(Impala 守护进程后端端口):22000 >> Impala 守护进程用该端口互相通讯
  Impala Daemon(StateStore订阅服务端口):23000 >> Impala 守护进程监听该端口接收来源于 state store 的更新
  StateStore Daemon(StateStore 服务端口):24000 >> State store 监听该端口的 registration/unregistration 请求
  Catalog Daemon(StateStore 服务端口):26000 >> 目录服务使用该端口与Imp

  Impala Daemon(HTTP 服务器端口):25000 >> Impala web 接口,管理员用于监控和故障排除
  StateStore Daemon(HTTP 服务器端口):25010 >> StateStore web 接口,管理员用于监控和故障排除
  Catalog Daemon(HTTP 服务器端口):25020 >> 目录服务 web 接口,管理员用于监控和故障排除,Impala 1.2 开始使用

6.注意事项

使用二进制包安装Impala,与Hadoop 2.4.1配合使用。但没有成功。Hadoop 2.4.1使用的Protobuf库的版本为2.5,而Impala使用的Profobuf库的版本为2.4a。二者版本不匹配,impalad启动失败

使用Hadoop的protobuf库替掉impala的lib目录下的其他版本protobuf,仍然没有解决问题。

怀疑是Impala版本代码中,已经基于老版本protobuf的API进行开发。需要基于新版本protobuf,重新编译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

7.Cloudera Impala 编译、安装与配置

mpala是由Cloudera开发的高性能实时计算工具,相比Hive性能提升了几十、甚至近百倍,基本思想是将计算分发到每个 Datanode所在的节点,依靠内存实现数据的缓存进行快速计算,类似的系统还有Berkeley的Shark。从实际测试来看,Impala效率确实 不错,由于Impala大量使用C++实现,不使用CDH的Image而自己编译安装要费不少功夫,这里记录一下安装配置过程和碰到的一些问题。我在测试 时候使用的是CentOS6.4。 
一些基本的安装步骤在这里,但我在安装的时候碰到一些问题,这里再详细说明一下过程。

1.安装所需的依赖lib,这一步没有什么不同

sudo yum install boost-test boost-program-options libevent-devel automake libtool flex bison gcc-c++ openssl-devel make cmake doxygen.x86_64 glib-devel boost-devel python-devel bzip2-devel svn libevent-devel cyrus-sasl-devel wget git unzip

2.安装LLVM ,按照流程做即可,注意要在多台机器上编译安装Impala的话,只用在一台机器上执行下面蓝色的部分,再把llvm分发到多台机器上执行后面红色部分的指令就可以了,没必要每个机器都通过svn下载一遍源代码,很费时。

wget http://llvm.org/releases/3.2/llvm-3.2.src.tar.gz 
tar xvzf llvm-3.2.src.tar.gz 
cd llvm-3.2.src/tools 
svn co http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_32/final/ clang 
cd ../projects 
svn co http://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_32/final/ compiler-rt
cd .. 
./configure –with-pic 
make -j4 REQUIRES_RTTI=1 
sudo make install

3.安装Maven ,这个没什么好说的,按照步骤,设置一下环境变量即可,Maven是为了后面build impala源代码用的。

wget http://www.fightrice.com/mirrors/apache/maven/maven-3/3.0.4/binaries/apache-maven-3.0.4-bin.tar.gz 
tar xvf apache-maven-3.0.4.tar.gz && sudo mv apache-maven-3.0.4 /usr/local

修改~/.bashrc,增加maven环境变量

export M2_HOME=/usr/local/apache-maven-3.0.4 
export M2=$M2_HOME/bin 
export PATH=$M2:$PATH

更新环境变量,查看mvn版本是否正确

source ~/.bashrc 
mvn -version

4.下载Impala源代码

git clone https://github.com/cloudera/impala.git

5.设置Impala环境变量,编译时需要

cd impala 
./bin/impala-config.sh

6.下载impala依赖的第三方package

cd thirdparty 
./download_thirdparty.sh

注意这里其中一个包cyrus-sasl-2.1.23可能下载失败,可以自行搜索(CSDN里面就有)下载下来然后解压缩到thirdparty 文件夹,最好是在执行完download_thirdparty.sh之后做这一步,因为download_thirdparty.sh会把所有目录下下 载下来的tar.gz给删除掉。

7.理论上现在可以开始build impala了 ,但是实际build过程中可能会出现问题,我碰到的问题和 Boost相关的(具体错误不记得了),最后发现是由于boost版本太低导致的,CentOS 6.2系统默认yum源中的boost和boost-devel版本是1.41,但是impala编译需要1.44以上的版本,因此需要做的是自己重新编 译boost,我用的是boost 1.46版本。

#删除已安装的boost和boost-devel 
yum remove boost 
yum remove boost-devel 
#下载boost 
#可以去(http://www.boost.org/users/history/)下载boost 
#下载后解压缩 
tar xvzf boost_1_46_0.tar.gz 
mv boost_1_46_0 /usr/local/ 
cd /usr/include 
./bootstrap.sh 
./bjam 
#执行后若打印以下内容,则表示安装成功 
# The Boost C++ Libraries were successfully built! 
# The following directory should be added to compiler include paths: 
# /usr/local/boost_1_46_0 
# The following directory should be added to linker library paths: 
# /usr/local/boost_1_46_0/stage/lib 
#现在还需要设置Boost环境变量和Impala环境变量

export BOOST_ROOT=’/usr/local/boost_1_46_0′ 
export IMPALA_HOME=’/home/extend/impala’

#注意一下,这里虽然安装了boost,但是我在实际使用的时候,编译还是会报错的,报的错误是找不到这个包:#libboost_filesystem-mt.so,这个包是由boost-devel提供的,所以我的做法是把boost-devel给重新装上 
#我没有试过如果之前不删除boost-devel会不会有问题,能确定的是按这里写的流程做是没问题的

yum install boost-devel

8.现在终于可以编译impala了

cd $IMPALA_HOME 
./build_public.sh -build_thirdparty 
#编译首先会编译C++部分,然后再用mvn编译java部分,整个过程比较慢,我在虚拟机上大概需要1-2个小时。 
#Impala编译完后的东西在be/build/debug里面

9.启动impala_shell需要用到的Python包

#第一次执行impalad_shell可能会报错,这里需要安装python的两个包:thrift和prettytable,使用easy_install即可 
easy_install prettytable 
easy_install thrift

10. 如果你以为到这里就万事大吉就太天真了,在配置、启动、使用Impala的时候还会有很多奇葩的问题;

问题1:Hive和Hadoop使用的版本 
CDH对版本的依赖要求比较高,为了保证Impala正常运行,强烈建议使用Impala里面thirdparty目录中自带的Hadoop(native lib已经编译好的)和Hive版本。 
Hadoop的配置文件在$HADOOP_HOME/etc/hadoop中,要注意的是需要启用native lib

#修改hadoop的core-site.xml,除了这个选项之外,其他配置和问题2中的core-site.xml一致 
<property > 
  <name > hadoop.native.lib </name > 
  <value > true </value > 
  <description > Should native hadoop libraries, if present, be used. </description > 
</property >

问题2:Impala的配置文件位置 
Impala默认使用的配置文件路径是在bin/set-classpath.sh中配置的,建议把CLASSPATH部分改成

CLASSPATH=\ 
$IMPALA_HOME/conf:\ 
$IMPALA_HOME/fe/target/classes:\ 
$IMPALA_HOME/fe/target/dependency:\ 
$IMPALA_HOME/fe/target/test-classes:\ 
${HIVE_HOME}/lib/datanucleus-core-2.0.3.jar:\ 
${HIVE_HOME}/lib/datanucleus-enhancer-2.0.3.jar:\ 
${HIVE_HOME}/lib/datanucleus-rdbms-2.0.3.jar:\ 
${HIVE_HOME}/lib/datanucleus-connectionpool-2.0.3.jar:

即要求Impala使用其目录下的Conf文件夹作为配置文件,然后创建一下Conf目录,把3样东西拷贝进来:core-site.xml、hdfs-site.xml、hive-site.xml。 
core-site.xml的配置,下面几个选项是必须要配置的,

<?xml version = "1.0" ?> 
<?xml-stylesheet type = "text/xsl" href = "configuration.xsl" ?> 
<configuration > 
<property > 
<name > fs.defaultFS </name > 
<value > hdfs://10.200.4.11:9000 </value > 
</property > 
<property > 
<name > dfs.client.read.shortcircuit </name > 
<value > true </value > 
</property > 
<property > 
<name > dfs.client.use.legacy.blockreader.local </name > 
<value > false </value > 
</property > 
<property > 
<name > dfs.client.read.shortcircuit.skip.checksum </name > 
<value > false </value > 
</property > 
</configuration >

hdfs-site.xml的配置

<?xml version = "1.0" encoding = "UTF-8" ?> 
<?xml-stylesheet type = "text/xsl" href = "configuration.xsl" ?> 
<configuration > 
<property > 
<name > dfs.block.local-path-access.user </name > 
<value > ${your user} </value > 
</property > 
<property > 
<name > dfs.datanode.hdfs-blocks-metadata.enabled </name > 
<value > true </value > 
</property > 
<property > 
<name > dfs.datanode.data.dir </name > 
<value > ${yourdatadir} </value > 
</property > 
<property > 
    <name > dfs.client.use.legacy.blockreader.local </name > 
    <value > false </value > 
</property > 
<property > 
    <name > dfs.datanode.data.dir.perm </name > 
    <value > 750 </value > 
</property > 
<property > 
    <name > dfs.client.file-block-storage-locations.timeout </name > 
    <value > 5000 </value > 
</property > 
<property > 
    <name > dfs.domain.socket.path </name > 
    <value > /home/extend/cdhhadoop/dn.8075 </value > 
</property > 
</configuration >

最后是hive-site.xml,这个比较简单,指定使用DBMS为元数据存储即可(impala必须和hive共享元数据,因为impala无 法create table);Hive-site.xml使用MySQL作为metastore的说明在很多地方都可以查到,配置如下:

<?xml version = "1.0" ?> 
<?xml-stylesheet type = "text/xsl" href = "configuration.xsl" ?> 
<configuration > 
<property > 
  <name > javax.jdo.option.ConnectionURL </name > 
  <value > jdbc:mysql://10.28.0.190:3306/impala?createDatabaseIfNotExist=true</value > 
  <description > JDBC connect string for a JDBC metastore </description > 
</property > 
<property > 
  <name > javax.jdo.option.ConnectionDriverName </name > 
  <value > com.mysql.jdbc.Driver </value > 
  <description > Driver class name for a JDBC metastore </description > 
</property > 
<property > 
  <name > javax.jdo.option.ConnectionUserName </name > 
  <value > root </value > 
  <description > username to use against metastore database </description > 
</property > 
<property > 
  <name > javax.jdo.option.ConnectionPassword </name > 
  <value > root </value > 
  <description > password to use against metastore database </description > 
</property > 
</configuration >

记得把mysql-connector的jar包给拷贝到hive的lib里面去,同样也要拷贝给impala ( 拷贝至$IMPALA_HOME/fe/target/dependency)

11.启动Impala 。到此,Impala是可以正常启动的。这里说明一下,官方文档没有说很清楚Impala的Service之间是如何互相协调的,按照官方的步骤,最后通过如下方法来在一台机器上启动Impala Service:

#启动单机impala service 
${IMPALA_HOME}/bin/start-impalad.sh -use_statestore=false 
#启动impala shell 
${IMPALA_HOME}/bin/impala-shell.sh

然后impala-shell就可以连接到localhost进行查询了;注意,这里只是单机查询,可以用来验证你的Impala是否正常work 了;如何启动一个Impala集群,跳到第12步。这里继续说一下可能遇到的问题,我遇到的一个比较奇葩的问题是show tables和count(1)没有问题,但是select * from table的时候impala在读取数据的时候就崩溃了(有时报错could not find method close from class org/apache/hadoop/fs/FSDataInputStream with signature ()V ),这里修改了两个地方解决这个问题:

a.修改impala的set-classpath.sh并移除$IMPALA_HOME/fe/target/dependency目录中除了hadoop-auth-2.0.0-*.jar之外所有hadoop-*开头的jar包。

#把impala dependency中和hadoop相关的包给弄出来,只保留auth 
mv $IMPALA_HOME/fe/target/dependency/hadoo* $IMPALA_HOME 
mv $IMPALA_HOME/hadoop-auth*.jar mv $IMPALA_HOME/fe/target/dependency 
#修改bin/set-classpath.sh,将$HADOOP_HOME中的lib给加入,在set-classpath.sh最后一行export CLASSPATH之前#添加 
for jar in `ls $HADOOP_HOME/share/hadoop/common/*.jar`; do 
CLASSPATH=${CLASSPATH}:$jar 
done 
for jar in `ls $HADOOP_HOME/share/hadoop/yarn/*.jar`; do 
CLASSPATH=${CLASSPATH}:$jar 
done 
for jar in `ls $HADOOP_HOME/share/hadoop/hdfs/*.jar`; do 
CLASSPATH=${CLASSPATH}:$jar 
done 
for jar in `ls $HADOOP_HOME/share/hadoop/mapreduce/*.jar`; do 
CLASSPATH=${CLASSPATH}:$jar 
done 
for jar in `ls $HADOOP_HOME/share/hadoop/tools/lib/*.jar`; do 
CLASSPATH=${CLASSPATH}:$jar 
done

b.注意到Impala对待table的时候只能够使用hive的默认列分隔符,如果在hive里面create table的时候使用了自定义的分隔符,Impala servive就会在读数据的时候莫名其妙的崩溃。

12.启动Impala 集群 
Impala实际上由两部分组成,一个是StateStore,用来协调各个机器计算,相当于Master,然后就是Impalad,相当于Slave,启动方法如下:

#启动statestore 
#方法1,直接利用impala/bin下面的这个python脚本 
#这个脚本会启动一个StateStore,同时启动-s个数量的Impala Service在本机 
$IMPALA_HOME/bin/start-impala-cluster.py -s 1 –log_dir /home/extend/impala/impalaLogs 
#方法2,手动启动StateStore 
$IMPALA_HOME/be/build/debug/statestore/statestored -state_store_port=24000

#启动impala service 
#在每个编译安装了impala的节点上执行命令 
#参数-state_store_host指定启动了stateStore的机器名 
#-nn即namenode,指定hadoop的namenode 
#-nn_port是namenode的HDFS入口端口号 
$IMPALA_HOME/bin/start-impalad.sh -state_store_host=m11 -nn=m11 -nn_port=9000

正常启动之后,访问http://${stateStore_Server}:25010/ 可以看到StateStore的状态,其中的subscribers页面可以看到已经连接上的impala service node;

13.使用Impala客户端 
这一步最简单,随便找一个机器启动

$IMPALA_HOME/bin/impala-shell.sh 
#启动之后可以随便连接一个impala service 
connect m12 
#连接上之后就可以执行show tables之类的操作了 
#需要注意的是,如果hive创建表或更新了表结构,impala的节点是不知道的 
#必须通过客户端连接各个impala service并执行refresh来刷新metadata 
#或者重启所有impala service

impala记录-安装kudu和impala的更多相关文章

  1. 第一章 impala的安装

    目录 第一章 impala的安装 1.impala的介绍 imala基本介绍 impala与hive的关系 impala的优点 impala的缺点: impala的架构以及查询计划 2.impala的 ...

  2. kudu集成impala

    Kudu 与 Apache Impala (孵化)紧密集成,允许开发人员使用 Impala 使用 Impala 的 SQL 语法从 Kudu tablets 插入,查询,更新和删除数据: 安装impa ...

  3. Impala的安装和使用

    通过本地yum源进行安装impala 所有cloudera软件下载地址 http://archive.cloudera.com/cdh5/cdh/5/ http://archive.cloudera. ...

  4. 实战kudu集成impala

    推荐阅读: 论主数据的重要性(正确理解元数据.数据元) CDC+ETL实现数据集成方案 Java实现impala操作kudu 实战kudu集成impala impala基本介绍 ​        im ...

  5. CDH5上安装Hive,HBase,Impala,Spark等服务

    Apache Hadoop的服务的部署比較繁琐.须要手工编辑配置文件.下载依赖包等.Cloudera Manager以GUI的方式的管理CDH集群,提供向导式的安装步骤.因为须要对Hive,HBase ...

  6. cloudera impala编译 安装 配置 启动

    无论是采用GDB调试impala或者尝试修改impala源码,前提都是需要本地环境编译impala,这篇文章详细的分享一下impala编译方法以及编译过程遇到的棘手的问题: 前言: impala官方的 ...

  7. 第1节 IMPALA:7、impala的安装以及配置过程

    6.制作本地yum源 镜像源是centos当中下载相关软件的地址,我们可以通过制作我们自己的镜像源指定我们去哪里下载impala的rpm包,这里我们使用httpd这个软件来作为服务端,启动httpd的 ...

  8. 1.3.4、CDH 搭建Hadoop在安装之前(端口---Impala使用的端口)

    Impala使用的端口 Impala使用下表中列出的TCP端口.在部署Impala之前,请确保在每个系统上打开这些端口. Component Service Port Access Requireme ...

  9. 安装Kudu

    1.默认安装好yum2.需以root身份安装3.安装ntp yum install ntp -y4.启动ntp /etc/init.d/ntpd start|stop|restart5.添加安装包yu ...

随机推荐

  1. HDU 2029 Palindromes _easy version

    http://acm.hdu.edu.cn/showproblem.php?pid=2029 Problem Description “回文串”是一个正读和反读都一样的字符串,比如“level”或者“ ...

  2. Using Android Phone to recover SD card formatted with DD command under linux

    Using Android Phone to recover SD card formatted with DD command under linux 1. Formatted a sd card ...

  3. js原生函数

    arguments:代表所有的形参的集合: 可以通过arguments: cosole.log(arguments):打印所有参数 console.log(arguments[i]);可以通过访问下标 ...

  4. [转载]Linux目录说明

    原作者博客: http://blog.51cto.com/yangrong/1288072 将文字部分转移到自己的目录下便于学习记录 感谢~ 2./目录 目录 描述 / 第一层次结构的根.整个文件系统 ...

  5. Vue 组件化

    根实例└─ TodoList ├─ TodoItem │ ├─ DeleteTodoButton │ └─ EditTodoButton └─ TodoListFooter ├─ ClearTodos ...

  6. 《Effective C#》快速笔记(一)- C# 语言习惯

    目录 一.使用属性而不是可访问的数据成员 二.使用运行时常量(readonly)而不是编译时常量(const) 三.推荐使用 is 或 as 操作符而不是强制类型转换 四.使用 Conditional ...

  7. mxnet,theano与torch的简单比较

    这篇文章我想来比较一下Theano和mxnet,Torch(Torch基本没用过,所以只能说一些直观的感觉).我主要从以下几个方面来计较它们: 1.学习框架的成本,接口设计等易用性方面. 三个框架的学 ...

  8. Django-website 程序案例系列-14 缓存的应用配置文件的写法

    由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5 ...

  9. Link-Cut Tree(LCT)&TopTree讲解

    前言: Link-Cut Tree简称LCT是解决动态树问题的一种数据结构,可以说是我见过功能最强大的一种树上数据结构了.在此与大家分享一下LCT的学习笔记.提示:前置知识点需要树链剖分和splay. ...

  10. LightOJ - 1341 Aladdin and the Flying Carpet (算术基本定理)

    题意: 就是....求a的所有大于b的因子有多少对 算术基本定理求 所有因子 阿欧...偷张图. 注意范围 就好  ..... 解析: 在1 -1012的范围内求大于b的所有a的因子的对数(有几对) ...