1 硬件环境
Ubuntu 14.10 64位
2 软件环境
openjdk-7-jdk
hadoop 2.6.0
zookeeper-3.4.6
hbase-1.0.0
3 机群规划
3.1 zookeeper配置-机器结点
192.168.1.100 1421-0000
192.168.1.106 1421-0003
192.168.1.107 1421-0004
192.168.1.108 1421-0005
192.168.1.109 1421-0006
3.2 hadoop配置-机器结点
192.168.1.100 1421-0000 DN节点,Journal节点,zookeeper节点
192.168.1.101 1421-0001 备NN,DN节点
192.168.1.102 1421-0002 主NN
192.168.1.103 1423-0001 DN节点,主RM
192.168.1.104 1423-0002 DN节点,备RM
192.168.1.105 1423-0003 DN节点,JobHistory
192.168.1.106 1421-0003 DN节点,Journal节点,zookeeper节点
192.168.1.107 1421-0004 DN节点,Journal节点,zookeeper节点
192.168.1.108 1421-0005 DN节点,Journal节点,zookeeper节点
192.168.1.109 1421-0006 DN节点,Journal节点,zookeeper节点
说明:
1.在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。
hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode
这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态
2.hadoop-2.2.0中依然存在一个问题,就是ResourceManager只有一个,存在单点故障,hadoop-2.4.1解决了这个问题,有两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调
4 集群配置
机群的安装步骤大概如下:1 JDK配置;2 SSH免密码登录设置;3 ZooKeeper配置;4 Hadoop配置;5 HBase配置
4.1 Hadoop编译与基本配置
下载Hadoop稳定版,然后用mvn进行编译
mvn package -Pdist,native -DskipTests –Dtar
即可在其目录下:/hadoop-dist/target 就可以找到编译好的 hadoop 了。编译 过程需要 jdk,maven,protobuf 和 cmake 为基础。
SSH 也可通过 apt 进行下载,在生成 key 的时候指定密码为空,其他用回车跳过设置为默认即可,在 home 下的用户目录下,找到.ssh 文件夹,通过创建
文件夹 authorized_keys,主要 Shell 命令如下:
ssh-keygen -t rsa -P ''
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
其中 id_rsa.pub 位于.ssh 文件夹下,为 ssh 公钥,添加为信任方后,即可完成免密码登陆操作。
4.2 ZooKeeper配置
ZooKeeper的配置文件在conf中,名为zoo.conf,主要配置的内容位其log和data的磁盘路径,以及各个节点的基础信息。它本身提供了一个zoo_sample.cfg,我们将他复制一份,命名为
zoo.cfg,然后在其中添加一些配置,下面之列出新增的部分。
dataDir=/home/hadoop/software/cloud/zookeeper-3.4.6/zoodata
dataLogDir=/home/hadoop/software/cloud/zookeeper-3.4.6/zoolog server.0=1421-0000:2888:3888
server.1=1421-0003:2888:3888
server.2=1421-0004:2888:3888
server.3=1421-0005:2888:3888
server.4=1421-0006:2888:3888
接下来需要在每个dataDir目录下新建myid文件,每个文件中输入响应的server.后面的数字,例如在1421-0000中的myid输入0.在各个目录下做相同处理,同时还要在每个文件夹建立dataDir和dataLogDir文件夹,这样ZooKeeper配置完毕
4.3 Hadoop配置
4.3.1 将hadoop_home添加到系统环境变量中
4.3.2 配置hadoop-env.sh,添加JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-1.7.-openjdk-amd64
4.3.3 配置core-site.xml,主要配置ha.zookeeper.quorum等
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-cluster</value>
</property> <property>
<name>ha.zookeeper.quorum</name>
<value>-:,-:,-:,-:,-:</value>
</property> <property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/software/cloud/hadoop-2.6./tmp</value>
<description>
adoop的临时目录,其它目录会基于此路径。本地目录。只可以设置一个值;建议设置到一个足够空间的地方,而不是默认的/tmp下,服务端参数,修改需重启。本地路径
</description>
</property>
</configuration>
4.3.4 配置hdfs-site.xml,主要配置 dfs.nameservices、hdfs HA 特性、hdfs 副本数和 hdfs的 name 与 data 文件的磁盘存放位置,以及 SSH 文件夹位置。
<configuration> <property>
<name>dfs.nameservices</name>
<value>hadoop-cluster</value>
<description>指定命名空间名称,可随易取</description>
</property> <property>
<name>dfs.ha.namenodes.hadoop-cluster</name>
<value>nn1,nn2</value>
<description>在命名空间下指定NameNode逻辑名</description>
</property> <property>
<name>dfs.namenode.rpc-address.hadoop-cluster.nn1</name>
<value>-:</value>
<description></description>
</property> <property>
<name>dfs.namenode.rpc-address.hadoop-cluster.nn2</name>
<value>-:</value>
<description></description>
</property> <property>
<name>dfs.namenode.http-address.hadoop-cluster.nn1</name>
<value>-:</value>
<description></description>
</property> <property>
<name>dfs.namenode.http-address.hadoop-cluster.nn2</name>
<value>-:</value>
<description></description>
</property> <property>
<name>dfs.namenode.servicerpc-address.hadoop-cluster.nn1</name>
<value>-:</value>
<description></description>
</property> <property>
<name>dfs.namenode.servicerpc-address.hadoop-cluster.nn2</name>
<value>-:</value>
<description></description>
</property> <property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
<description></description>
</property> <property>
<name>dfs.client.failover.proxy.provider.hadoop-cluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
<description>出现故障,哪个实现类负责执行故障切换</description>
</property> <property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
<description>一旦NameNode切换,使用ssh方式进行操作</description>
</property> <property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
<description>如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置 </description>
</property> <property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value></value>
<description>ssh连接超时的最大时间</description>
</property> <property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/software/cloud/hadoop-2.6./hdfs/journal</value>
<description>配置项用于设置journalnode节点保存本地状态的目录。本地路径</description>
</property> <property>
<name>dfs.replication</name>
<value></value>
<description>数据备份数目</description>
</property> <property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://-:;-:;-:;-:;-:/hadoop-journal</value>
<description>这是NameNode读写JNs组的uri。通过这个uri,NameNodes可以读写edit log内容。hadoop-journal指journalnode设置的“dfs.journalnode.edits.dir”下的本地路径</description>
</property> <property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/software/cloud/hadoop-2.6./hdfs/name</value>
<description>本地磁盘目录,NN存储fsimage文件的地方。可以是按逗号分隔的目录列表,fsimage文件会存储在全部目录,冗余安全。这里多个目录设定,最好在多个磁盘,另外,如果其中一个磁盘故障,不会导致系统故障,会跳过坏磁盘。由于使用了HA,建议仅设置一个。本地路径</description>
</property> <property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/software/cloud/hadoop-2.6./hdfs/data</value>
<description>本地磁盘目录,HDFS数据应该存储Block的地方。可以是逗号分隔的目录列表(典型的,每个目录在不同的磁盘)。这些目录被轮流使用,一个块存储在这个目录,下一个块存储在下一个目录,依次循环。每个块在同一个机器上仅存储一份。不存在的目录被忽略。必须创建文件夹,否则被视为不存在。本地路径</description>
</property>
</configuration>
4.3.5 mapred-site.xml配置:
该文档主要配置 MapReduce 的计算框架类型和 Job 日志记录节点内容与保存路径即可,如需对 MapReduce 过程资源分配调优,则可以配置其 mapreduce.map.memory.mb、mapreduce.map.cpu.vcores、mapreduce.map.java.opts 等等,即对其 MapReduce 具体的每项流程进行资源配置,Map、Shuffle 和 Reduce 各占用的内存与 CPU 核数,是否压缩数据传递,在 Map 的到达百分之几时开始进行 Reduce 操作,并行数与 Shuffle 占 Reduce内存中的百分比等等
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property> <property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property> <property>
<name>mapreduce.reduce.shuffle.merge.percent</name>
<value>0.66</value>
</property> <property>
<name>mapreduce.jobhistory.address</name>
<value>-:</value>
</property> <property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>-:</value>
</property> <property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/hadoop/mr_history/tmp</value>
<description>
参数解释:MapReduce作业产生的日志存放位置。HDFS路径
</description>
</property> <property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/hadoop/mr_history/done</value>
<description>
参数解释:MR JobHistory Server管理的日志的存放位置。HDFS路径
</description>
</property>
</configuration>
4.3.6 yarn-site.xml:这里采用ResourceManager HA配置
<configuration> <!-- configeration for ResourceManger-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>-</value>
</property> <!-- configeration for NodeManager-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property> <property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property> <property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value></value>
</property> <property>
<name>yarn.nodemanager.local-dirs</name>
<value>/home/hadoop/software/cloud/hadoop-2.6./yarn/local</value>
<description>
数据写入本地文件系统路径的列表用逗号分隔,多条存储路径可以提高磁盘的读写速度
</description>
</property> <property>
<name>yarn.nodemanager.log-dirs</name>
<value>/home/hadoop/software/cloud/hadoop-2.6./yarn/log</value>
<description>
本地文件系统日志路径的列表逗号分隔,多条存储路径可以提高磁盘的读写速度
</description>
</property> <!-- HA 配置 =============================================================== -->
<!-- Resource Manager Configs -->
<property>
<name>yarn.resourcemanager.connect.retry-interval.ms</name>
<value></value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 使嵌入式自动故障转移。HA环境启动,与 ZKRMStateStore 配合 处理fencing -->
<property>
<name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
<value>true</value>
</property>
<!-- 集群名称,确保HA选举时对应的集群 -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarn-cluster</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 这里RM主备结点需要单独指定,(可选)
<property>
<name>yarn.resourcemanager.ha.id</name>
<value>rm2</value>
</property>
-->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
<value></value>
</property>
<!-- ZKRMStateStore 配置 -->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>-:,-:,-:,-:,-:</value>
</property>
<property>
<name>yarn.resourcemanager.zk.state-store.address</name>
<value>-:,-:,-:,-:,-:</value>
</property>
<!-- Client访问RM的RPC地址 (applications manager interface) -->
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>-:</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>-:</value>
</property>
<!-- AM访问RM的RPC地址(scheduler interface) -->
<property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>-:</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>-:</value>
</property>
<!-- RM admin interface -->
<property>
<name>yarn.resourcemanager.admin.address.rm1</name>
<value>-:</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address.rm2</name>
<value>-:</value>
</property>
<!--NM访问RM的RPC端口 -->
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>-:</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>-:</value>
</property>
<!-- RM web application 地址 -->
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>-:</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>-:</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address.rm1</name>
<value>-:</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address.rm2</name>
<value>-:</value>
</property>
</configuration>
4.3.7 配置slaves
- -
-
- -
-
-
-
4.3.8 配置masters
1421-0001
4.3.9 创建需要的目录
/home/hadoop/software/cloud/hadoop-2.6.0/hdfs/data
/home/hadoop/software/cloud/hadoop-2.6.0/hdfs/name
/home/hadoop/software/cloud/hadoop-2.6.0/hdfs/journal
/home/hadoop/software/cloud/hadoop-2.6.0/tmp
/home/hadoop/software/cloud/hadoop-2.6.0/yarn/local
/home/hadoop/software/cloud/hadoop-2.6.0/yarn/log
5 启动机群
5.1 第一次启动
5.1.1 启动ZK:
在所有的 ZK 节点执行命令:zkServer.sh start,查看各个 ZK 的从属关系:zkServer.sh status 结果为 Mode: follower or leader,注意:哪个 ZK 节点会成为 leader 默认是通过 ZK 快速选举诞生的,这里就不介绍其快速选举的具体流程了。此时,在各个节点都可以查看到 ZK 进程,在 Shell 窗口下输入jps 即可,内容如下:
xxxx QuorumPeerMain
xxxx Jps
5.1.2 格式化ZK(仅第一次需要做)
任意 namenode 节点上执行:hdfs zkfc –formatZK
5.1.3 启动 ZKFC:
ZookeeperFailoverController 是用来监控 NN 状态,协助实现主备 NN 切换的,所以仅仅在主备 NN 节点上启动就行:hadoop-daemon.sh start zkfc,启动后我们可以看到 ZKFC 进程:
xxxx Jps
xxxx DFSZKFailoverController
5.1.4 启动JournalNode
启动用于主备 NN 之间同步元数据信息的共享存储系统 JournalNode,参见角色分配表,在各个 JN 节点上启动:hadoop-daemon.sh start journalnode,启动后在各个 JN 节点都可以看到 JournalNode 进程:
xxxx QuorumPeerMain
xxxx Jps
xxxx JournalNode
5.1.5 格式化并启动NN
格式化:hdfs namenode –format hadoop-cluster,注意:只有第一次启动系统时需格式化,请勿重复格式化。在主 NN 节点执行命令启动 NN:hadoop-daemon.sh start namenode
启动后可以看到 NN 进程:
xxxx Jps
xxxx NameNode
xxxx DFSZKFailoverController
5.1.6 在备 NN 上同步主 NN 的元数据信息:
hdfs namenode –bootstrapStandby,正常执行时的最后部分日志中,INFO util.ExitUtil: Exiting with status 后的数字为0 则是正常退出,即正常启动。而如果为其他数字,则需要到 hadoop 安装目录下的 log 中查询 namenode 启动失败的原因,根据其描述进行解决。
5.1.7 启动备 NN,在备 NN 上执行命令:hadoop-daemon.sh start namenode
5.1.8 设置主 NN
(这一步可以省略,这是在设置手动切换 NN 时的步骤,ZK 已经自动选择一个节点作为主 NN 了,如果两个节点都是Standby,那么可以用下面的命令设置主NN,但是因为是自动切换的,所以两个都是standby说明机群有问题)
hdfs haadmin -transitionToActive nn1
5.1.9 在主 NN 上启动 Datanode,在[nn1]上,启动所有 datanode:hadoop-daemons.sh start datanode
5.1.10 启动yarn:
因为namenode和resourcemanger都要战勇很大量资源,所以把他俩分开部署。首先在1423-0001启动yarn:start-yarn.sh,在备机启动RM:yarn-daemon.sh start resourcemanager
5.1.11 在运行 MRJS 的 1423-003上执行以下命令启动 MR JobHistory Server:mr-jobhistory-daemon.sh start historyserver
5.2 整个集群的启动与关闭
在之后如果没有特殊原因,可以通过命令 start-all.sh 和 stop-all.sh 分别启动或关闭整个 Hadoop 集群。
5.3 测试Wordcount
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar wordcount /hadoop/input/zookeeper.out /hadoop/output/wordcount
6 HBase配置
6.1 配置hbase-env.sh
export JAVA_HOME=/usr/lib/jvm/java-1.7.-openjdk-amd64
export HBASE_MANAGES_ZK=false
6.2 配置hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://1421-0002:9000/hbase</value>
<description></description>
</property> <property>
<name>hbase.cluster.distributed</name>
<value>true</value>
<description></description>
</property> <property>
<name>hbase.master</name>
<value>1421-0002:6000</value>
<description></description>
</property> <property>
<name>hbase.zookeeper.quorum</name>
<value>1421-0000,1421-0003,1421-0004,1421-0005,1421-0006</value>
<description></description>
</property> <property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
<description></description>
</property> <property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/software/cloud/zookeeper-3.4.6/zoodata</value>
<description></description>
</property> <property>
<name>hbase.zookeeper.property.logDir</name>
<value>/home/hadoop/software/cloud/zookeeper-3.4.6/zoolog</value>
<description></description>
</property> </configuration>
6.3 配置regionservers:这里将所有的DN作为regionservers
1421-0000
1421-0001 1423-0001
1423-0002
1423-0003 1421-0003
1421-0004
1421-0005
1421-0006
6.4 启动
Hbase 的启动非常简单,只需要在主节点上输入 start-hbase.sh 即可启动HMaster 与 HRegionServer 守护进程。
7 常见问题
7.1 在我修改了整个机群的机器名和hadoop,zookeeper配置后,在启动hadoop,发现两个namenode都是standby,之前都是好好的,但是又一次启动之后发现两个NN都是standby,那么只能手动切换了,但是手动切换后刚开始是好的,但是过了一小会就海变成了standby,后来看日志发现可能是因为修改了机器名,但是没有重新格式化,导致了文件中主机名不一致,其中有一个错误是关于ZK中edit的,然后只能重新格式化NN,格式化完就好了,但是数据没备份,没了。。
hdfs haadmin -transitionToActive --forcemanual nn1
附上一些实用命令
执行命令“hdfs haadmin”,会显示子命令列表,如下
Usage: DFSHAAdmin [-ns <nameserviceId>]
[-transitionToActive <serviceId>]
[-transitionToStandby <serviceId>]
[-failover [--forcefence] [--forceactive] <serviceId> <serviceId>]
[-getServiceState <serviceId>]
[-checkHealth <serviceId>]
[-help <command>]
如果要查看具体用法,使用“hdfs haadmin -help <command>”。其中,
transitionToActive和transitionToStandby是用于在不同状态之间切换的。这些命令没有任何防护错误,很少使用。
failover 初始化一个故障恢复。该命令会从一个失效的NameNode切换到另一个上面。
getServiceState 获取当前NameNode的状态。
checkHealth 检查NameNode的状态。正常就返回0,否则返回非0值。
Ubuntu 14.10 下ZooKeeper+Hadoop2.6.0+HBase1.0.0 的HA机群高可用配置的更多相关文章
-
Ubuntu 14.10 下编译Hadoop2.4.0
在http://www.aboutyun.com/thread-8130-1-1.html 这里看到到,安装过程遇到了上面说的问题,所以将此文转载过来,以备不时之需,感谢此作者. 问题导读: 1.如果 ...
-
Ubuntu 14.10 下安装伪分布式hdoop 2.5.0
折腾了一天,其间配置SSH时候出现了问题,误删了ssh-keygen相关文件,导致配置SSH彻底萎了,又重装了系统.... 采用伪分布式模式,即hadoop将所有进程运行于同一台主机上,但此时Hado ...
-
Ubuntu 14.10下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)
Ubuntu 14.10下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具) 最近因为项目关系,收朋友之托,想制作秀场网站,但是因为之前一直没有涉及到这 ...
-
Ubuntu 14.10 下安装Ganglia监控集群
关于 Ganglia 软件,Ganglia是一个跨平台可扩展的,高性能计算系统下的分布式监控系统,如集群和网格.它是基于分层设计,它使用广泛的技术,如XML数据代表,便携数据传输,RRDtool用于数 ...
-
Ubuntu 14.10 下Hive配置
1 系统环境 Ubuntu 14.10 JDK-7 Hadoop 2.6.0 2 安装步骤 2.1 下载Hive 我第一次安装的时候,下载的是Hive-1.2.1,配置好之后,总是报错 [ERROR] ...
-
Ubuntu 14.10 下安装java反编译工具 jd-gui
系统环境,Ubuntu 14.10 ,64位 1 下载JD-GUI,网址http://221.3.153.126/1Q2W3E4R5T6Y7U8I9O0P1Z2X3C4V5B/jd.benow.ca/ ...
-
Ubuntu 14.10 下DokuWiki安装
环境说明: Ubuntu 14.10 64位 1 下载DokuWiki:http://download.dokuwiki.org/ 2 解压到 /var/www/html下面 3 如果没有安装Apac ...
-
Ubuntu 14.10 下awk命令详解
简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...
-
Ubuntu 14.10 下Server版本中文乱码问题
在安装Ubuntu server 14.10 时候选择了中文版,但是装好系统发现,里面的中文有乱码,解决办法 打开 /etc/default/locale sudo nano /etc/default ...
随机推荐
-
《BI项目笔记》创建父子维度
创建步骤: 而ParentOriginID其实就是对应的ParentOriginID,它的 Usage 必须是 Parent 才能表示这样的一个父子维度. 查看OriginID属性, Usage 是 ...
-
[CareerCup] 11.7 Tower of People in Circus 马戏团的人塔
11.7 A circus is designing a tower routine consisting of people standing atop one another's shoulder ...
-
应中DOS中断显示字符串(摘自《汇编语言》王爽)
data segment s1 db 'Good,better,best,$' s2 db 'Never let it rest,$' s3 db 'Till good is better,$' s4 ...
-
Unity3d集成移动MM SDK 2.2的技术要点(坑爹的MM SDK)
原地址:http://dong2008hong.blog.163.com/blog/static/4696882720140423517951/ U3D集成移动MM的SDK绝对是以坑爹为主的东西. 浪 ...
-
graylog2 架构--转载
原文地址:http://docs.graylog.org/en/latest/pages/architecture.html Architectural considerations There ar ...
-
Ubuntu环境下NFS服务器搭建
看到鸟哥私房菜对NFS的介绍,就想试试玩一下.看起来步骤也很简单. 1.背景名词. NFS(Network File System) 作用:让所有的Unix-like 机器通过网络共享彼此的文件 局限 ...
-
二分图最大匹配 Hopcroft-Karp算法模板
#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> ...
-
Docker Compose容器编排
Compose是Docker官方的开源项目,可以实现对Docker容器集群的快速编排.Compose 中有两个重要的概念:服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实 ...
-
Scikit-learn:数据预处理Preprocessing data
http://blog.csdn.net/pipisorry/article/details/52247679 本blog内容有标准化.数据最大最小缩放处理.正则化.特征二值化和数据缺失值处理. 基础 ...
-
剑指offer 05:用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题代码 import java.util.Stack; public class Solution{ ...